diff options
| author | Simon Hausmann <simon.hausmann@nokia.com> | 2012-01-06 14:44:00 +0100 |
|---|---|---|
| committer | Simon Hausmann <simon.hausmann@nokia.com> | 2012-01-06 14:44:00 +0100 |
| commit | 40736c5763bf61337c8c14e16d8587db021a87d4 (patch) | |
| tree | b17a9c00042ad89cb1308e2484491799aa14e9f8 /Source/JavaScriptCore/ChangeLog | |
| download | qtwebkit-40736c5763bf61337c8c14e16d8587db021a87d4.tar.gz | |
Imported WebKit commit 2ea9d364d0f6efa8fa64acf19f451504c59be0e4 (http://svn.webkit.org/repository/webkit/trunk@104285)
Diffstat (limited to 'Source/JavaScriptCore/ChangeLog')
| -rw-r--r-- | Source/JavaScriptCore/ChangeLog | 50321 |
1 files changed, 50321 insertions, 0 deletions
diff --git a/Source/JavaScriptCore/ChangeLog b/Source/JavaScriptCore/ChangeLog new file mode 100644 index 000000000..8408f380c --- /dev/null +++ b/Source/JavaScriptCore/ChangeLog @@ -0,0 +1,50321 @@ +2012-01-06 Tor Arne Vestbø <tor.arne.vestbo@nokia.com> + + [Qt] Move listing of include paths and libs to pri files in sources + + Includepaths are sometimes modified by non-Qt contributors so keeping + them in files inside Sources makes it more likely that they are updated + along with project files for the other ports. + + Using pri files instead of prf files for this also has the benefit that + the include() from the main target file can be parsed and followed by + Qt Creator -- something that does not work with load(). + + Dependency from a target to a library through the WEBKIT variable are + handled through forwarding-files in Tools/qmake/mkspecs/modules, which + set the source root of the module and include the right pri file. + + Ideally we'd use the variant of include() that takes an optional + namespace to read the variables into, or the fromfile() function, + but both of these add an overhead of about 40% on the total qmake + runtime, due to making a deep copy of all the variables in the + project or re-reading all the prf files from scratch. + + Reviewed by Simon Hausmann. + Reviewed by Ossy. + + * JavaScriptCore.pri: Renamed from Tools/qmake/mkspecs/features/javascriptcore.prf. + * Target.pri: + * wtf/wtf.pri: Renamed from Tools/qmake/mkspecs/features/wtf.prf. + * wtf/wtf.pro: + +2012-01-06 Hajime Morrita <morrita@chromium.org> + + WTF::String: Inline method shouldn't have WTF_EXPORT_PRIVATE + https://bugs.webkit.org/show_bug.cgi?id=75612 + + Reviewed by Kevin Ollivier. + + * wtf/text/WTFString.h: + (WTF::String::findIgnoringCase): + (WTF::String::append): + (WTF::String::fromUTF8): + (WTF::String::fromUTF8WithLatin1Fallback): + (WTF::String::isHashTableDeletedValue): + +2012-01-05 Dan Bernstein <mitz@apple.com> + + <rdar://problem/10633760> Update copyright strings + + Reviewed by Mark Rowe. + + * Info.plist: + +2012-01-05 Gavin Barraclough <barraclough@apple.com> + + Date constructor handles infinite values incorrectly. + https://bugs.webkit.org/show_bug.cgi?id=70998 + + Reviewed by Filip Pizlo. + + * runtime/DateConstructor.cpp: + (JSC::constructDate): + - should be checking !finite rather then isnan. + +2012-01-05 Gavin Barraclough <barraclough@apple.com> + + date.toISOString produces incorrect results for dates with ms prior to 1970 + https://bugs.webkit.org/show_bug.cgi?id=75684 + + Reviewed by Sam Weinig. + + * runtime/DatePrototype.cpp: + (JSC::dateProtoFuncToISOString): + +2012-01-05 Gavin Barraclough <barraclough@apple.com> + + Array.prototype.lastIndexOf ignores undefined fromIndex. + https://bugs.webkit.org/show_bug.cgi?id=75678 + + Reviewed by Sam Weinig. + + array.lastIndexOf(x, undefined) is equivalent to array.lastIndexOf(x, 0), not array.lastIndexOf(x) + + * runtime/ArrayPrototype.cpp: + (JSC::arrayProtoFuncLastIndexOf): + - should check argumnet count, rather than checking agument value for undefined. + +2012-01-05 Gavin Barraclough <barraclough@apple.com> + + Date parsing is too restrictive. + https://bugs.webkit.org/show_bug.cgi?id=75671 + + Reviewed by Oliver Hunt. + + ES5 date parsing currently requires all fields to be present, which does not match the spec (ES5.1 15.9.1.15). + The spec allow a date to be date only, or date + time. + + The date portion on the should match: (pseudocode!:) + [(+|-)YY]YYYY[-MM[-DD]] + though we are slightly more liberal (permitted by the spec), allowing: + [+|-]Y+[-MM[-DD]] + The time portion should match: + THH:mm[:ss[.sss]][Z|(+|-)HH:mm] + again we're slightly more liberal, allowing: + THH:mm[:ss[.s+]][Z|(+|-)HH:mm] + + * wtf/DateMath.cpp: + (WTF::parseES5DatePortion): + - Month/day fields are optional, default to 01. + (WTF::parseES5TimePortion): + - Hours/Minutes are requires, seconds/timezone are optional. + (WTF::parseES5DateFromNullTerminatedCharacters): + - Dates may be date only, or date + time. + +2012-01-05 Bruno Dilly <bdilly@profusion.mobi> + + [EFL] Undefined references to ICU_I18N symbols on WTF + https://bugs.webkit.org/show_bug.cgi?id=75642 + + Unreviewed build fix. + + Add ${ICU_I18N_LIBRARIES} to WTF_LIBRARIES on wtf efl platform cmake. + Some undefined references were ucol_setAttribute_44, ucol_close_44, + ucol_getAttribute_44... + + * wtf/PlatformEfl.cmake: + +2012-01-05 Geoffrey Garen <ggaren@apple.com> + + Refined the fast path for StringImpl::hash() + https://bugs.webkit.org/show_bug.cgi?id=75178 + + Reviewed by Darin Adler. + + Moved the hash calculation code into an out-of-line function to clean up + the hot path. + + No measurable benchmark change, but this knocks some samples off in + Instruments, and I think this is a step toward removing -fomit-frame-pointer. + + * wtf/text/StringImpl.cpp: + (WTF::StringImpl::hashSlowCase): + * wtf/text/StringImpl.h: + (WTF::StringImpl::hash): The patch. + + * wtf/text/StringStatics.cpp: + (WTF::StringImpl::hashSlowCase): Abide by the cockamamie Windows build + scheme, which requires all out-of-line StringImpl functions used by + WebCore be defined in this file instead of StringImpl.cpp. (See http://trac.webkit.org/changeset/59187.) + +2012-01-05 Gavin Barraclough <barraclough@apple.com> + + Literal tab in JSONString fails + https://bugs.webkit.org/show_bug.cgi?id=71772 + + Reviewed by Oliver Hunt. + + rfc4627 does not allow literal tab characters in JSON source. + + * runtime/LiteralParser.cpp: + (JSC::isSafeStringCharacter): + - do not allow literal tab in StrictJSON mode. + +2012-01-05 Gavin Barraclough <barraclough@apple.com> + + push/shift fifo may consume excessive memory + https://bugs.webkit.org/show_bug.cgi?id=75610 + + Reviewed by Sam Weinig. + + Array object commonly store data in a vector, consisting of a portion that is + in use, a pre-capacity (m_indexBias) and a post-capacity (the delta between + m_length and m_vectorLength). Calls to shift with grow the pre-capacity, and + the current algorithm for increaseVectorLength (used by push, or [[Put]]) will + never shrink the pre-capacity, so a push/shift fifo may consume an inordinate + amount of memory, whilst having a relatively small active length. + + * runtime/JSArray.cpp: + (JSC::JSArray::increaseVectorLength): + - If m_indexBias is non-zero, decay it over time. + +2012-01-05 Csaba Osztrogonác <ossy@webkit.org> + + unshift/pop fifo may consume excessive memory + https://bugs.webkit.org/show_bug.cgi?id=75588 + + Reviewed by Zoltan Herczeg. + + Buildfix after r104120. + + * runtime/JSArray.cpp: Remove useless asserts, baecause unsigned expression >= 0 is always true + (JSC::JSArray::unshiftCount): + +2012-01-05 Zoltan Herczeg <zherczeg@webkit.org> + + Unreviewed gardening after r104134. + + * wtf/Assertions.cpp: + +2012-01-05 Zoltan Herczeg <zherczeg@webkit.org> + + Unreviewed gardening after r75605. + + Rubber stamped by NOBODY Csaba Osztrogonác. + + * wtf/Assertions.cpp: + +2012-01-05 Benjamin Poulain <benjamin@webkit.org> + + Improve charactersAreAllASCII() to compare multiple characters at a time + https://bugs.webkit.org/show_bug.cgi?id=74063 + + Reviewed by Darin Adler. + + A new header ASCIIFastPath.h contains the functions related to + the detection of ASCII by using machine words. Part of it comes from + WebCore's TextCodecASCIIFastPath.h. + + The function charactersAreAllASCII() is moved to TextCodecASCIIFastPath.h + and is implemented with computer word comparison. + The gain over the previous implementation of charactersAreAllASCII() is of + the order of how many comparison are avoided (4x, 8x, 16x depending on the + format and the CPU type). + + * GNUmakefile.list.am: + * JavaScriptCore.gypi: + * JavaScriptCore.vcproj/WTF/WTF.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * wtf/text/ASCIIFastPath.h: Added. + (WTF::isAlignedToMachineWord): + (WTF::alignToMachineWord): + (WTF::isAllASCII): + (WTF::charactersAreAllASCII): + * wtf/text/WTFString.h: + * wtf/wtf.pro: + +2012-01-05 Mark Rowe <mrowe@apple.com> + + <http://webkit.org/b/75606> [Mac] WTF logging functions should output to both stderr and ASL + + We should always log to both ASL and stderr on platforms where this won't result in launchd + duplicating the messages. + + Reviewed by Dan Bernstein. + + * wtf/Assertions.cpp: + (vprintf_stderr_common): + +2012-01-05 Mark Rowe <mrowe@apple.com> + + <http://webkit.org/b/75605> WTF logging functions should call vprintf_stderr_common only once per line + + Several of the WTF logging functions make multiple calls to vprintf_stderr_common to output a + single line of text. This results in strangely formatted output if vprintf_stderr_common is + retargeted to an output device that is message-oriented (such as ASL) rather than stream-oriented + like stderr. + + Reviewed by Dan Bernstein. + + * wtf/Assertions.cpp: + (vprintf_stderr_with_prefix): Helper function to prepend a given prefix on to the given format + string before handing it off to vprintf_stderr_common. This requires disabling warnings about + calling a printf-like function with a non-literal format string for this piece of code. It's + safe in this particular case as vprintf_stderr_with_prefix is only ever given a literal prefix. + (vprintf_stderr_with_trailing_newline): Helper function to append a trailling newline on to the + given format string if one does not already exist. It requires the same treatment with regards + to the non-literal format string warning. + (WTFReportAssertionFailureWithMessage): Switch to using vprintf_stderr_with_prefix. + (WTFReportBacktrace): Switch from calling fprintf directly to using fprintf_stderr_common. + (WTFReportFatalError): Switch to using vprintf_stderr_with_prefix. + (WTFReportError): Ditto. + (WTFLog): Switch to using vprintf_stderr_with_trailing_newline. + (WTFLogVerbose): Ditto. + +2012-01-04 Gavin Barraclough <barraclough@apple.com> + + unshift/pop fifo may consume excessive memory + https://bugs.webkit.org/show_bug.cgi?id=75588 + + Reviewed by Sam Weinig. + + The Array object commonly store data in a vector, consisting of a portion that + is in use, a pre-capacity (m_indexBias) and a post-capacity (the delta between + m_length and m_vectorLength). Calls to pop with grow the post-capacity, and the + current algorithm for increasePrefixVectorLength (used by unshift) will never + stink the post-capacity, so a unshift/pop fifo may consume an inordinate amount + of memory, whilst having a relatively small active length. + + * runtime/JSArray.cpp: + (JSC::storageSize): + - sizeof(JSValue) should be sizeof(WriteBarrier<Unknown>) + (JSC::SparseArrayValueMap::put): + - sizeof(JSValue) should be sizeof(WriteBarrier<Unknown>) + (JSC::JSArray::increaseVectorLength): + - sizeof(JSValue) should be sizeof(WriteBarrier<Unknown>) + (JSC::JSArray::unshiftCountSlowCase): + - renamed from increaseVectorPrefixLength (this was a bad name, since it + also moved the ArrayStorage header), rewritten. + (JSC::JSArray::shiftCount): + - sizeof(JSValue) should be sizeof(WriteBarrier<Unknown>), count should be unsigned + (JSC::JSArray::unshiftCount): + - sizeof(JSValue) should be sizeof(WriteBarrier<Unknown>), count should be unsigned, + increaseVectorPrefixLength renamed to unshiftCountSlowCase + (JSC::JSArray::sortNumeric): + * runtime/JSArray.h: + - Updated function declarations, m_indexBias should be unsigned. + +2012-01-04 Mark Rowe <mrowe@apple.com> + + <http://webkit.org/b/75604> All instances of JSC::ArgumentsData appear to be leaked by JSC::Arguments + + Since JSC::Arguments has an OwnPtr for a member it needs to override destroy + to ensure that the correct destructor is invoked. This is necessary because + JSCell subclasses all intentionally have non-virtual destructors. + + Reviewed by Filip Pizlo. + + * runtime/Arguments.cpp: + (JSC::Arguments::destroy): + * runtime/Arguments.h: + +2012-01-04 Filip Pizlo <fpizlo@apple.com> + + Unreviewed, accidentally turned off the JIT in previous commit. Turning + it back on. + + * wtf/Platform.h: + +2012-01-04 Filip Pizlo <fpizlo@apple.com> + + Changed "return" to "break" in some macrology I introduced in + http://trac.webkit.org/changeset/104086. This is a benign change, as + "return" was technically correct for all uses of the macro. + + Reviewed by Oliver Hunt. + + * dfg/DFGGraph.cpp: + * wtf/Platform.h: + +2012-01-04 Michael Saboff <msaboff@apple.com> + + StructureStubInfo not reset when corresponding MethodCallLinkInfo is reset + https://bugs.webkit.org/show_bug.cgi?id=75583 + + Reviewed by Filip Pizlo. + + * bytecode/CodeBlock.cpp: + (JSC::CodeBlock::finalizeUnconditionally): Find the corresponding + StructureStubInfo and reset the appropriate JIT and + the StructureStubInfo itself when reseting a MethodCallLinkInfo. + +2012-01-04 Michael Saboff <msaboff@apple.com> + + Invalid ASSERT() in DFGRepatch.cpp near line 385 + https://bugs.webkit.org/show_bug.cgi?id=75584 + + Reviewed by Filip Pizlo. + + * dfg/DFGRepatch.cpp: + (JSC::DFG::tryBuildGetByIDProtoList): Fixed ASSERT to use ==. + +2012-01-04 Filip Pizlo <fpizlo@apple.com> + + Incorrect use of DFG node reference counts when mutating the graph + https://bugs.webkit.org/show_bug.cgi?id=75580 + <rdar://problem/10644607> + + Reviewed by Oliver Hunt. + + Made deref(node) follow the pattern of ref(node), which it should have + to begin with. + + * dfg/DFGGraph.cpp: + (JSC::DFG::Graph::refChildren): + (JSC::DFG::Graph::derefChildren): + * dfg/DFGGraph.h: + (JSC::DFG::Graph::deref): + (JSC::DFG::Graph::clearAndDerefChild1): + (JSC::DFG::Graph::clearAndDerefChild2): + (JSC::DFG::Graph::clearAndDerefChild3): + * dfg/DFGNode.h: + (JSC::DFG::Node::deref): + * dfg/DFGPropagator.cpp: + (JSC::DFG::Propagator::fixupNode): + +2012-01-04 Tor Arne Vestbø <tor.arne.vestbo@nokia.com> + + [Qt] Introduce new qmake variable 'WEBKIT' for signaling dependencies + + The custom qmake variable 'WEBKIT' is used for signaling that a + target depends in some way on other subproject of the WebKit + project. For now this is limited to the set of intermediate + libraries: wtf, javascriptcore, webcore, and webkit2. + + This replaces the previous convension of using load(foo) for + just include paths, and CONFIG += foo to also link against foo. + + Adding a dependency results in additional include paths being + available, and potentially linking to the library. This is + decided by the build system based on conditions such as what + kind of target is being built and the general build config. + + An advantage to his approach is that it simplifies the individual + foo.prf files, for example by allowing us to use INCLUDEPATH += + and LIBS += as normal instead of prepending. + + Reviewed by Simon Hausmann. + + * Target.pri: + * jsc.pro: + * wtf/wtf.pro: + +2012-01-03 Filip Pizlo <fpizlo@apple.com> + + DFG: The assertion that a double-voted variable cannot become double-unvoted is wrong + https://bugs.webkit.org/show_bug.cgi?id=75516 + <rdar://problem/10640266> + + Reviewed by Gavin Barraclough. + + Removed the offending assertion, since it was wrong. Also hardened the code to make + this case less likely by first having the propagator fixpoint converge, and then doing + double voting combined with a second fixpoint. This is neutral on benchmarks and + fixes the assertion in a fairly low-risk way (i.e. we won't vote a variable double + until we've converged to the conclusion that it really is double). + + * dfg/DFGPropagator.cpp: + (JSC::DFG::Propagator::propagatePredictions): + * dfg/DFGVariableAccessData.h: + (JSC::DFG::VariableAccessData::tallyVotesForShouldUseDoubleFormat): + +2012-01-03 Filip Pizlo <fpizlo@apple.com> + + REGRESSION (r98196-98236): Incorrect layout of iGoogle with RSS feeds + https://bugs.webkit.org/show_bug.cgi?id=75303 + <rdar://problem/10633533> + + Reviewed by Gavin Barraclough. + + The this argument was not being kept alive in some cases during inlining and intrinsic + optimizations. + + * dfg/DFGByteCodeParser.cpp: + (JSC::DFG::ByteCodeParser::handleCall): + (JSC::DFG::ByteCodeParser::emitFunctionCheck): + (JSC::DFG::ByteCodeParser::handleInlining): + +2012-01-03 Gavin Barraclough <barraclough@apple.com> + + Windows build fix. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + +2012-01-03 Gavin Barraclough <barraclough@apple.com> + + Windows build fix. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + +2012-01-03 Gavin Barraclough <barraclough@apple.com> + + https://bugs.webkit.org/show_bug.cgi?id=75140 + + Reviewed by Sam Weinig. + + Rewrite JSArray::putSlowCase to be much cleaner & simpler. + + This rewrite only significantly changes behaviour for sparse array, specifically + in how sparse arrays are reified back to vector form. This does not affect arrays + with less than 10000 entries (since these always use a vector). The more common + cases of sparse array behavior (though large sparse arrays are rare) - arrays that + always remain sparse, and arrays that are filled in reverse sequential order - + should be just as fast or faster (since reification is simpler & no longer + requires map lookups) after these changes. + + Simplifying this code allows all cases of putByIndex that need to grow the vector + to do so via increaseVectorLength, which means that this method can encapsulate + the policy of determining how the vector should be grown. + + No performance impact. + + * runtime/JSArray.cpp: + (JSC::isDenseEnoughForVector): + - any array of length <= MIN_SPARSE_ARRAY_INDEX is dense enough for a vector. + (JSC::JSArray::putByIndex): + - simplify & comment. + (JSC::JSArray::putByIndexBeyondVectorLength): + - Re-written to be much clearer & simpler. + (JSC::JSArray::increaseVectorLength): + (JSC::JSArray::increaseVectorPrefixLength): + - add explicit checks against MAX_STORAGE_VECTOR_LENGTH, so clients do not need do so. + (JSC::JSArray::push): + - simplify & comment. + * runtime/JSArray.h: + - removed SparseArrayValueMap::take. + +2012-01-03 Gavin Barraclough <barraclough@apple.com> + + Windows build fix. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + +2012-01-03 Gavin Barraclough <barraclough@apple.com> + + https://bugs.webkit.org/show_bug.cgi?id=75140 + + Reviewed by Sam Weinig. + + Simplify JSArray creation - remove ArgsList/JSValue* create methods + (this functionality can be implemented in terms of tryCreateUninitialized). + + * JavaScriptCore.exp: + * runtime/ArrayConstructor.cpp: + - use constructArray/constructEmptyArray instead of calling JSArray::create directly + (JSC::constructArrayWithSizeQuirk): + * runtime/JSArray.cpp: + * runtime/JSArray.h: + - removed ArgsList/JSValue* create methods + * runtime/JSGlobalObject.h: + (JSC::constructEmptyArray): + (JSC::constructArray): + - changed to be implemented in terms of JSArray::tryCreateUninitialized + +2012-01-03 Gavin Barraclough <barraclough@apple.com> + + https://bugs.webkit.org/show_bug.cgi?id=75429 + ThrowTypeError should be a singleton object + + Reviewed by Sam Weinig. + + Per section 13.2.3 of the spec. + We could change setAccessorDescriptor to be able to share the global + GetterSetter object, rather than storing the accessor functions and + creating a new GetterSetter in defineProperty - but this won't be a + small change to PropertyDescriptors (and would probably mean making + GetterSetter objects immutable?) - so I'll leave that for another + patch. + + * JavaScriptCore.exp: + - don't export setAccessorDescriptor + * runtime/Arguments.cpp: + (JSC::Arguments::createStrictModeCallerIfNecessary): + (JSC::Arguments::createStrictModeCalleeIfNecessary): + - call throwTypeErrorGetterSetter instead of createTypeErrorFunction + * runtime/Error.cpp: + * runtime/Error.h: + - remove createTypeErrorFunction + * runtime/JSFunction.cpp: + * runtime/JSFunction.h: + - remove unused createDescriptorForThrowingProperty + * runtime/JSGlobalObject.cpp: + (JSC::JSGlobalObject::reset): + (JSC::JSGlobalObject::visitChildren): + - removed m_strictModeTypeErrorFunctionStructure. + * runtime/JSGlobalObject.h: + (JSC::JSGlobalObject::internalFunctionStructure): + - removed m_strictModeTypeErrorFunctionStructure. + * runtime/PropertyDescriptor.cpp: + (JSC::PropertyDescriptor::setAccessorDescriptor): + - changed to take a GetterSetter + * runtime/PropertyDescriptor.h: + - changed to take a GetterSetter + +2012-01-02 Gavin Barraclough <barraclough@apple.com> + + Check in fixes for jsc tests following bug #75455. + + * tests/mozilla/ecma/GlobalObject/15.1.2.2-1.js: + * tests/mozilla/ecma/GlobalObject/15.1.2.2-2.js: + +2012-01-02 Gavin Barraclough <barraclough@apple.com> + + https://bugs.webkit.org/show_bug.cgi?id=75452 + If argument to Error is undefined, message is not set + + Reviewed by Sam Weinig. + + Per section 15.11.1.1 of the spec. + + * runtime/ErrorInstance.h: + (JSC::ErrorInstance::create): + (JSC::ErrorInstance::finishCreation): + +2012-01-02 Gavin Barraclough <barraclough@apple.com> + + ES5 prohibits parseInt from supporting octal + https://bugs.webkit.org/show_bug.cgi?id=75455 + + Reviewed by Sam Weinig. + + See sections 15.1.2.2 and annex E. + + * runtime/JSGlobalObjectFunctions.cpp: + (JSC::parseInt): + +2012-01-02 Gavin Barraclough <barraclough@apple.com> + + https://bugs.webkit.org/show_bug.cgi?id=55343 + Global JSON should be configurable but isn't + + Reviewed by Sam Weinig. + + * runtime/JSGlobalObject.cpp: + (JSC::JSGlobalObject::reset): + - make JSON configurable + +2012-01-01 Filip Pizlo <fpizlo@apple.com> + + Call instructions should leave room for linking information + https://bugs.webkit.org/show_bug.cgi?id=75422 + <rdar://problem/10633985> + + Reviewed by Oliver Hunt. + + * bytecode/Opcode.h: + * bytecompiler/BytecodeGenerator.cpp: + (JSC::BytecodeGenerator::emitCall): + (JSC::BytecodeGenerator::emitConstruct): + +2011-12-31 Dan Bernstein <mitz@apple.com> + + Continue trying to fix the Windows build after r103823. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + +2011-12-31 Dan Bernstein <mitz@apple.com> + + Start trying to fix the Windows build after r103823. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + +2011-12-30 Anders Carlsson <andersca@apple.com> + + Add a ParamStorageTraits specialization for RetainPtr + https://bugs.webkit.org/show_bug.cgi?id=75392 + + Reviewed by Daniel Bates. + + * wtf/Functional.h: + Add a partial specialization of ParamStorageTraits for RetainPtr<T>. + + * wtf/RetainPtr.h: + Bring in the retainPtr function template from WTF. + +2011-12-29 Sam Weinig <sam@webkit.org> + + It should be easier to iterate a Vector backwards + https://bugs.webkit.org/show_bug.cgi?id=75359 + + Reviewed by Anders Carlsson. + + Adds Vector::rbegin(), Vector::rend(), and Vector::reversed(), + a new proxy driven way to access a vector backwards. One can use + reversed() in a range-based for loop like so: + + for (auto val: myVector.reversed()) + doSomething(val) + + * wtf/Vector.h: + (WTF::Vector::~Vector): + Fix style. + + (WTF::Vector::rbegin): + (WTF::Vector::rend): + Added using standard adaptor std::reverse_iterator. + + (WTF::Vector::reversed): + (WTF::Vector::VectorReverseProxy::begin): + (WTF::Vector::VectorReverseProxy::end): + Add proxy similar to one used in HashMap for keys() and values() + which allows access to a Vector backwards for use in range-based + for loops. + +2011-12-29 Gavin Barraclough <barraclough@apple.com> + + https://bugs.webkit.org/show_bug.cgi?id=75140 + + Reviewed by Oliver Hunt. + + Start cleaning up JSArray construction. JSArray has a set of create methods, + one of which (currently) takes a 'creation mode' enum parameter. Based on that + parameter, the constructor does one of two completely different things. If the + parameter is 'CreateInitialized' it creates an array, setting the length, but + does not eagerly allocate a storage vector of the specified length. A small + (BASE_VECTOR_LEN sized) initial vector will be allocated, and cleared, property + access to the vector will read the hole value (return undefined). The alternate + usage of this method ('CreateCompact') does something very different. It tries + to create an array of the requested length, and also allocates a storage vector + large enough to hold all properties. It does not clear the storage vector, + leaving the memory uninitialized and requiring the user to call a method + 'uncheckedSetIndex' to initialize values in the vector. + + This patch factors out these two behaviours, moving the 'CreateCompact' mode + into its own method, 'tryCreateUninitialized' (matching the naming for this + functionality in the string classes). 'tryCreateUninitialized' may return 0 if + memory allocation fails during construction of the object. The construction + pattern changes such that values added during initialization will be marked if + a GC is triggered during array allocation. 'CreateInitialized' no longer need + be passed to create a normal, fully constructed array with a length, and this + method is merged with the version of 'create' that does not take an initial + length (length parameter defaults to 0). + + * JavaScriptCore.exp: + * runtime/ArrayConstructor.cpp: + (JSC::constructArrayWithSizeQuirk): + - removed 'CreateInitialized' argument + * runtime/ArrayPrototype.cpp: + (JSC::arrayProtoFuncSplice): + - changed to call 'tryCreateUninitialized' + * runtime/FunctionPrototype.cpp: + (JSC::functionProtoFuncBind): + - changed to call 'tryCreateUninitialized' + * runtime/JSArray.cpp: + (JSC::JSArray::JSArray): + - initialize m_storage to null; if construction fails, make destruction safe + (JSC::JSArray::finishCreation): + - merge versions of this method, takes an initialLength parameter defaulting to zero + (JSC::JSArray::tryFinishCreationUninitialized): + - version of 'finishCreation' that tries to eagerly allocate storage; may fail & return 0 + (JSC::JSArray::~JSArray): + - check for null m_storage, in case array construction failed. + (JSC::JSArray::increaseVectorPrefixLength): + * runtime/JSArray.h: + (JSC::JSArray::create): + - merge versions of this method, takes an initialLength parameter defaulting to zero + (JSC::JSArray::tryCreateUninitialized): + - version of 'create' that tries to eagerly allocate storage; may fail & return 0 + (JSC::JSArray::initializeIndex): + (JSC::JSArray::completeInitialization): + - used in conjunction with 'tryCreateUninitialized' to initialize the array + * runtime/JSGlobalObject.h: + (JSC::constructEmptyArray): + - removed 'CreateInitialized' argument + * runtime/RegExpConstructor.cpp: + (JSC::RegExpMatchesArray::finishCreation): + - removed 'CreateInitialized' argument + +2011-12-29 Anders Carlsson <andersca@apple.com> + + Add a retainPtr function template + https://bugs.webkit.org/show_bug.cgi?id=75365 + + Reviewed by Dan Bernstein. + + This makes it easier to make a RetainPtr using template argument deduction, which + is useful when passing RetainPtr objects as function arguments. + + * wtf/RetainPtr.h: + (WTF::retainPtr): + +2011-12-28 Yuqiang Xian <yuqiang.xian@intel.com> + + spill unboxed values in DFG 32_64 + https://bugs.webkit.org/show_bug.cgi?id=75291 + + Reviewed by Filip Pizlo. + + Currently all the values are spilled as boxed in DFG 32_64, which is + not necessary and introduces additional stores/loads. Instead we + can spill them as unboxed if feasible. It can be applied to the + Integers, Cells and Booleans in DFG 32_64. Doubles are left as is + because they don't need to be boxed at all. The modifications to the + spill/fill and the OSR exit are required, as well as a bug fix to the + "isUnknownJS" logic. + + * bytecode/ValueRecovery.h: + (JSC::ValueRecovery::displacedInRegisterFile): + (JSC::ValueRecovery::virtualRegister): + (JSC::ValueRecovery::dump): + * dfg/DFGGenerationInfo.h: + (JSC::DFG::GenerationInfo::isUnknownJS): + (JSC::DFG::GenerationInfo::spill): + * dfg/DFGOSRExitCompiler32_64.cpp: + (JSC::DFG::OSRExitCompiler::compileExit): + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::isKnownNotBoolean): + * dfg/DFGSpeculativeJIT.h: + (JSC::DFG::SpeculativeJIT::silentFillGPR): + (JSC::DFG::SpeculativeJIT::spill): + * dfg/DFGSpeculativeJIT32_64.cpp: + (JSC::DFG::SpeculativeJIT::fillInteger): + (JSC::DFG::SpeculativeJIT::fillDouble): + (JSC::DFG::SpeculativeJIT::fillJSValue): + (JSC::DFG::SpeculativeJIT::fillSpeculateIntInternal): + (JSC::DFG::SpeculativeJIT::fillSpeculateDouble): + (JSC::DFG::SpeculativeJIT::fillSpeculateCell): + (JSC::DFG::SpeculativeJIT::fillSpeculateBoolean): + (JSC::DFG::SpeculativeJIT::compileObjectEquality): + (JSC::DFG::SpeculativeJIT::compile): + +2011-12-28 Anders Carlsson <andersca@apple.com> + + Add an implicit block conversion operator to WTF::Function + https://bugs.webkit.org/show_bug.cgi?id=75325 + + Reviewed by Dan Bernstein. + + * wtf/Compiler.h: + Add a define for COMPILER_SUPPORTS(BLOCKS). It's only defined for clang, since the gcc blocks implementation + is buggy, especially when it comes to C++. + + * wtf/Functional.h: + Add a block conversion operator that creates and returns an autoreleased block that will call the function when executed. + +2011-12-27 Anders Carlsson <andersca@apple.com> + + Add a new WTF::bind overload that takes 6 parameters + https://bugs.webkit.org/show_bug.cgi?id=75287 + + Reviewed by Sam Weinig. + + * wtf/Functional.h: + +2011-12-27 Sam Weinig <sam@webkit.org> + + Continue moving compiler feature checks to use the COMPILER_SUPPORTS() macro + https://bugs.webkit.org/show_bug.cgi?id=75268 + + Reviewed by Anders Carlsson. + + * wtf/Compiler.h: + Add support for COMPILER_SUPPORTS(CXX_NULLPTR) and COMPILER_SUPPORTS(CXX_DELETED_FUNCTIONS). + + * wtf/Noncopyable.h: + Use COMPILER_SUPPORTS(CXX_DELETED_FUNCTIONS). + + * wtf/NullPtr.cpp: + * wtf/NullPtr.h: + Use COMPILER_SUPPORTS(CXX_NULLPTR). Remove support for HAVE(NULLPTR). + + * wtf/RefPtr.h: + * wtf/RetainPtr.h: + Switch from HAVE(NULLPTR) to COMPILER_SUPPORTS(CXX_NULLPTR). + +2011-12-27 Anders Carlsson <andersca@apple.com> + + Misc fixes and cleanups in Functional.h + https://bugs.webkit.org/show_bug.cgi?id=75281 + + Reviewed by Andreas Kling. + + - Reformat template declarations so that the class begins on a new line. + - Change the parameter template parameters to start at P1 instead of P0. + - Add function wrappers and bind overloads for 4 and 5 parameter functions. + - Change the Function call operator to be const so const functions can be called. + + * wtf/Functional.h: + +2011-12-27 Tony Chang <tony@chromium.org> + + [chromium] Minor cleanup of gyp files. + https://bugs.webkit.org/show_bug.cgi?id=75269 + + Reviewed by Adam Barth. + + * JavaScriptCore.gyp/JavaScriptCore.gyp: msvs_guid is no longer needed + and vim/emacs specific hooks should be added by the user. + +2011-12-27 Gavin Barraclough <barraclough@apple.com> + + https://bugs.webkit.org/show_bug.cgi?id=75260 + Null name for host function can result in dereference of uninitialize memory + + Reviewed by Filip Pizlo. + + This is a recent regression in ToT, if the name passed to finishCreation of a host function is null, + we are currently skipping the putDirect, which leaves memory uninitialized. This patch reverts the + aspect of the change that introduced the issue. It might be better if functions that don't have a + name don't have this property at all, but that's change should be separate from fixing the bug. + + * runtime/JSFunction.cpp: + (JSC::JSFunction::finishCreation): + - Always initialize the name property. + +2011-12-27 Anders Carlsson <andersca@apple.com> + + Function should handle wrapping/unwrapping RefPtr and PassRefPtr + https://bugs.webkit.org/show_bug.cgi?id=75266 + + Reviewed by Sam Weinig. + + Add ParamStorageTraits that can be used for deciding how bound parameters should be stored + and peeked at. For RefPtr we want to use the raw pointer when "peeking" to avoid ref-churn. + For PassRefPtr, we want to use RefPtr for storage but still use the raw pointer when peeking. + + * wtf/Functional.h: + (WTF::ParamStorageTraits::wrap): + (WTF::ParamStorageTraits::unwrap): + +2011-12-27 Tony Chang <tony@chromium.org> + + [chromium] really enable wpo for WebCore libs and for WTF + https://bugs.webkit.org/show_bug.cgi?id=75264 + + Reviewed by Adam Barth. + + * JavaScriptCore.gyp/JavaScriptCore.gyp: Enable WPO for wtf and yarr. + +2011-12-26 Gavin Barraclough <barraclough@apple.com> + + Errk! OS X build fix. + + * JavaScriptCore.exp: + +2011-12-26 Gavin Barraclough <barraclough@apple.com> + + Windows build fix. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * runtime/JSObject.h: + +2011-12-26 Gavin Barraclough <barraclough@apple.com> + + https://bugs.webkit.org/show_bug.cgi?id=75231 + Fail to throw in strict mode on assign to read only static properties + + Reviewed by Filip Pizlo. + + There are three bugs here: + * symbolTablePut should throw for strict mode accesses. + * lookupPut should throw for strict mode accesses. + * NumberConstructor should override put to call lookupPut, to trap assignment to readonly properties. + + * runtime/JSActivation.cpp: + (JSC::JSActivation::symbolTablePut): + (JSC::JSActivation::put): + * runtime/JSActivation.h: + * runtime/JSGlobalObject.cpp: + (JSC::JSGlobalObject::put): + * runtime/JSStaticScopeObject.cpp: + (JSC::JSStaticScopeObject::put): + * runtime/JSVariableObject.h: + (JSC::JSVariableObject::symbolTablePut): + * runtime/Lookup.h: + (JSC::lookupPut): + * runtime/NumberConstructor.cpp: + (JSC::NumberConstructor::put): + * runtime/NumberConstructor.h: + +2011-12-26 Gavin Barraclough <barraclough@apple.com> + + Fix miss-commit of utf8 change. + + Reviewed by Filip Pizlo + + Eeep, patch as landed a while ago had no effect! - acidentally landed + modified version of patch used for performance testing. + + (This isn't covered by layout tests because layour tests don't use jsc, + and the tests/mozilla tests use latin1, which was already supported!) + + Landing changes as intended (and as originally reviewed). + + * jsc.cpp: + (jscSource): + +2011-12-26 Filip Pizlo <fpizlo@apple.com> + + Unreviewed build fix for ARMv7. + + * assembler/MacroAssemblerARMv7.h: + (JSC::MacroAssemblerARMv7::load16Signed): + (JSC::MacroAssemblerARMv7::load8Signed): + +2011-12-26 Hajime Morrita <morrita@google.com> + + Rename WTF_INLINE, JS_INLINE to HIDDEN_INLINE + https://bugs.webkit.org/show_bug.cgi?id=74990 + + Reviewed by Kevin Ollivier. + + * runtime/JSExportMacros.h: Removed JS_INLINE + * wtf/ExportMacros.h: Renamed WTF_INLINE to HIDDEN_INLINE + +2011-12-24 Filip Pizlo <fpizlo@apple.com> + + The ArgumentCount field in the CallFrame should have its tag left blank for other uses + https://bugs.webkit.org/show_bug.cgi?id=75199 + <rdar://problem/10625105> + <rdar://problem/10625106> + + Reviewed by Oliver Hunt. + + * dfg/DFGOSRExitCompiler32_64.cpp: + (JSC::DFG::OSRExitCompiler::compileExit): + * dfg/DFGOSRExitCompiler64.cpp: + (JSC::DFG::OSRExitCompiler::compileExit): + * dfg/DFGSpeculativeJIT.h: + (JSC::DFG::SpeculativeJIT::argumentPayloadSlot): + * dfg/DFGSpeculativeJIT32_64.cpp: + (JSC::DFG::SpeculativeJIT::emitCall): + * dfg/DFGSpeculativeJIT64.cpp: + (JSC::DFG::SpeculativeJIT::emitCall): + * interpreter/CallFrame.h: + (JSC::ExecState::argumentCountIncludingThis): + (JSC::ExecState::setArgumentCountIncludingThis): + * interpreter/Register.h: + (JSC::Register::unboxedInt32): + (JSC::Register::unboxedBoolean): + (JSC::Register::unboxedCell): + (JSC::Register::payload): + (JSC::Register::tag): + * jit/JITCall.cpp: + (JSC::JIT::compileOpCall): + * jit/JITCall32_64.cpp: + (JSC::JIT::compileLoadVarargs): + (JSC::JIT::compileOpCall): + +2011-12-25 Andreas Kling <awesomekling@apple.com> + + Yarr: Avoid copying vectors in CharacterClassConstructor. + <http://webkit.org/b/75206> + + Reviewed by Darin Adler. + + Yarr::CharacterClassConstructor::charClass() was hot when loading twitter + feeds (1.2%), replace the usage of Vector::append() by swap() since we're + always clearing the source vector afterwards anyway. + + * yarr/YarrPattern.cpp: + (JSC::Yarr::CharacterClassConstructor::charClass): + +2011-12-24 Darin Adler <darin@apple.com> + + Specialize HashTraits for RefPtr to use PassRefPtr as "pass type" to reduce reference count churn + https://bugs.webkit.org/show_bug.cgi?id=72476 + + Reviewed by Sam Weinig. + + * wtf/HashTraits.h: Defined PassInType and store function in HashTraits<RefPtr>. + +2011-12-23 Geoffrey Garen <ggaren@apple.com> + + Inlined Yarr::execute + https://bugs.webkit.org/show_bug.cgi?id=75180 + + Reviewed reluctantly by Beth Dakin. + + Tiny speedup on SunSpider string tests. Removes some samples from + Instruments. A step toward removing -fomit-frame-pointer. + + * yarr/YarrJIT.cpp: + * yarr/YarrJIT.h: + (JSC::Yarr::execute): ONE LINE FUNCTION, Y U NOT INLINED?! + +2011-12-23 Filip Pizlo <fpizlo@apple.com> + + DFG loads from signed 8-bit and 16-bit typed arrays are broken + https://bugs.webkit.org/show_bug.cgi?id=75163 + + Reviewed by Geoffrey Garen. + + Added 8-bit and 16-bit signed loads. Because doing so on ARM is less trivial, I'm + currently disabling Int8Array and Int16Array optimizations on ARM. + + * assembler/MacroAssemblerX86Common.h: + (JSC::MacroAssemblerX86Common::load8Signed): + (JSC::MacroAssemblerX86Common::load16Signed): + * assembler/X86Assembler.h: + (JSC::X86Assembler::movswl_mr): + (JSC::X86Assembler::movsbl_mr): + * bytecode/PredictedType.h: + (JSC::isActionableMutableArrayPrediction): + * dfg/DFGNode.h: + (JSC::DFG::Node::shouldSpeculateInt8Array): + (JSC::DFG::Node::shouldSpeculateInt16Array): + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::compileGetByValOnIntTypedArray): + +2011-12-23 Filip Pizlo <fpizlo@apple.com> + + DFG does double-to-int conversion incorrectly when storing into int typed arrays + https://bugs.webkit.org/show_bug.cgi?id=75164 + <rdar://problem/10557547> + + Reviewed by Geoffrey Garen. + + * assembler/MacroAssemblerARMv7.h: + (JSC::MacroAssemblerARMv7::branchTruncateDoubleToUint32): + * assembler/MacroAssemblerX86Common.h: + (JSC::MacroAssemblerX86Common::branchTruncateDoubleToUint32): + (JSC::MacroAssemblerX86Common::truncateDoubleToUint32): + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::compilePutByValForIntTypedArray): + +2011-12-23 Geoffrey Garen <ggaren@apple.com> + + Refactored String.prototype.replace + https://bugs.webkit.org/show_bug.cgi?id=75114 + + Reviewed by Darin Adler. + + No performance difference. + + I think this is a step toward removing -fomit-frame-pointer. + + * runtime/JSString.cpp: + * runtime/JSString.h: Removed the test and special case for a single-character + search string because the standard path does this test and special case + for us. (As an aside, if we do come up with a unique single-character + replace optimization in future, it probably belongs in the replace function, + and not in JSString.) + + * runtime/StringPrototype.cpp: + (JSC::stringProtoFuncReplace): Split this mega-sized function into: + (JSC::replaceUsingStringSearch): - This reasonably sized function, and + (JSC::replaceUsingRegExpSearch): - This still mega-sized function. + +2011-12-23 Pierre Rossi <pierre.rossi@gmail.com> + + [Qt] REGRESSION(r103467): It broke fast/images/animated-gif-restored-from-bfcache.html + https://bugs.webkit.org/show_bug.cgi?id=75087 + + monotonicallyIncreasingTime needs to hava a higher resolution than milliseconds. + + Reviewed by Darin Adler. + + * wtf/CurrentTime.cpp: + (WTF::monotonicallyIncreasingTime): + +2011-12-22 Filip Pizlo <fpizlo@apple.com> + + DFG should not speculate array even when predictions say that the base is not an array + https://bugs.webkit.org/show_bug.cgi?id=75160 + <rdar://problem/10622646> + <rdar://problem/10622649> + + Reviewed by Oliver Hunt. + + Added the ability to call slow path when the base is known to not be an array. + Also rationalized the logic for deciding when the index is not an int, and + cleaned up the logic for deciding when to speculate typed array. + + Neutral for the most part, with odd speed-ups and slow-downs. The slow-downs can + likely be mitigated by having the notion of a polymorphic array access, where we + try, but don't speculate, to access the array one way before either trying some + other ways or calling slow path. + + * bytecode/PredictedType.h: + (JSC::isActionableMutableArrayPrediction): + (JSC::isActionableArrayPrediction): + * dfg/DFGAbstractState.cpp: + (JSC::DFG::AbstractState::execute): + * dfg/DFGNode.h: + (JSC::DFG::Node::shouldSpeculateInt8Array): + (JSC::DFG::Node::shouldSpeculateInt16Array): + (JSC::DFG::Node::shouldSpeculateInt32Array): + (JSC::DFG::Node::shouldSpeculateUint8Array): + (JSC::DFG::Node::shouldSpeculateUint16Array): + (JSC::DFG::Node::shouldSpeculateUint32Array): + (JSC::DFG::Node::shouldSpeculateFloat32Array): + (JSC::DFG::Node::shouldSpeculateFloat64Array): + * dfg/DFGPropagator.cpp: + (JSC::DFG::Propagator::byValIsPure): + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::compileGetIndexedPropertyStorage): + * dfg/DFGSpeculativeJIT32_64.cpp: + (JSC::DFG::SpeculativeJIT::compile): + * dfg/DFGSpeculativeJIT64.cpp: + (JSC::DFG::SpeculativeJIT::compile): + +2011-12-22 Gavin Barraclough <barraclough@apple.com> + + Unreviewed - fix stylebot issues from last patch. + + * runtime/JSArray.cpp: + (JSC::JSArray::putSlowCase): + +2011-12-22 Gavin Barraclough <barraclough@apple.com> + + https://bugs.webkit.org/show_bug.cgi?id=75151 + Add attributes field to JSArray's SparseMap + + Reviewed by Sam Weinig. + + This will be necessary to be able to support non- writable/configurable/enumerable + properties, and helpful for getters/setters. + + Added a concept of being 'inSparseMode' - this indicates the array has a non-standard + + * runtime/ArrayPrototype.cpp: + (JSC::arrayProtoFuncSort): + - JSArray::sort methods not allowed on arrays that are 'inSparseMode'. + (must fall back to generic sort alogrithm). + * runtime/JSArray.cpp: + (JSC::JSArray::finishCreation): + - moved reportedMapCapacity into the SparseArrayValueMap object. + (JSC::SparseArrayValueMap::find): + (JSC::SparseArrayValueMap::put): + (JSC::SparseArrayValueMap::visitChildren): + - Added. + (JSC::JSArray::getOwnPropertySlotByIndex): + (JSC::JSArray::getOwnPropertyDescriptor): + (JSC::JSArray::putSlowCase): + (JSC::JSArray::deletePropertyByIndex): + (JSC::JSArray::getOwnPropertyNames): + (JSC::JSArray::setLength): + (JSC::JSArray::pop): + (JSC::JSArray::visitChildren): + - Updated for changes in SparseArrayValueMap. + (JSC::JSArray::sortNumeric): + (JSC::JSArray::sort): + (JSC::JSArray::compactForSorting): + - Disallow on 'SparseMode' arrays. + * runtime/JSArray.h: + (JSC::SparseArrayEntry::SparseArrayEntry): + - An entry in the sparse array - value (WriteBarrier) + attributes. + (JSC::SparseArrayValueMap::SparseArrayValueMap): + (JSC::SparseArrayValueMap::sparseMode): + (JSC::SparseArrayValueMap::setSparseMode): + - Flags to track whether an Array is forced into SparseMode. + (JSC::SparseArrayValueMap::remove): + (JSC::SparseArrayValueMap::notFound): + (JSC::SparseArrayValueMap::isEmpty): + (JSC::SparseArrayValueMap::contains): + (JSC::SparseArrayValueMap::size): + (JSC::SparseArrayValueMap::begin): + (JSC::SparseArrayValueMap::end): + - accessors to the map + (JSC::SparseArrayValueMap::take): + - only for use on non-SpareMode arrays. + (JSC::JSArray::inSparseMode): + - Added. + +2011-12-22 Filip Pizlo <fpizlo@apple.com> + + DFG CFA sometimes generates an incorrect proof that a node is known to be a typed array + https://bugs.webkit.org/show_bug.cgi?id=75150 + <rdar://problem/10621900> + + Reviewed by Gavin Barraclough. + + * dfg/DFGAbstractState.cpp: + (JSC::DFG::AbstractState::execute): + +2011-12-22 Filip Pizlo <fpizlo@apple.com> + + DFG JIT does exactly the wrong thing when doing strict equality on two known cells + https://bugs.webkit.org/show_bug.cgi?id=75138 + <rdar://problem/10621526> + + Reviewed by Oliver Hunt. + + * dfg/DFGSpeculativeJIT32_64.cpp: + (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeStrictEq): + * dfg/DFGSpeculativeJIT64.cpp: + (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeStrictEq): + +2011-12-22 Balazs Kelemen <kbalazs@webkit.org> + + Fix debug build with assertions disabled + https://bugs.webkit.org/show_bug.cgi?id=75075 + + Reviewed by Darin Adler. + + Check whether assertions are disabled instead of NDEBUG + where appropriate to avoid "defined but not used" warnings. + + * wtf/DateMath.cpp: + (WTF::initializeDates): + +2011-12-22 Mariusz Grzegorczyk <mariusz.g@samsung.com> + + [EFL] Missing plugins support for efl port + https://bugs.webkit.org/show_bug.cgi?id=44505 + + Reviewed by Anders Carlsson. + + Add define of ENABLE_PLUGIN_PACKAGE_SIMPLE_HASH for efl port. + + * wtf/Platform.h: + +2011-12-22 Wei Charles <charles.wei@torchmobile.com.cn> + + Remove un-used data member of LiteralParser::Lex::m_string + https://bugs.webkit.org/show_bug.cgi?id=68216 + + Reviewed by George Staikos. + + * runtime/LiteralParser.h: + +2011-12-21 Dan Bernstein <mitz@apple.com> + + OS X build fix after r103488. + + * JavaScriptCore.exp: + +2011-12-21 Konrad Piascik <kpiascik@rim.com> + + Implement the JavaScriptCore bindings for eventListenerHandlerLocation + https://bugs.webkit.org/show_bug.cgi?id=74313 + + Reviewed by Eric Seidel. + + Updated project files to get Windows and Mac builds working. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * JavaScriptCore.xcodeproj/project.pbxproj: + +2011-12-21 Filip Pizlo <fpizlo@apple.com> + + DFG ConvertThis optimizations do not honor the distinction between the global object and the global this object + https://bugs.webkit.org/show_bug.cgi?id=75058 + <rdar://problem/10616612> + <rdar://problem/10617500> + + Reviewed by Oliver Hunt. + + Added a call to toThisObject() in the DFG when planting a direct reference to the global this object. + Instead of adding a separate toThisObject() method on JSCell which does not take ExecState*, I reascribed + a new contract: if you're calling toThisObject() on JSObject or one of its subtypes, then the ExecState* + is optional. + + * dfg/DFGAssemblyHelpers.h: + (JSC::DFG::AssemblyHelpers::globalThisObjectFor): + * dfg/DFGSpeculativeJIT32_64.cpp: + (JSC::DFG::SpeculativeJIT::compile): + * dfg/DFGSpeculativeJIT64.cpp: + (JSC::DFG::SpeculativeJIT::compile): + * runtime/JSObject.h: + +2011-12-21 Pierre Rossi <pierre.rossi@gmail.com> + + Implement montonicallyIncreasingClock() on Qt + https://bugs.webkit.org/show_bug.cgi?id=62159 + + Reviewed by Darin Adler. + + * wtf/CurrentTime.cpp: + (WTF::monotonicallyIncreasingTime): + +2011-12-20 Filip Pizlo <fpizlo@apple.com> + + 32_64 baseline JIT should attempt to convert division results to integers, and record when that fails + https://bugs.webkit.org/show_bug.cgi?id=74997 + <rdar://problem/10612389> + + Reviewed by Gavin Barraclough. + + * jit/JITArithmetic32_64.cpp: + (JSC::JIT::emit_op_div): + +2011-12-20 Filip Pizlo <fpizlo@apple.com> + + JavaScriptCore should be consistent about how it reads and writes ArgumentCount + https://bugs.webkit.org/show_bug.cgi?id=74989 + <rdar://problem/10612006> + + Reviewed by Gavin Barraclough. + + * dfg/DFGJITCompiler.cpp: + (JSC::DFG::JITCompiler::compileFunction): + * jit/JIT.cpp: + (JSC::JIT::privateCompile): + * jit/JITCall32_64.cpp: + (JSC::JIT::compileLoadVarargs): + * jit/JITOpcodes32_64.cpp: + (JSC::JIT::emit_op_get_arguments_length): + (JSC::JIT::emit_op_get_argument_by_val): + * jit/SpecializedThunkJIT.h: + (JSC::SpecializedThunkJIT::SpecializedThunkJIT): + +2011-12-20 Filip Pizlo <fpizlo@apple.com> + + Value Profiles for arguments should be more easily accessible to the interpreter + https://bugs.webkit.org/show_bug.cgi?id=74984 + <rdar://problem/10611364> + + Reviewed by Gavin Barraclough. + + * bytecode/CodeBlock.cpp: + (JSC::CodeBlock::stronglyVisitStrongReferences): + (JSC::CodeBlock::shouldOptimizeNow): + (JSC::CodeBlock::dumpValueProfiles): + * bytecode/CodeBlock.h: + (JSC::CodeBlock::setArgumentValueProfileSize): + (JSC::CodeBlock::numberOfArgumentValueProfiles): + (JSC::CodeBlock::valueProfileForArgument): + (JSC::CodeBlock::addValueProfile): + (JSC::CodeBlock::valueProfile): + (JSC::CodeBlock::valueProfileForBytecodeOffset): + (JSC::CodeBlock::totalNumberOfValueProfiles): + (JSC::CodeBlock::getFromAllValueProfiles): + * bytecode/ValueProfile.h: + (JSC::ValueProfile::ValueProfile): + * jit/JIT.cpp: + (JSC::JIT::privateCompile): + * jit/JIT.h: + * jit/JITInlineMethods.h: + (JSC::JIT::emitValueProfilingSite): + +2011-12-20 Gavin Barraclough <barraclough@apple.com> + + JSC shell should accept utf8 input. + + Reviewed by Filip Pizlo. + + * jsc.cpp: + (jscSource): + (functionRun): + (functionLoad): + (functionCheckSyntax): + (runWithScripts): + (runInteractive): + +2011-12-20 Gavin Barraclough <barraclough@apple.com> + + Rubber Stamped by Sam Weinig + + * runtime/JSGlobalData.cpp: + - removed some dead code. + +2011-12-19 Geoffrey Garen <ggaren@apple.com> + + Tightened up Vector<T>::append + https://bugs.webkit.org/show_bug.cgi?id=74906 + + Reviewed by Sam Weinig. + + Not a measurable speedup, but code inspection shows better code generated, + and I believe this is a step toward turning off -fomit-frame-pointer. + + * wtf/Vector.h: + (WTF::::append): + (WTF::::appendSlowCase): Split out the slow case into a separate function + to keep unnecessary instructions off the hot path. This means the hot + path can now be inlined more often. + + Removed some old MSVC7 cruft. Hopefully, we don't need to hang on to a + compiler work-around from 2007. + +2011-12-19 Yuqiang Xian <yuqiang.xian@intel.com> + + Temporary GPR should not be lazily allocated in DFG JIT on X86 + https://bugs.webkit.org/show_bug.cgi?id=74908 + + Reviewed by Filip Pizlo. + + On X86, we used to allocate a temporary GPR lazily when it's really + used rather than defined. This may cause potential issues of + allocating registers inside control flow and result in problems in + subsequent code generation, for example the DFG JIT may think an + operand already being spilled (to satisfy the allocation request) and + generate code to read the data from memory, but the allocation and + spilling are in a branch which is not taken at runtime, so the + generated code is incorrect. + + Although current DFG JIT code doesn't have this problematic pattern, + it's better to cut-off the root to avoid any potential issues in the + future. + + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::GPRTemporary::GPRTemporary): + * dfg/DFGSpeculativeJIT.h: + (JSC::DFG::GPRTemporary::gpr): + * dfg/DFGSpeculativeJIT32_64.cpp: + (JSC::DFG::SpeculativeJIT::compile): + +2011-12-19 Yuqiang Xian <yuqiang.xian@intel.com> + + Remove unused code for non-speculative Arith operations from DFG JIT + https://bugs.webkit.org/show_bug.cgi?id=74905 + + Reviewed by Filip Pizlo. + + * dfg/DFGSpeculativeJIT.h: + * dfg/DFGSpeculativeJIT32_64.cpp: + * dfg/DFGSpeculativeJIT64.cpp: + +2011-12-19 Gavin Barraclough <barraclough@apple.com> + + https://bugs.webkit.org/show_bug.cgi?id=74903 + Exceptions not thrown correctly from DFG JIT on 32bit + + Reviewed by Oliver Hunt. + + Arguments for lookupExceptionHandler are not setup correctly. + In the case of ARMv7 we rely on lr being preserved over a call, + this in invalid. On x86 we don't should be poking the arguments onto the stack! + + * bytecode/CodeBlock.h: + (JSC::CodeBlock::bytecodeOffsetForCallAtIndex): + * dfg/DFGAssemblyHelpers.h: + (JSC::DFG::AssemblyHelpers::restoreReturnAddressBeforeReturn): + * dfg/DFGGPRInfo.h: + * dfg/DFGJITCompiler.cpp: + (JSC::DFG::JITCompiler::compileBody): + * dfg/DFGJITCompiler.h: + (JSC::DFG::JITCompiler::addExceptionCheck): + (JSC::DFG::JITCompiler::addFastExceptionCheck): + * dfg/DFGOperations.cpp: + * dfg/DFGOperations.h: + +2011-12-19 Filip Pizlo <fpizlo@apple.com> + + If we detect that we can use the JIT, don't use computed opcode lookups + https://bugs.webkit.org/show_bug.cgi?id=74899 + <rdar://problem/10604551> + + Reviewed by Gavin Barraclough. + + * interpreter/Interpreter.cpp: + (JSC::Interpreter::Interpreter): + (JSC::Interpreter::initialize): + (JSC::Interpreter::privateExecute): + * interpreter/Interpreter.h: + (JSC::Interpreter::getOpcode): + (JSC::Interpreter::getOpcodeID): + * runtime/JSGlobalData.cpp: + (JSC::JSGlobalData::JSGlobalData): + +2011-12-19 Geoffrey Garen <ggaren@apple.com> + + Try to fix the Qt build. + + Unreviewed. + + * wtf/ThreadSpecific.h: #include! + +2011-12-18 Filip Pizlo <fpizlo@apple.com> + + It should be possible to change the value of an Options variable without recompiling the world + https://bugs.webkit.org/show_bug.cgi?id=74807 + + Reviewed by Gavin Barraclough. + + * runtime/Options.cpp: + (JSC::Options::initializeOptions): + * runtime/Options.h: + +2011-12-19 Sheriff Bot <webkit.review.bot@gmail.com> + + Unreviewed, rolling out r103250. + http://trac.webkit.org/changeset/103250 + https://bugs.webkit.org/show_bug.cgi?id=74877 + + it still breaks codegen (Requested by olliej on #webkit). + + * dfg/DFGAbstractState.cpp: + (JSC::DFG::AbstractState::execute): + * dfg/DFGByteCodeParser.cpp: + (JSC::DFG::ByteCodeParser::parseBlock): + * dfg/DFGNode.h: + * dfg/DFGPropagator.cpp: + (JSC::DFG::Propagator::propagateArithNodeFlags): + (JSC::DFG::Propagator::fixupNode): + (JSC::DFG::Propagator::byValIsPure): + (JSC::DFG::Propagator::clobbersWorld): + (JSC::DFG::Propagator::getByValLoadElimination): + (JSC::DFG::Propagator::checkStructureLoadElimination): + (JSC::DFG::Propagator::getByOffsetLoadElimination): + (JSC::DFG::Propagator::getPropertyStorageLoadElimination): + (JSC::DFG::Propagator::getIndexedPropertyStorageLoadElimination): + (JSC::DFG::Propagator::performNodeCSE): + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::compilePutByValForByteArray): + (JSC::DFG::SpeculativeJIT::compilePutByValForIntTypedArray): + (JSC::DFG::SpeculativeJIT::compilePutByValForFloatTypedArray): + * dfg/DFGSpeculativeJIT.h: + * dfg/DFGSpeculativeJIT32_64.cpp: + (JSC::DFG::SpeculativeJIT::compile): + * dfg/DFGSpeculativeJIT64.cpp: + (JSC::DFG::SpeculativeJIT::compile): + +2011-12-16 Oliver Hunt <oliver@apple.com> + + Rolling r103120 back in with merge errors corrected. + + PutByVal[Alias] unnecessarily reloads the storage buffer + https://bugs.webkit.org/show_bug.cgi?id=74747 + + Reviewed by Gavin Barraclough. + + Make PutByVal use GetIndexedStorage to load the storage buffer. + This required switching PutByVal to a vararg node (which is + responsible for most of the noise in this patch). This fixes the + remaining portion of the kraken regression caused by the GetByVal + storage load elimination, and a 1-5% win on some of the sub tests of + the typed array benchmark at: + http://stepheneb.github.com/webgl-matrix-benchmarks/matrix_benchmark.html + + * dfg/DFGAbstractState.cpp: + (JSC::DFG::AbstractState::execute): + * dfg/DFGByteCodeParser.cpp: + (JSC::DFG::ByteCodeParser::parseBlock): + * dfg/DFGNode.h: + * dfg/DFGPropagator.cpp: + (JSC::DFG::Propagator::propagateArithNodeFlags): + (JSC::DFG::Propagator::fixupNode): + (JSC::DFG::Propagator::byValIndexIsPure): + (JSC::DFG::Propagator::clobbersWorld): + (JSC::DFG::Propagator::getByValLoadElimination): + (JSC::DFG::Propagator::checkStructureLoadElimination): + (JSC::DFG::Propagator::getByOffsetLoadElimination): + (JSC::DFG::Propagator::getPropertyStorageLoadElimination): + (JSC::DFG::Propagator::getIndexedPropertyStorageLoadElimination): + (JSC::DFG::Propagator::performNodeCSE): + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::compilePutByValForByteArray): + (JSC::DFG::SpeculativeJIT::compilePutByValForIntTypedArray): + (JSC::DFG::SpeculativeJIT::compilePutByValForFloatTypedArray): + * dfg/DFGSpeculativeJIT.h: + * dfg/DFGSpeculativeJIT32_64.cpp: + (JSC::DFG::SpeculativeJIT::compile): + * dfg/DFGSpeculativeJIT64.cpp: + (JSC::DFG::SpeculativeJIT::compile): + +2011-12-15 Geoffrey Garen <ggaren@apple.com> + + Placement new does an unnecessary NULL check + https://bugs.webkit.org/show_bug.cgi?id=74676 + + Reviewed by Sam Weinig. + + We can define our own version, which skips the NULL check. + + Not a measurable speedup, but code inspection shows better code generated, + and I believe this is a step toward turning off -fomit-frame-pointer. + + * API/JSCallbackConstructor.h: + (JSC::JSCallbackConstructor::create): + * API/JSCallbackFunction.h: + (JSC::JSCallbackFunction::create): Use the NotNull version of placement + new to skip the NULL check. + + * API/JSCallbackObject.h: Removed a conflicting, unnecessaray placement new. + + (JSC::JSCallbackObject::create): + * debugger/DebuggerActivation.h: + (JSC::DebuggerActivation::create): + * heap/HandleHeap.cpp: + (JSC::HandleHeap::grow): + * heap/HandleHeap.h: + (JSC::HandleHeap::allocate): + * heap/MarkedBlock.cpp: + (JSC::MarkedBlock::create): + (JSC::MarkedBlock::recycle): + * jit/JITCode.h: + (JSC::JITCode::clear): + * jsc.cpp: + (GlobalObject::create): + * profiler/CallIdentifier.h: + * runtime/Arguments.h: + (JSC::Arguments::create): + * runtime/ArrayConstructor.h: + (JSC::ArrayConstructor::create): + * runtime/ArrayPrototype.h: + (JSC::ArrayPrototype::create): + * runtime/BooleanConstructor.h: + (JSC::BooleanConstructor::create): + * runtime/BooleanObject.h: + (JSC::BooleanObject::create): + * runtime/BooleanPrototype.h: + (JSC::BooleanPrototype::create): + * runtime/DateConstructor.h: + (JSC::DateConstructor::create): + * runtime/DateInstance.h: + (JSC::DateInstance::create): + * runtime/DatePrototype.h: + (JSC::DatePrototype::create): + * runtime/Error.h: + (JSC::StrictModeTypeErrorFunction::create): + * runtime/ErrorConstructor.h: + (JSC::ErrorConstructor::create): + * runtime/ErrorInstance.h: + (JSC::ErrorInstance::create): + * runtime/ErrorPrototype.h: + (JSC::ErrorPrototype::create): + * runtime/ExceptionHelpers.h: + (JSC::InterruptedExecutionError::create): + (JSC::TerminatedExecutionError::create): + * runtime/Executable.h: + (JSC::NativeExecutable::create): + (JSC::EvalExecutable::create): + (JSC::ProgramExecutable::create): + (JSC::FunctionExecutable::create): + * runtime/FunctionConstructor.h: + (JSC::FunctionConstructor::create): + * runtime/FunctionPrototype.h: + (JSC::FunctionPrototype::create): + * runtime/GetterSetter.h: + (JSC::GetterSetter::create): + * runtime/JSAPIValueWrapper.h: + (JSC::JSAPIValueWrapper::create): + * runtime/JSActivation.h: + (JSC::JSActivation::create): + * runtime/JSArray.h: + (JSC::JSArray::create): + * runtime/JSBoundFunction.cpp: + (JSC::JSBoundFunction::create): + * runtime/JSByteArray.h: + (JSC::JSByteArray::create): Use the NotNull version of placement + new to skip the NULL check. + + * runtime/JSCell.h: Removed a conflicting, unnecessaray placement new. + + * runtime/JSFunction.cpp: + (JSC::JSFunction::create): + * runtime/JSFunction.h: + (JSC::JSFunction::create): + * runtime/JSGlobalObject.h: + (JSC::JSGlobalObject::create): + * runtime/JSGlobalThis.h: + (JSC::JSGlobalThis::create): + * runtime/JSNotAnObject.h: + (JSC::JSNotAnObject::create): + * runtime/JSONObject.h: + (JSC::JSONObject::create): + * runtime/JSObject.h: + (JSC::JSFinalObject::create): + * runtime/JSPropertyNameIterator.cpp: + (JSC::JSPropertyNameIterator::create): + * runtime/JSPropertyNameIterator.h: + (JSC::JSPropertyNameIterator::create): + * runtime/JSStaticScopeObject.h: + (JSC::JSStaticScopeObject::create): + * runtime/JSString.cpp: + (JSC::StringObject::create): + * runtime/JSString.h: + (JSC::RopeBuilder::createNull): + (JSC::RopeBuilder::create): + (JSC::RopeBuilder::createHasOtherOwner): + * runtime/MathObject.h: + (JSC::MathObject::create): + * runtime/NativeErrorConstructor.h: + (JSC::NativeErrorConstructor::create): + * runtime/NativeErrorPrototype.h: + (JSC::NativeErrorPrototype::create): + * runtime/NumberConstructor.h: + (JSC::NumberConstructor::create): + * runtime/NumberObject.h: + (JSC::NumberObject::create): + * runtime/NumberPrototype.h: + (JSC::NumberPrototype::create): + * runtime/ObjectConstructor.h: + (JSC::ObjectConstructor::create): + * runtime/ObjectPrototype.h: + (JSC::ObjectPrototype::create): + * runtime/RegExp.cpp: + (JSC::RegExp::createWithoutCaching): + * runtime/RegExpConstructor.h: + (JSC::RegExpConstructor::create): + * runtime/RegExpMatchesArray.h: + (JSC::RegExpMatchesArray::create): + * runtime/RegExpObject.h: + (JSC::RegExpObject::create): + * runtime/RegExpPrototype.h: + (JSC::RegExpPrototype::create): + * runtime/ScopeChain.h: + (JSC::ScopeChainNode::create): + * runtime/StrictEvalActivation.h: + (JSC::StrictEvalActivation::create): + * runtime/StringConstructor.h: + (JSC::StringConstructor::create): + * runtime/StringObject.h: + (JSC::StringObject::create): + * runtime/StringPrototype.h: + (JSC::StringPrototype::create): + * runtime/Structure.h: + (JSC::Structure::create): + (JSC::Structure::createStructure): + * runtime/StructureChain.h: + (JSC::StructureChain::create): + * testRegExp.cpp: + (GlobalObject::create): + * wtf/BitVector.cpp: + (WTF::BitVector::OutOfLineBits::create): Use the NotNull version of placement + new to skip the NULL check. + + * wtf/BumpPointerAllocator.h: + (WTF::BumpPointerPool::create): Standardized spacing to make grep easier. + + * wtf/ByteArray.cpp: + (WTF::ByteArray::create): + * wtf/Deque.h: + (WTF::::append): + (WTF::::prepend): Use NotNull, as above. + + * wtf/FastAllocBase.h: Added a placement new, since this class would otherwise + hide the name of the global placement new. + + (WTF::fastNew): Standardized spacing. Most of these functions don't need + NotNull, since they check for NULL, and the optimizer can see that. + + * wtf/HashTable.h: + * wtf/HashTraits.h: + (WTF::SimpleClassHashTraits::constructDeletedValue): + * wtf/MetaAllocator.cpp: + (WTF::MetaAllocator::allocFreeSpaceNode): NotNull, as above. + + * wtf/StdLibExtras.h: + (throw): This is our NotNull placement new. Declaring that we throw is + the C++ way to say that operator new will not return NULL. + + * wtf/ThreadSpecific.h: + (WTF::T): + * wtf/Vector.h: + (WTF::::append): + (WTF::::tryAppend): + (WTF::::uncheckedAppend): + (WTF::::insert): + * wtf/text/AtomicStringHash.h: + * wtf/text/StringImpl.cpp: + (WTF::StringImpl::createUninitialized): + (WTF::StringImpl::reallocate): + * wtf/text/StringImpl.h: + (WTF::StringImpl::tryCreateUninitialized): + * wtf/text/StringStatics.cpp: + (WTF::AtomicString::init): Use NotNull, as above. + + * yarr/YarrInterpreter.cpp: + (JSC::Yarr::Interpreter::allocDisjunctionContext): + (JSC::Yarr::Interpreter::ParenthesesDisjunctionContext::ParenthesesDisjunctionContext): + (JSC::Yarr::Interpreter::allocParenthesesDisjunctionContext): Standardized + spacing for easy grep. + +2011-12-19 Eric Carlson <eric.carlson@apple.com> + + Enable <track> for Mac build + https://bugs.webkit.org/show_bug.cgi?id=74838 + + Reviewed by Darin Adler. + + * wtf/Platform.h: + +2011-12-18 Filip Pizlo <fpizlo@apple.com> + + DFG is too sloppy with register allocation + https://bugs.webkit.org/show_bug.cgi?id=74835 + + Reviewed by Gavin Barraclough. + + Added assertions that at the end of a successfully generated basic block, + all use counts should be zero. This revealed a number of bugs: + + - Array length optimizations were turning a must-generate node into one + that is not must-generate, but failing to change the ref count + accordingly. + + - Indexed property storage optimizations were failing to deref their + children, or to deref the indexed property storage node itself. Also, + they used the Phantom node as a replacement. But the Phantom node is + must-generate, which was causing bizarre issues. So this introduces a + Nop node, which should be used in cases where you want a node that is + skipped and has no children. + + This does not have any significant performance effect, but it should + relieve some register pressure. The main thing this patch adds, though, + are the assertions, which should make it easier to do register allocation + related changes in the future. + + * dfg/DFGAbstractState.cpp: + (JSC::DFG::AbstractState::execute): + * dfg/DFGGenerationInfo.h: + (JSC::DFG::GenerationInfo::initConstant): + (JSC::DFG::GenerationInfo::initInteger): + (JSC::DFG::GenerationInfo::initJSValue): + (JSC::DFG::GenerationInfo::initCell): + (JSC::DFG::GenerationInfo::initBoolean): + (JSC::DFG::GenerationInfo::initDouble): + (JSC::DFG::GenerationInfo::initStorage): + (JSC::DFG::GenerationInfo::use): + * dfg/DFGGraph.h: + (JSC::DFG::Graph::clearAndDerefChild1): + (JSC::DFG::Graph::clearAndDerefChild2): + (JSC::DFG::Graph::clearAndDerefChild3): + * dfg/DFGNode.h: + (JSC::DFG::Node::deref): + * dfg/DFGPropagator.cpp: + (JSC::DFG::Propagator::propagateNodePredictions): + (JSC::DFG::Propagator::fixupNode): + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::compile): + * dfg/DFGSpeculativeJIT32_64.cpp: + (JSC::DFG::SpeculativeJIT::compile): + * dfg/DFGSpeculativeJIT64.cpp: + (JSC::DFG::SpeculativeJIT::compile): + +2011-12-18 Benjamin Poulain <bpoulain@apple.com> + + Remove the duplicated code from ASCIICType.h + https://bugs.webkit.org/show_bug.cgi?id=74771 + + Reviewed by Andreas Kling. + + Use isASCIIDigit() and isASCIIAlpha() instead of copying the code. + + * wtf/ASCIICType.h: + (WTF::isASCIIDigit): + (WTF::isASCIIAlphanumeric): + (WTF::isASCIIHexDigit): + +2011-12-18 Anders Carlsson <andersca@apple.com> + + Set the main frame view scroll position asynchronously + https://bugs.webkit.org/show_bug.cgi?id=74823 + + Reviewed by Sam Weinig. + + * JavaScriptCore.exp: + +2011-12-10 Andreas Kling <kling@webkit.org> + + OpaqueJSClass: Remove RVCT2 workarounds. + <http://webkit.org/b/74250> + + Reviewed by Benjamin Poulain. + + We no longer need workarounds for the RVCT2 compiler since it was + only used for the Symbian port of WebKit which is now defunct. + + * API/JSClassRef.cpp: + (OpaqueJSClass::OpaqueJSClass): + (OpaqueJSClassContextData::OpaqueJSClassContextData): + +2011-12-16 Benjamin Poulain <bpoulain@apple.com> + + Remove the duplicated code from ASCIICType.h + https://bugs.webkit.org/show_bug.cgi?id=74771 + + Reviewed by Andreas Kling. + + The functions were sharing similar code and were defined for the various input types. + Use templates instead to avoid code duplication. + + * wtf/ASCIICType.h: + (WTF::isASCII): + (WTF::isASCIIAlpha): + (WTF::isASCIIAlphanumeric): + (WTF::isASCIIDigit): + (WTF::isASCIIHexDigit): + (WTF::isASCIILower): + (WTF::isASCIIOctalDigit): + (WTF::isASCIIPrintable): + (WTF::isASCIISpace): + (WTF::isASCIIUpper): + (WTF::toASCIILower): + (WTF::toASCIIUpper): + (WTF::toASCIIHexValue): + (WTF::lowerNibbleToASCIIHexDigit): + (WTF::upperNibbleToASCIIHexDigit): + +2011-12-16 Filip Pizlo <fpizlo@apple.com> + + DFG OSR exit may get confused about where in the scratch buffer it stored a value + https://bugs.webkit.org/show_bug.cgi?id=74695 + + Reviewed by Oliver Hunt. + + The code that reads from the scratch buffer now explicitly knows which locations to + read from. No new tests, since this patch covers a case so uncommon that I don't know + how to make a test for it. + + * dfg/DFGOSRExitCompiler.h: + (JSC::DFG::OSRExitCompiler::badIndex): + (JSC::DFG::OSRExitCompiler::initializePoisoned): + (JSC::DFG::OSRExitCompiler::poisonIndex): + * dfg/DFGOSRExitCompiler32_64.cpp: + (JSC::DFG::OSRExitCompiler::compileExit): + * dfg/DFGOSRExitCompiler64.cpp: + (JSC::DFG::OSRExitCompiler::compileExit): + +2011-12-16 Oliver Hunt <oliver@apple.com> + + PutByVal[Alias] unnecessarily reloads the storage buffer + https://bugs.webkit.org/show_bug.cgi?id=74747 + + Reviewed by Gavin Barraclough. + + Make PutByVal use GetIndexedStorage to load the storage buffer. + This required switching PutByVal to a vararg node (which is + responsible for most of the noise in this patch). This fixes the + remaining portion of the kraken regression caused by the GetByVal + storage load elimination, and a 1-5% win on some of the sub tests of + the typed array benchmark at: + http://stepheneb.github.com/webgl-matrix-benchmarks/matrix_benchmark.html + + * dfg/DFGAbstractState.cpp: + (JSC::DFG::AbstractState::execute): + * dfg/DFGByteCodeParser.cpp: + (JSC::DFG::ByteCodeParser::parseBlock): + * dfg/DFGNode.h: + * dfg/DFGPropagator.cpp: + (JSC::DFG::Propagator::propagateArithNodeFlags): + (JSC::DFG::Propagator::fixupNode): + (JSC::DFG::Propagator::byValIndexIsPure): + (JSC::DFG::Propagator::clobbersWorld): + (JSC::DFG::Propagator::getByValLoadElimination): + (JSC::DFG::Propagator::checkStructureLoadElimination): + (JSC::DFG::Propagator::getByOffsetLoadElimination): + (JSC::DFG::Propagator::getPropertyStorageLoadElimination): + (JSC::DFG::Propagator::getIndexedPropertyStorageLoadElimination): + (JSC::DFG::Propagator::performNodeCSE): + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::compilePutByValForByteArray): + (JSC::DFG::SpeculativeJIT::compilePutByValForIntTypedArray): + (JSC::DFG::SpeculativeJIT::compilePutByValForFloatTypedArray): + * dfg/DFGSpeculativeJIT.h: + * dfg/DFGSpeculativeJIT32_64.cpp: + (JSC::DFG::SpeculativeJIT::compile): + * dfg/DFGSpeculativeJIT64.cpp: + (JSC::DFG::SpeculativeJIT::compile): + +2011-12-16 Daniel Bates <dbates@rim.com> + + Include BlackBerryPlatformLog.h instead of BlackBerryPlatformMisc.h + + Rubber-stamped by Antonio Gomes. + + BlackBerry::Platform::logV() is declared in BlackBerryPlatformLog.h. That is, it isn't + declared in BlackBerryPlatformMisc.h. Hence, we should include BlackBerryPlatformLog.h + instead of BlackBerryPlatformMisc.h. + + * wtf/Assertions.cpp: + +2011-12-16 Mark Hahnenberg <mhahnenberg@apple.com> + + De-virtualize destructors + https://bugs.webkit.org/show_bug.cgi?id=74331 + + Reviewed by Geoffrey Garen. + + This is a megapatch which frees us from the chains of virtual destructors. + + In order to remove the virtual destructors, which are the last of the virtual + functions, from the JSCell hierarchy, we need to add the ClassInfo pointer to + the cell rather than to the structure because in order to be able to lazily call + the static destroy() functions that will replace the virtual destructors, we + need to be able to access the ClassInfo without the danger of the object's + Structure being collected before the object itself. + + After adding the ClassInfo to the cell, we can then begin to remove our use + of vptrs for optimizations within the JIT and the GC. When we have removed + all of the stored vptrs from JSGlobalData, we can then also remove all of + the related VPtrStealingHack code. + + The replacement for virtual destructors will be to add a static destroy function + pointer to the MethodTable stored in ClassInfo. Any subclass of JSCell that has + a non-trivial destructor will require its own static destroy function to static + call its corresponding destructor, which will now be non-virtual. In future + patches we will slowly move away from destructors altogether as we make more and + more objects backed by GC memory rather than malloc-ed memory. The GC will now + call the static destroy method rather than the virtual destructor. + + As we go through the hierarchy and add static destroy functions to classes, + we will also add a new assert, ASSERT_HAS_TRIVIAL_DESTRUCTOR, to those classes + to which it applies. The future goal is to eventually have every class have that assert. + + * API/JSCallbackConstructor.cpp: + (JSC::JSCallbackConstructor::destroy): Add a destroy function to statically call + ~JSCallbackConstructor because it has some extra destruction logic. + * API/JSCallbackConstructor.h: + * API/JSCallbackFunction.cpp: Add trivial destructor assert for JSCallbackFunction. + * API/JSCallbackObject.cpp: Add a destroy function to statically call ~JSCallbackObject + because it has a member OwnPtr that needs destruction. + (JSC::::destroy): + * API/JSCallbackObject.h: + * JavaScriptCore.exp: Add/remove necessary symbols for JSC. + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Same for Windows symbols. + * debugger/DebuggerActivation.cpp: DebuggerActivation, for some strange reason, didn't + have its own ClassInfo despite the fact that it overrides a number of MethodTable + methods. Added the ClassInfo, along with an assertion that its destructor is trivial. + * debugger/DebuggerActivation.h: + * dfg/DFGOperations.cpp: Remove global data first argument to isJSArray, isJSByteArray, + isJSString, as it is no longer necessary. + (JSC::DFG::putByVal): + * dfg/DFGRepatch.cpp: Ditto. Also remove uses of jsArrayVPtr in favor of using the + JSArray ClassInfo pointer. + (JSC::DFG::tryCacheGetByID): + * dfg/DFGSpeculativeJIT.cpp: Replace uses of the old vptrs with new ClassInfo + comparisons since we don't have vptrs anymore. + (JSC::DFG::SpeculativeJIT::compilePeepHoleObjectEquality): + (JSC::DFG::SpeculativeJIT::compilePeepHoleBranch): + (JSC::DFG::SpeculativeJIT::checkArgumentTypes): + (JSC::DFG::SpeculativeJIT::compilePutByValForByteArray): + (JSC::DFG::SpeculativeJIT::compileGetTypedArrayLength): + (JSC::DFG::SpeculativeJIT::compilePutByValForIntTypedArray): + (JSC::DFG::SpeculativeJIT::compilePutByValForFloatTypedArray): + (JSC::DFG::SpeculativeJIT::compare): + (JSC::DFG::SpeculativeJIT::compileStrictEq): + (JSC::DFG::SpeculativeJIT::compileGetIndexedPropertyStorage): + * dfg/DFGSpeculativeJIT.h: Ditto. + (JSC::DFG::SpeculativeJIT::emitAllocateJSFinalObject): + * dfg/DFGSpeculativeJIT32_64.cpp: Ditto. + (JSC::DFG::SpeculativeJIT::compileObjectEquality): + (JSC::DFG::SpeculativeJIT::compileObjectOrOtherLogicalNot): + (JSC::DFG::SpeculativeJIT::compileLogicalNot): + (JSC::DFG::SpeculativeJIT::emitObjectOrOtherBranch): + (JSC::DFG::SpeculativeJIT::emitBranch): + (JSC::DFG::SpeculativeJIT::compile): + * dfg/DFGSpeculativeJIT64.cpp: Ditto. + (JSC::DFG::SpeculativeJIT::compileObjectEquality): + (JSC::DFG::SpeculativeJIT::compileObjectOrOtherLogicalNot): + (JSC::DFG::SpeculativeJIT::compileLogicalNot): + (JSC::DFG::SpeculativeJIT::emitObjectOrOtherBranch): + (JSC::DFG::SpeculativeJIT::emitBranch): + (JSC::DFG::SpeculativeJIT::compile): + * heap/Heap.cpp: Remove all uses of vptrs in GC optimizations and replace them with + ClassInfo comparisons. + (JSC::Heap::Heap): + * heap/MarkStack.cpp: Ditto. + (JSC::MarkStackThreadSharedData::markingThreadMain): + (JSC::visitChildren): + (JSC::SlotVisitor::drain): + * heap/MarkStack.h: Ditto. + (JSC::MarkStack::MarkStack): + * heap/MarkedBlock.cpp: Ditto. + (JSC::MarkedBlock::callDestructor): + (JSC::MarkedBlock::specializedSweep): + * heap/MarkedBlock.h: Ditto. + * heap/SlotVisitor.h: Ditto. + (JSC::SlotVisitor::SlotVisitor): + * heap/VTableSpectrum.cpp: Now that we don't have vptrs, we can't count them. + We'll have to rename this class and make it use ClassInfo ptrs in a future patch. + (JSC::VTableSpectrum::count): + * interpreter/Interpreter.cpp: Remove all global data arguments from isJSArray, + etc. functions. + (JSC::loadVarargs): + (JSC::Interpreter::tryCacheGetByID): + (JSC::Interpreter::privateExecute): + * jit/JIT.h: Remove vptr argument from emitAllocateBasicJSObject + * jit/JITInlineMethods.h: Remove vptr planting, and add ClassInfo planting, + remove all vtable related code. + (JSC::JIT::emitLoadCharacterString): + (JSC::JIT::emitAllocateBasicJSObject): + (JSC::JIT::emitAllocateJSFinalObject): + (JSC::JIT::emitAllocateJSFunction): + * jit/JITOpcodes.cpp: Replace vptr related branch code with corresponding ClassInfo. + (JSC::JIT::privateCompileCTIMachineTrampolines): + (JSC::JIT::emit_op_to_primitive): + (JSC::JIT::emit_op_convert_this): + * jit/JITOpcodes32_64.cpp: Ditto. + (JSC::JIT::privateCompileCTIMachineTrampolines): + (JSC::JIT::emit_op_to_primitive): + (JSC::JIT::emitSlow_op_eq): + (JSC::JIT::emitSlow_op_neq): + (JSC::JIT::compileOpStrictEq): + (JSC::JIT::emit_op_convert_this): + * jit/JITPropertyAccess.cpp: Ditto. + (JSC::JIT::stringGetByValStubGenerator): + (JSC::JIT::emit_op_get_by_val): + (JSC::JIT::emitSlow_op_get_by_val): + (JSC::JIT::emit_op_put_by_val): + (JSC::JIT::privateCompilePutByIdTransition): + (JSC::JIT::privateCompilePatchGetArrayLength): + * jit/JITPropertyAccess32_64.cpp: Ditto. + (JSC::JIT::stringGetByValStubGenerator): + (JSC::JIT::emit_op_get_by_val): + (JSC::JIT::emitSlow_op_get_by_val): + (JSC::JIT::emit_op_put_by_val): + (JSC::JIT::privateCompilePatchGetArrayLength): + * jit/JITStubs.cpp: Remove global data argument from isJSString, etc. + (JSC::JITThunks::tryCacheGetByID): + (JSC::DEFINE_STUB_FUNCTION): + * jit/SpecializedThunkJIT.h: Replace vptr related stuff with ClassInfo stuff. + (JSC::SpecializedThunkJIT::loadJSStringArgument): + * runtime/ArrayConstructor.cpp: Add trivial destructor assert. + * runtime/ArrayPrototype.cpp: Remove global data argument from isJSArray. + (JSC::arrayProtoFuncToString): + (JSC::arrayProtoFuncJoin): + (JSC::arrayProtoFuncPop): + (JSC::arrayProtoFuncPush): + (JSC::arrayProtoFuncShift): + (JSC::arrayProtoFuncSplice): + (JSC::arrayProtoFuncUnShift): + (JSC::arrayProtoFuncFilter): + (JSC::arrayProtoFuncMap): + (JSC::arrayProtoFuncEvery): + (JSC::arrayProtoFuncForEach): + (JSC::arrayProtoFuncSome): + (JSC::arrayProtoFuncReduce): + (JSC::arrayProtoFuncReduceRight): + * runtime/BooleanConstructor.cpp: Add trivial destructor assert. + * runtime/BooleanObject.cpp: Ditto. + * runtime/BooleanPrototype.cpp: Ditto. + * runtime/ClassInfo.h: Add destroy function pointer to MethodTable. + * runtime/DateConstructor.cpp: Add trivial destructor assert. + * runtime/DateInstance.cpp: Add destroy function for DateInstance because it has a RefPtr + that needs destruction. + (JSC::DateInstance::destroy): + * runtime/DateInstance.h: + * runtime/Error.cpp: Ditto (because of UString member). + (JSC::StrictModeTypeErrorFunction::destroy): + * runtime/Error.h: + * runtime/ErrorConstructor.cpp: Add trivial destructor assert. + * runtime/ErrorInstance.cpp: Ditto. + * runtime/ExceptionHelpers.cpp: Ditto. + * runtime/Executable.cpp: Add destroy functions for ExecutableBase and subclasses. + (JSC::ExecutableBase::destroy): + (JSC::NativeExecutable::destroy): + (JSC::ScriptExecutable::destroy): + (JSC::EvalExecutable::destroy): + (JSC::ProgramExecutable::destroy): + (JSC::FunctionExecutable::destroy): + * runtime/Executable.h: + * runtime/FunctionConstructor.cpp: Add trivial destructor assert. + * runtime/FunctionPrototype.cpp: Ditto. Also remove global data first arg from isJSArray. + (JSC::functionProtoFuncApply): + * runtime/GetterSetter.cpp: Ditto. + * runtime/InitializeThreading.cpp: Remove call to JSGlobalData::storeVPtrs since it no + longer exists. + (JSC::initializeThreadingOnce): + * runtime/InternalFunction.cpp: Remove vtableAnchor function, add trivial destructor assert, + remove first arg from isJSString. + (JSC::InternalFunction::displayName): + * runtime/InternalFunction.h: Remove VPtrStealingHack. + * runtime/JSAPIValueWrapper.cpp: Add trivial destructor assert. + * runtime/JSArray.cpp: Add static destroy to call ~JSArray. Replace vptr checks in + destructor with ClassInfo checks. + (JSC::JSArray::~JSArray): + (JSC::JSArray::destroy): + * runtime/JSArray.h: Remove VPtrStealingHack. Remove globalData argument from isJSArray + and change them to check the ClassInfo rather than the vptrs. + (JSC::isJSArray): + * runtime/JSBoundFunction.cpp: Add trival destructor assert. Remove first arg from isJSArray. + (JSC::boundFunctionCall): + (JSC::boundFunctionConstruct): + * runtime/JSByteArray.cpp: Add static destroy function, replace vptr checks with ClassInfo checks. + (JSC::JSByteArray::~JSByteArray): + (JSC::JSByteArray::destroy): + * runtime/JSByteArray.h: Remove VPtrStealingHack code. + (JSC::isJSByteArray): + * runtime/JSCell.cpp: Add trivial destructor assert. Add static destroy function. + (JSC::JSCell::destroy): + * runtime/JSCell.h: Remove VPtrStealingHack code. Add function for returning the offset + of the ClassInfo pointer in the object for use by the JIT. Add the ClassInfo pointer to + the JSCell itself, and grab it from the Structure. Remove the vptr and setVPtr functions, + as they are no longer used. Add a validatedClassInfo function to JSCell for any clients + that want to verify, while in Debug mode, that the ClassInfo contained in the cell is the + same one as that contained in the Structure. This isn't used too often, because most of + the places where we compare the ClassInfo to things can be called during destruction. + Since the Structure is unreliable during the phase when destructors are being called, + we can't call validatedClassInfo. + (JSC::JSCell::classInfoOffset): + (JSC::JSCell::structure): + (JSC::JSCell::classInfo): + * runtime/JSFunction.cpp: Remove VPtrStealingHack code. Add static destroy, remove vtableAnchor, + remove first arg from call to isJSString. + (JSC::JSFunction::destroy): + (JSC::JSFunction::displayName): + * runtime/JSFunction.h: + * runtime/JSGlobalData.cpp: Remove all VPtr stealing code and storage, including storeVPtrs, + as these vptrs are no longer needed in the codebase. + * runtime/JSGlobalData.h: + (JSC::TypedArrayDescriptor::TypedArrayDescriptor): Changed the TypedArrayDescriptor to use + ClassInfo rather than the vptr. + * runtime/JSGlobalObject.cpp: Add static destroy function. + (JSC::JSGlobalObject::destroy): + * runtime/JSGlobalObject.h: + * runtime/JSGlobalThis.cpp: Add trivial destructor assert. + * runtime/JSNotAnObject.cpp: Ditto. + * runtime/JSONObject.cpp: Ditto. Remove first arg from isJSArray calls. + (JSC::Stringifier::Holder::appendNextProperty): + (JSC::Walker::walk): + * runtime/JSObject.cpp: + (JSC::JSFinalObject::destroy): + (JSC::JSNonFinalObject::destroy): + (JSC::JSObject::destroy): + * runtime/JSObject.h: Add trivial destructor assert for JSObject, remove vtableAnchor + from JSNonFinalObject and JSFinalObject, add static destroy for JSFinalObject and + JSNonFinalObject, add isJSFinalObject utility function similar to isJSArray, remove all VPtrStealingHack code. + (JSC::JSObject::finishCreation): + (JSC::JSNonFinalObject::finishCreation): + (JSC::JSFinalObject::finishCreation): + (JSC::isJSFinalObject): + * runtime/JSPropertyNameIterator.cpp: Add static destroy. + (JSC::JSPropertyNameIterator::destroy): + * runtime/JSPropertyNameIterator.h: + * runtime/JSStaticScopeObject.cpp: Ditto. + (JSC::JSStaticScopeObject::destroy): + * runtime/JSStaticScopeObject.h: Ditto. + * runtime/JSString.cpp: + (JSC::JSString::destroy): + * runtime/JSString.h: Ditto. Remove VPtrStealingHack code. Also remove fixupVPtr code, + since we no longer need to fixup vptrs. + (JSC::jsSingleCharacterString): + (JSC::jsSingleCharacterSubstring): + (JSC::jsNontrivialString): + (JSC::jsString): + (JSC::jsSubstring8): + (JSC::jsSubstring): + (JSC::jsOwnedString): + (JSC::jsStringBuilder): + (JSC::isJSString): + * runtime/JSVariableObject.cpp: + (JSC::JSVariableObject::destroy): + * runtime/JSVariableObject.h: Ditto. + * runtime/JSWrapperObject.cpp: + * runtime/JSWrapperObject.h: Add trivial destructor assert. + * runtime/MathObject.cpp: Ditto. + * runtime/NativeErrorConstructor.cpp: Ditto. + * runtime/NumberConstructor.cpp: Ditto. + * runtime/NumberObject.cpp: Ditto. + * runtime/NumberPrototype.cpp: Ditto. + * runtime/ObjectConstructor.cpp: Ditto. + * runtime/ObjectPrototype.cpp: Ditto. + * runtime/Operations.h: Remove calls to fixupVPtr, remove first arg to isJSString. + (JSC::jsString): + (JSC::jsLess): + (JSC::jsLessEq): + * runtime/RegExp.cpp: Add static destroy. + (JSC::RegExp::destroy): + * runtime/RegExp.h: + * runtime/RegExpConstructor.cpp: Add static destroy for RegExpConstructor and RegExpMatchesArray. + (JSC::RegExpConstructor::destroy): + (JSC::RegExpMatchesArray::destroy): + * runtime/RegExpConstructor.h: + * runtime/RegExpMatchesArray.h: + * runtime/RegExpObject.cpp: Add static destroy. + (JSC::RegExpObject::destroy): + * runtime/RegExpObject.h: + * runtime/ScopeChain.cpp: Add trivial destructor assert. + * runtime/ScopeChain.h: + * runtime/StrictEvalActivation.cpp: Ditto. + * runtime/StringConstructor.cpp: + * runtime/StringObject.cpp: Ditto. Remove vtableAnchor. + * runtime/StringObject.h: + * runtime/StringPrototype.cpp: Ditto. + * runtime/Structure.cpp: Add static destroy. + (JSC::Structure::destroy): + * runtime/Structure.h: Move JSCell::finishCreation and JSCell constructor into Structure.h + because they need to have the full Structure type to access the ClassInfo to store in the JSCell. + (JSC::JSCell::setStructure): + (JSC::JSCell::validatedClassInfo): + (JSC::JSCell::JSCell): + (JSC::JSCell::finishCreation): + * runtime/StructureChain.cpp: Add static destroy. + (JSC::StructureChain::destroy): + * runtime/StructureChain.h: + * wtf/Assertions.h: Add new assertion ASSERT_HAS_TRIVIAL_DESTRUCTOR, which uses clangs + ability to tell us when a class has a trivial destructor. We will use this assert + more in future patches as we move toward having all JSC objects backed by GC memory, + which means moving away from using destructors/finalizers. + +2011-12-15 Martin Robinson <mrobinson@igalia.com> + + Fix 'make dist' in preparation for the GTK+ release. + + * GNUmakefile.list.am: Add missing header. + +2011-12-15 Sam Weinig <sam@webkit.org> + + <rdar://problem/10552550> JavaScriptCore uses obsolete 'cpy' mnemonic in ARM assembly + + Reviewed by Gavin Barraclough. + + Original patch by Jim Grosbach. + + * jit/JITStubs.cpp: + (JSC::ctiTrampoline): + (JSC::ctiVMThrowTrampoline): + Replace uses of the 'cpy' mnemonic with 'mov'. + +2011-12-15 Filip Pizlo <fpizlo@apple.com> + + Value profiling should distinguished between NaN and non-NaN doubles + https://bugs.webkit.org/show_bug.cgi?id=74682 + + Reviewed by Gavin Barraclough. + + Added PredictDoubleReal and PredictDoubleNaN. PredictDouble is now the union + of the two. + + * bytecode/PredictedType.cpp: + (JSC::predictionToString): + (JSC::predictionFromValue): + * bytecode/PredictedType.h: + (JSC::isDoubleRealPrediction): + (JSC::isDoublePrediction): + +2011-12-15 Anders Carlsson <andersca@apple.com> + + Regression (r102866): Navigating away from or closing a page with a plugin crashes + https://bugs.webkit.org/show_bug.cgi?id=74655 + <rdar://problem/10590024> + + Reviewed by Sam Weinig. + + Rewrite HasRefAndDeref to work if ref and deref are implemented in base classes, + using a modified version of the technique described here: + http://groups.google.com/group/comp.lang.c++.moderated/msg/e5fbc9305539f699 + + * wtf/Functional.h: + +2011-12-15 Andy Wingo <wingo@igalia.com> + + Warnings fixes in Interpreter.cpp and PrivateExecute.cpp + https://bugs.webkit.org/show_bug.cgi?id=74624 + + Reviewed by Darin Adler. + + * interpreter/Interpreter.cpp: + (JSC::Interpreter::privateExecute): Fix variables unused in + release mode. + * wtf/ParallelJobsGeneric.cpp: + (WTF::ParallelEnvironment::ParallelEnvironment): Fix + signed/unsigned comparison warning, with a cast. + +2011-12-15 Andy Wingo <wingo@igalia.com> + + Use more macrology in JSC::Options + https://bugs.webkit.org/show_bug.cgi?id=72938 + + Reviewed by Filip Pizlo. + + * runtime/Options.cpp: + (JSC::Options::initializeOptions): + * runtime/Options.h: Use macros to ensure that all heuristics are + declared and have initializers. + +2011-12-15 Anders Carlsson <andersca@apple.com> + + Add ScrollingCoordinator class and ENABLE_THREADED_SCROLLING define + https://bugs.webkit.org/show_bug.cgi?id=74639 + + Reviewed by Andreas Kling. + + Add ENABLE_THREADED_SCROLLING #define. + + * wtf/Platform.h: + +2011-12-15 Anders Carlsson <andersca@apple.com> + + EventDispatcher should handle wheel events on the connection queue + https://bugs.webkit.org/show_bug.cgi?id=74627 + + Reviewed by Andreas Kling. + + Add a BoundFunctionImpl specialization that takes three parameters. + + * wtf/Functional.h: + (WTF::C::): + (WTF::R): + (WTF::bind): + +2011-12-14 Anders Carlsson <andersca@apple.com> + + Add WTF::Function to wtf/Forward.h + https://bugs.webkit.org/show_bug.cgi?id=74576 + + Reviewed by Adam Roben. + + * jsc.cpp: + Work around a name conflict in the readline library. + + * wtf/Forward.h: + Add Function. + +2011-12-15 Igor Oliveira <igor.oliveira@openbossa.org> + + [Qt] Support requestAnimationFrame API + https://bugs.webkit.org/show_bug.cgi?id=74528 + + Let Qt port use REQUEST_ANIMATION_FRAME_TIMER. + + Reviewed by Kenneth Rohde Christiansen. + + * wtf/Platform.h: + +2011-12-15 Andy Wingo <wingo@igalia.com> + + Minor refactor to Parser::parseTryStatement + https://bugs.webkit.org/show_bug.cgi?id=74507 + + Reviewed by Geoffrey Garen. + + * parser/Parser.cpp (JSC::Parser::parseTryStatement): Use the + Parser's declareVariable instead of going directly to the scope. + This will facilitate future checks related to harmony block + scoping. + +2011-12-15 Andy Wingo <wingo@igalia.com> + + Rename JSC::Heuristics to JSC::Options + https://bugs.webkit.org/show_bug.cgi?id=72889 + + Reviewed by Filip Pizlo. + + * runtime/Options.cpp: Renamed from Source/JavaScriptCore/runtime/Heuristics.cpp. + * runtime/Options.h: Renamed from Source/JavaScriptCore/runtime/Heuristics.h. + + * CMakeLists.txt: + * GNUmakefile.list.am: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * Target.pri: + * bytecode/CodeBlock.cpp: + (JSC::CodeBlock::shouldOptimizeNow): + * bytecode/CodeBlock.h: + (JSC::CodeBlock::likelyToTakeSlowCase): + (JSC::CodeBlock::couldTakeSlowCase): + (JSC::CodeBlock::likelyToTakeSpecialFastCase): + (JSC::CodeBlock::likelyToTakeDeepestSlowCase): + (JSC::CodeBlock::likelyToTakeAnySlowCase): + (JSC::CodeBlock::reoptimizationRetryCounter): + (JSC::CodeBlock::countReoptimization): + (JSC::CodeBlock::counterValueForOptimizeAfterWarmUp): + (JSC::CodeBlock::counterValueForOptimizeAfterLongWarmUp): + (JSC::CodeBlock::optimizeNextInvocation): + (JSC::CodeBlock::dontOptimizeAnytimeSoon): + (JSC::CodeBlock::optimizeSoon): + (JSC::CodeBlock::largeFailCountThreshold): + (JSC::CodeBlock::largeFailCountThresholdForLoop): + (JSC::CodeBlock::shouldReoptimizeNow): + (JSC::CodeBlock::shouldReoptimizeFromLoopNow): + * dfg/DFGByteCodeParser.cpp: + (JSC::DFG::ByteCodeParser::handleInlining): + * dfg/DFGCapabilities.h: + (JSC::DFG::mightCompileEval): + (JSC::DFG::mightCompileProgram): + (JSC::DFG::mightCompileFunctionForCall): + (JSC::DFG::mightCompileFunctionForConstruct): + (JSC::DFG::mightInlineFunctionForCall): + (JSC::DFG::mightInlineFunctionForConstruct): + * dfg/DFGOSRExit.cpp: + (JSC::DFG::OSRExit::considerAddingAsFrequentExitSiteSlow): + * dfg/DFGOSRExitCompiler32_64.cpp: + (JSC::DFG::OSRExitCompiler::compileExit): + * dfg/DFGOSRExitCompiler64.cpp: + (JSC::DFG::OSRExitCompiler::compileExit): + * dfg/DFGVariableAccessData.h: + (JSC::DFG::VariableAccessData::shouldUseDoubleFormatAccordingToVote): + * heap/MarkStack.cpp: + (JSC::MarkStackSegmentAllocator::allocate): + (JSC::MarkStackSegmentAllocator::shrinkReserve): + (JSC::MarkStackArray::MarkStackArray): + (JSC::MarkStackArray::donateSomeCellsTo): + (JSC::MarkStackArray::stealSomeCellsFrom): + (JSC::MarkStackThreadSharedData::MarkStackThreadSharedData): + (JSC::SlotVisitor::donateSlow): + (JSC::SlotVisitor::drain): + (JSC::SlotVisitor::drainFromShared): + * heap/MarkStack.h: + (JSC::MarkStack::mergeOpaqueRootsIfProfitable): + (JSC::MarkStack::addOpaqueRoot): + (JSC::MarkStackArray::canDonateSomeCells): + * heap/SlotVisitor.h: + (JSC::SlotVisitor::donate): + * jit/JIT.cpp: + (JSC::JIT::emitOptimizationCheck): + * runtime/InitializeThreading.cpp: + (JSC::initializeThreadingOnce): Adapt callers and build systems. + + * testRegExp.cpp: + (CommandLine::CommandLine): + * jsc.cpp: + (CommandLine::CommandLine): + Rename from Options, to avoid name conflict. + +2011-12-14 Sam Weinig <sam@webkit.org> + + Revert unintentional change to JavaScriptCore.def + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + +2011-12-14 Sam Weinig <weinig@apple.com> + + Remove whitespace from InheritedPropertySheets attributes in + vsprops files to appease the Visual Studio project migrator. + + Reviewed by Adam Roben. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreDebug.vsprops: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreDebugAll.vsprops: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreDebugCairoCFLite.vsprops: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGeneratedDebug.vsprops: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGeneratedDebugAll.vsprops: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGeneratedDebugCairoCFLite.vsprops: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGeneratedProduction.vsprops: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGeneratedRelease.vsprops: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGeneratedReleaseCairoCFLite.vsprops: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGeneratedReleasePGO.vsprops: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreProduction.vsprops: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreRelease.vsprops: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreReleaseCairoCFLite.vsprops: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreReleasePGO.vsprops: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreReleasePGOOptimize.vsprops: + * JavaScriptCore.vcproj/WTF/WTFDebug.vsprops: + * JavaScriptCore.vcproj/WTF/WTFDebugAll.vsprops: + * JavaScriptCore.vcproj/WTF/WTFDebugCairoCFLite.vsprops: + * JavaScriptCore.vcproj/WTF/WTFProduction.vsprops: + * JavaScriptCore.vcproj/WTF/WTFRelease.vsprops: + * JavaScriptCore.vcproj/WTF/WTFReleaseCairoCFLite.vsprops: + * JavaScriptCore.vcproj/WTF/WTFReleasePGO.vsprops: + * JavaScriptCore.vcproj/jsc/jscDebug.vsprops: + * JavaScriptCore.vcproj/jsc/jscDebugAll.vsprops: + * JavaScriptCore.vcproj/jsc/jscDebugCairoCFLite.vsprops: + * JavaScriptCore.vcproj/jsc/jscProduction.vsprops: + * JavaScriptCore.vcproj/jsc/jscRelease.vsprops: + * JavaScriptCore.vcproj/jsc/jscReleaseCairoCFLite.vsprops: + * JavaScriptCore.vcproj/jsc/jscReleasePGO.vsprops: + * JavaScriptCore.vcproj/testRegExp/testRegExpDebug.vsprops: + * JavaScriptCore.vcproj/testRegExp/testRegExpDebugAll.vsprops: + * JavaScriptCore.vcproj/testRegExp/testRegExpDebugCairoCFLite.vsprops: + * JavaScriptCore.vcproj/testRegExp/testRegExpProduction.vsprops: + * JavaScriptCore.vcproj/testRegExp/testRegExpRelease.vsprops: + * JavaScriptCore.vcproj/testRegExp/testRegExpReleaseCairoCFLite.vsprops: + * JavaScriptCore.vcproj/testRegExp/testRegExpReleasePGO.vsprops: + * JavaScriptCore.vcproj/testapi/testapiDebug.vsprops: + * JavaScriptCore.vcproj/testapi/testapiDebugAll.vsprops: + * JavaScriptCore.vcproj/testapi/testapiDebugCairoCFLite.vsprops: + * JavaScriptCore.vcproj/testapi/testapiProduction.vsprops: + * JavaScriptCore.vcproj/testapi/testapiRelease.vsprops: + * JavaScriptCore.vcproj/testapi/testapiReleaseCairoCFLite.vsprops: + +2011-12-14 Anders Carlsson <andersca@apple.com> + + binding a member function should ref/deref the object pointer if needed + https://bugs.webkit.org/show_bug.cgi?id=74552 + + Reviewed by Sam Weinig. + + Add a HasRefAndDeref helper class template which checks if a given class type has ref and deref + member functions which the right type. Use this to determine if we should ref/deref the first parameter. + + * wtf/Functional.h: + (WTF::R): + (WTF::C::): + (WTF::RefAndDeref::ref): + (WTF::RefAndDeref::deref): + +2011-12-14 Hajime Morrita <morrita@chromium.org> + + JS_INLINE and WTF_INLINE should be visible from WebCore + https://bugs.webkit.org/show_bug.cgi?id=73191 + + - Moved Export related macro definitions from config.h to ExportMacros.h and JSExportMacros.h. + - Moved WTF_USE_JSC and WTF_USE_V8 from various config.h family to Platform.h. + - Replaced JS_EXPORTDATA in wtf moudule with newly introduced WTF_EXPORTDATA. + + Reviewed by Kevin Ollivier. + + * JavaScriptCore.xcodeproj/project.pbxproj: + * config.h: + * runtime/JSExportMacros.h: Added. + * wtf/ExportMacros.h: + * wtf/Platform.h: + * wtf/WTFThreadData.h: + * wtf/text/AtomicString.h: + * wtf/text/StringStatics.cpp: + +2011-12-14 Anders Carlsson <andersca@apple.com> + + Work around a bug in the MSVC2005 compiler + https://bugs.webkit.org/show_bug.cgi?id=74550 + + Reviewed by Sam Weinig. + + Add template parameters for the return types of the partial specializations of BoundFunctionImpl. + + * wtf/Functional.h: + (WTF::R): + +2011-12-13 Jon Lee <jonlee@apple.com> + + Enable notifications on Mac. + + Reviewed by Sam Weinig. + + * Configurations/FeatureDefines.xcconfig: + +2011-12-14 David Kilzer <ddkilzer@apple.com> + + Remove definition of old ENABLE(YARR) macro + <http://webkit.org/b/74532> + + Reviewed by Darin Adler. + + * wtf/Platform.h: Removed ENABLE_YARR macros. + +2011-12-14 Anders Carlsson <andersca@apple.com> + + bind should handle member functions + https://bugs.webkit.org/show_bug.cgi?id=74529 + + Reviewed by Sam Weinig. + + Add FunctionWrapper partial specializations for member function pointers. + + * wtf/Functional.h: + (WTF::C::): + +2011-12-14 Gavin Barraclough <barraclough@apple.com> + + DFG relies on returning a struct in registers + https://bugs.webkit.org/show_bug.cgi?id=74527 + + Reviewed by Geoff Garen. + + This will not work on all platforms. Returning a uint64_t will more reliably achieve + what we want, on 32-bit platforms (on 64-bit, stick with the struct return). + + * dfg/DFGOperations.cpp: + * dfg/DFGOperations.h: + (JSC::DFG::DFGHandler::dfgHandlerEncoded): + +2011-12-14 Anders Carlsson <andersca@apple.com> + + Add unary and binary bind overloads + https://bugs.webkit.org/show_bug.cgi?id=74524 + + Reviewed by Sam Weinig. + + * wtf/Functional.h: + (WTF::R): + (WTF::FunctionWrapper::ResultType): + (WTF::bind): + +2011-12-14 Anders Carlsson <andersca@apple.com> + + Add back the callOnMainThread overload that takes a WTF::Function + https://bugs.webkit.org/show_bug.cgi?id=74512 + + Reviewed by Darin Adler. + + Add back the overload; the changes to WebCore should hopefully keep Windows building. + + * wtf/MainThread.cpp: + (WTF::callFunctionObject): + (WTF::callOnMainThread): + * wtf/MainThread.h: + +2011-12-13 Filip Pizlo <fpizlo@apple.com> + + DFG should infer when local variables are doubles + https://bugs.webkit.org/show_bug.cgi?id=74480 + + Reviewed by Oliver Hunt. + + Introduced the notion that a local variable (though not an argument, yet!) can + be stored as a double, and will be guaranteed to always contain a double. This + requires more magic in the OSR (conversion in both entry and exit). The inference + is quite unorthodox: all uses of a variable vote on whether they think it should + be a double or a JSValue, based on how they use it. If they use it in an integer + or boxed value context, they vote JSValue. If they use it in a double context, + they vote double. This voting is interleaved in the propagator's fixpoint, so + that variables voted double then have a double prediction propagated from them. + This interleaving is needed because a variable that actually always contains an + integer that always gets used in arithmetic that involves doubles may end up + being voted double, which then means that all uses of the variable will see a + double rather than an integer. + + This is worth 18% to SunSpider/3d-cube, 7% to Kraken/audio-beat-detection, 7% + to Kraken/audio-fft, 6% to Kraken/imaging-darkroom, 20% to + Kraken/imaging-gaussian-blur, and just over 1% to Kraken/json-parse-financial. + It results in a 1% speed-up on SunSpider and a 4% speed-up in Kraken. Similar + results on JSVALUE32_64, though with a bigger win on Kraken (5%) and no overall + win on SunSpider. + + * bytecode/ValueRecovery.h: + (JSC::ValueRecovery::alreadyInRegisterFileAsUnboxedDouble): + (JSC::ValueRecovery::dump): + * dfg/DFGAbstractState.cpp: + (JSC::DFG::AbstractState::execute): + * dfg/DFGAssemblyHelpers.h: + (JSC::DFG::AssemblyHelpers::boxDouble): + * dfg/DFGGraph.cpp: + (JSC::DFG::Graph::dump): + * dfg/DFGJITCompiler.h: + (JSC::DFG::JITCompiler::noticeOSREntry): + * dfg/DFGOSREntry.cpp: + (JSC::DFG::prepareOSREntry): + * dfg/DFGOSREntry.h: + * dfg/DFGOSRExitCompiler64.cpp: + (JSC::DFG::OSRExitCompiler::compileExit): + * dfg/DFGPropagator.cpp: + (JSC::DFG::Propagator::vote): + (JSC::DFG::Propagator::doRoundOfDoubleVoting): + (JSC::DFG::Propagator::propagatePredictions): + (JSC::DFG::Propagator::fixupNode): + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::ValueSource::dump): + (JSC::DFG::SpeculativeJIT::compile): + (JSC::DFG::SpeculativeJIT::computeValueRecoveryFor): + * dfg/DFGSpeculativeJIT.h: + * dfg/DFGSpeculativeJIT32_64.cpp: + (JSC::DFG::SpeculativeJIT::compile): + * dfg/DFGSpeculativeJIT64.cpp: + (JSC::DFG::SpeculativeJIT::compile): + * dfg/DFGVariableAccessData.h: + (JSC::DFG::VariableAccessData::VariableAccessData): + (JSC::DFG::VariableAccessData::clearVotes): + (JSC::DFG::VariableAccessData::vote): + (JSC::DFG::VariableAccessData::doubleVoteRatio): + (JSC::DFG::VariableAccessData::shouldUseDoubleFormatAccordingToVote): + (JSC::DFG::VariableAccessData::shouldUseDoubleFormat): + (JSC::DFG::VariableAccessData::tallyVotesForShouldUseDoubleFormat): + * runtime/Arguments.cpp: + (JSC::Arguments::tearOff): + * runtime/Heuristics.cpp: + (JSC::Heuristics::initializeHeuristics): + * runtime/Heuristics.h: + +2011-12-13 Anders Carlsson <andersca@apple.com> + + Try to fix the Windows build. + + Remove the callOnMainThread overload that takes a WTF::Function since it's not being used. + + * wtf/MainThread.cpp: + * wtf/MainThread.h: + +2011-12-13 Anders Carlsson <andersca@apple.com> + + Add a very bare-bones implementation of bind and Function to WTF + https://bugs.webkit.org/show_bug.cgi?id=74462 + + Reviewed by Sam Weinig. + + In order to make it easier to package up function calls and send them across + threads, add a (currently very simple) implementation of WTF::bind and WTF::Function to a new + wtf/Functional.h header. + + Currently, all bind can do is bind a nullary function and return a Function object that can be called and copied, + but I'll add more as the need arises. + + * GNUmakefile.list.am: + * JavaScriptCore.gypi: + * JavaScriptCore.vcproj/WTF/WTF.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * wtf/Functional.h: Added. + (WTF::R): + (WTF::FunctionImplBase::~FunctionImplBase): + (WTF::FunctionWrapper::ResultType): + (WTF::FunctionBase::isNull): + (WTF::FunctionBase::FunctionBase): + (WTF::FunctionBase::impl): + (WTF::bind): + * wtf/MainThread.cpp: + (WTF::callFunctionObject): + (WTF::callOnMainThread): + * wtf/MainThread.h: + * wtf/wtf.pro: + +2011-12-13 Geoffrey Garen <ggaren@apple.com> + + <rdar://problem/10577239> GC Crash introduced in r102545 + + Reviewed by Gavin Barraclough. + + MarkedArgumentBuffer was still marking items in forwards order, even though + the argument order has been reversed. + + I fixed this bug, and replaced address calculation code with some helper + functions -- mallocBase() and slotFor() -- so it stays fixed everywhere. + + * runtime/ArgList.cpp: + (JSC::MarkedArgumentBuffer::markLists): + (JSC::MarkedArgumentBuffer::slowAppend): + * runtime/ArgList.h: + (JSC::MarkedArgumentBuffer::~MarkedArgumentBuffer): + (JSC::MarkedArgumentBuffer::at): + (JSC::MarkedArgumentBuffer::append): + (JSC::MarkedArgumentBuffer::last): + (JSC::MarkedArgumentBuffer::slotFor): + (JSC::MarkedArgumentBuffer::mallocBase): + +2011-12-13 Filip Pizlo <fpizlo@apple.com> + + DFG OSR exit for UInt32ToNumber should roll forward, not roll backward + https://bugs.webkit.org/show_bug.cgi?id=74463 + + Reviewed by Gavin Barraclough. + + Implements roll-forward OSR exit for UInt32ToNumber, which requires ValueRecoveries knowing + how to execute the slow path of UInt32ToNumber. + + * bytecode/CodeBlock.h: + (JSC::CodeBlock::lastOSRExit): + * bytecode/CodeOrigin.h: + (JSC::CodeOrigin::operator!=): + * bytecode/ValueRecovery.h: + (JSC::ValueRecovery::uint32InGPR): + (JSC::ValueRecovery::gpr): + (JSC::ValueRecovery::dump): + * dfg/DFGAssemblyHelpers.cpp: + * dfg/DFGAssemblyHelpers.h: + * dfg/DFGOSRExit.h: + (JSC::DFG::OSRExit::valueRecoveryForOperand): + * dfg/DFGOSRExitCompiler32_64.cpp: + (JSC::DFG::OSRExitCompiler::compileExit): + * dfg/DFGOSRExitCompiler64.cpp: + (JSC::DFG::OSRExitCompiler::compileExit): + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::compileUInt32ToNumber): + (JSC::DFG::SpeculativeJIT::compileGetByValOnIntTypedArray): + * dfg/DFGSpeculativeJIT.h: + * dfg/DFGSpeculativeJIT32_64.cpp: + (JSC::DFG::SpeculativeJIT::nonSpeculativeUInt32ToNumber): + (JSC::DFG::SpeculativeJIT::compile): + * dfg/DFGSpeculativeJIT64.cpp: + (JSC::DFG::SpeculativeJIT::nonSpeculativeUInt32ToNumber): + (JSC::DFG::SpeculativeJIT::compile): + +2011-12-13 Oliver Hunt <oliver@apple.com> + + Arguments object doesn't handle mutation of length property correctly + https://bugs.webkit.org/show_bug.cgi?id=74454 + + Reviewed by Gavin Barraclough. + + Correct handling of arguments objects with overridden length property + + * interpreter/Interpreter.cpp: + (JSC::loadVarargs): + * runtime/Arguments.cpp: + (JSC::Arguments::copyToArguments): + (JSC::Arguments::fillArgList): + +2011-12-13 Filip Pizlo <fpizlo@apple.com> + + DFG GetByVal CSE rule should match PutByValAlias + https://bugs.webkit.org/show_bug.cgi?id=74390 + + Reviewed by Geoff Garen. + + Tiny win on some benchmarks. Maybe a 0.2% win on SunSpider. + + * dfg/DFGPropagator.cpp: + (JSC::DFG::Propagator::getByValLoadElimination): + +2011-12-13 Andy Wingo <wingo@igalia.com> + + Fix interpreter debug build. + https://bugs.webkit.org/show_bug.cgi?id=74439 + + Reviewed by Geoffrey Garen. + + * bytecode/ValueRecovery.h: Include stdio.h on debug builds. + +2011-12-13 Filip Pizlo <fpizlo@apple.com> + + DFG should know exactly why recompilation was triggered + https://bugs.webkit.org/show_bug.cgi?id=74362 + + Reviewed by Oliver Hunt. + + Each OSR exit is now individually counted, as well as counting the total number + of OSR exits that occurred in a code block. If recompilation is triggered, we + check to see if there are OSR exit sites that make up a sufficiently large + portion of the total OSR exits that occurred. For any such OSR exit sites, we + add a description of the site (bytecode index, kind) to a data structure in the + corresponding baseline CodeBlock. Then, when we recompile the code, we immediately + know which speculations would be unwise based on the fact that previous such + speculations proved to be fruitless. + + This means 2% win on two of the SunSpider string tests, a 4% win on V8's deltablue, + and 5% on Kraken's imaging-darkroom. It is only a minor win in the averages, less + than 0.5%. + + * CMakeLists.txt: + * GNUmakefile.list.am: + * JavaScriptCore.xcodeproj/project.pbxproj: + * Target.pri: + * bytecode/CodeBlock.cpp: + (JSC::CodeBlock::tallyFrequentExitSites): + * bytecode/CodeBlock.h: + (JSC::CodeBlock::addFrequentExitSite): + (JSC::CodeBlock::exitProfile): + (JSC::CodeBlock::reoptimize): + (JSC::CodeBlock::tallyFrequentExitSites): + * bytecode/DFGExitProfile.cpp: Added. + (JSC::DFG::ExitProfile::ExitProfile): + (JSC::DFG::ExitProfile::~ExitProfile): + (JSC::DFG::ExitProfile::add): + (JSC::DFG::QueryableExitProfile::QueryableExitProfile): + (JSC::DFG::QueryableExitProfile::~QueryableExitProfile): + * bytecode/DFGExitProfile.h: Added. + (JSC::DFG::exitKindToString): + (JSC::DFG::exitKindIsCountable): + (JSC::DFG::FrequentExitSite::FrequentExitSite): + (JSC::DFG::FrequentExitSite::operator!): + (JSC::DFG::FrequentExitSite::operator==): + (JSC::DFG::FrequentExitSite::hash): + (JSC::DFG::FrequentExitSite::bytecodeOffset): + (JSC::DFG::FrequentExitSite::kind): + (JSC::DFG::FrequentExitSite::isHashTableDeletedValue): + (JSC::DFG::FrequentExitSiteHash::hash): + (JSC::DFG::FrequentExitSiteHash::equal): + (JSC::DFG::QueryableExitProfile::hasExitSite): + * dfg/DFGAssemblyHelpers.h: + (JSC::DFG::AssemblyHelpers::baselineCodeBlockForOriginAndBaselineCodeBlock): + (JSC::DFG::AssemblyHelpers::baselineCodeBlockFor): + * dfg/DFGByteCodeParser.cpp: + (JSC::DFG::ByteCodeParser::makeSafe): + (JSC::DFG::ByteCodeParser::makeDivSafe): + (JSC::DFG::ByteCodeParser::handleCall): + (JSC::DFG::ByteCodeParser::handleIntrinsic): + (JSC::DFG::ByteCodeParser::parseBlock): + (JSC::DFG::ByteCodeParser::InlineStackEntry::InlineStackEntry): + * dfg/DFGOSRExit.cpp: + (JSC::DFG::OSRExit::OSRExit): + (JSC::DFG::OSRExit::considerAddingAsFrequentExitSiteSlow): + * dfg/DFGOSRExit.h: + (JSC::DFG::OSRExit::considerAddingAsFrequentExitSite): + * dfg/DFGOSRExitCompiler.cpp: + * dfg/DFGOSRExitCompiler32_64.cpp: + (JSC::DFG::OSRExitCompiler::compileExit): + * dfg/DFGOSRExitCompiler64.cpp: + (JSC::DFG::OSRExitCompiler::compileExit): + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::compilePeepHoleObjectEquality): + (JSC::DFG::SpeculativeJIT::checkArgumentTypes): + (JSC::DFG::SpeculativeJIT::compileGetCharCodeAt): + (JSC::DFG::SpeculativeJIT::compileGetByValOnString): + (JSC::DFG::SpeculativeJIT::compilePutByValForByteArray): + (JSC::DFG::SpeculativeJIT::compileGetByValOnByteArray): + (JSC::DFG::SpeculativeJIT::compileGetTypedArrayLength): + (JSC::DFG::SpeculativeJIT::compileGetByValOnIntTypedArray): + (JSC::DFG::SpeculativeJIT::compilePutByValForIntTypedArray): + (JSC::DFG::SpeculativeJIT::compileGetByValOnFloatTypedArray): + (JSC::DFG::SpeculativeJIT::compilePutByValForFloatTypedArray): + (JSC::DFG::SpeculativeJIT::compileInstanceOfForObject): + (JSC::DFG::SpeculativeJIT::compileSoftModulo): + (JSC::DFG::SpeculativeJIT::compileArithMul): + (JSC::DFG::SpeculativeJIT::compileGetIndexedPropertyStorage): + * dfg/DFGSpeculativeJIT.h: + (JSC::DFG::SpeculativeJIT::speculationCheck): + (JSC::DFG::SpeculativeJIT::terminateSpeculativeExecution): + * dfg/DFGSpeculativeJIT32_64.cpp: + (JSC::DFG::SpeculativeJIT::fillSpeculateIntInternal): + (JSC::DFG::SpeculativeJIT::fillSpeculateDouble): + (JSC::DFG::SpeculativeJIT::fillSpeculateCell): + (JSC::DFG::SpeculativeJIT::fillSpeculateBoolean): + (JSC::DFG::SpeculativeJIT::compileObjectEquality): + (JSC::DFG::SpeculativeJIT::compileObjectOrOtherLogicalNot): + (JSC::DFG::SpeculativeJIT::emitObjectOrOtherBranch): + (JSC::DFG::SpeculativeJIT::compile): + * dfg/DFGSpeculativeJIT64.cpp: + (JSC::DFG::SpeculativeJIT::fillSpeculateIntInternal): + (JSC::DFG::SpeculativeJIT::fillSpeculateDouble): + (JSC::DFG::SpeculativeJIT::fillSpeculateCell): + (JSC::DFG::SpeculativeJIT::fillSpeculateBoolean): + (JSC::DFG::SpeculativeJIT::compileObjectEquality): + (JSC::DFG::SpeculativeJIT::compileObjectOrOtherLogicalNot): + (JSC::DFG::SpeculativeJIT::compileLogicalNot): + (JSC::DFG::SpeculativeJIT::emitObjectOrOtherBranch): + (JSC::DFG::SpeculativeJIT::emitBranch): + (JSC::DFG::SpeculativeJIT::compile): + * runtime/Heuristics.cpp: + (JSC::Heuristics::initializeHeuristics): + * runtime/Heuristics.h: + +2011-12-13 Michael Saboff <msaboff@apple.com> + + Cleanup of StringImpl::equal in r102631 post commit + https://bugs.webkit.org/show_bug.cgi?id=74421 + + Reviewed by Darin Adler. + + * wtf/text/AtomicString.h: + (WTF::operator==): Removed cast no longer needed. + * wtf/text/StringImpl.h: + (WTF::equal): Changed template to several overloaded methods. + +2011-12-12 Michael Saboff <msaboff@apple.com> + + Eliminate Duplicate word at a time equal code in StringImpl.cpp and StringHash.h + https://bugs.webkit.org/show_bug.cgi?id=73622 + + Reviewed by Oliver Hunt. + + Moved equal(charType1 *, charType2, unsigned) template methods + from static StringImpl.cpp to StringImpl.h and then replaced the + processor specific character comparison code in StringHash::equal + with calls to these methods. + + This change is worth 3% on SunSpider string-unpack-code as reported + by the SunSpider command line harness. No other tests appear to + have measurable performance changes. + + * wtf/text/AtomicString.h: + (WTF::operator==): + * wtf/text/StringHash.h: + (WTF::StringHash::equal): + * wtf/text/StringImpl.cpp: + * wtf/text/StringImpl.h: + (WTF::LChar): + (WTF::UChar): + (WTF::equal): + +2011-12-12 Filip Pizlo <fpizlo@apple.com> + + ARMv7 version of DFG soft modulo does register allocation inside of control flow + https://bugs.webkit.org/show_bug.cgi?id=74354 + + Reviewed by Gavin Barraclough. + + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::compileSoftModulo): + +2011-12-12 Andy Wingo <wingo@igalia.com> + + Simplify autotools configure.ac + https://bugs.webkit.org/show_bug.cgi?id=74312 + + Reviewed by Martin Robinson. + + * GNUmakefile.am: Add JSC_CPPFLAGS to javascriptcore_cppflags. + +2011-12-12 Filip Pizlo <fpizlo@apple.com> + + DFG GetByVal CSE incorrectly assumes that a non-matching PutByVal cannot clobber + https://bugs.webkit.org/show_bug.cgi?id=74329 + + Reviewed by Gavin Barraclough. + + * dfg/DFGPropagator.cpp: + (JSC::DFG::Propagator::getByValLoadElimination): + +2011-12-09 Alexander Pavlov <apavlov@chromium.org> + + WebKit does not enumerate over CSS properties in HTMLElement.style + https://bugs.webkit.org/show_bug.cgi?id=23946 + + Reviewed by Darin Adler. + + Add a few exports to follow the JSCSSStyleDeclaration.cpp changes, + introduce an std::sort() comparator function. + + * JavaScriptCore.exp: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * wtf/text/WTFString.h: + (WTF::codePointCompareLessThan): Used by std::sort() to sort properties. + +2011-12-12 Alexander Pavlov <apavlov@chromium.org> + + Unreviewed, build fix. + + Revert r102570 which broke SnowLeopard builders. + + * JavaScriptCore.exp: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * wtf/text/WTFString.h: + +2011-12-09 Alexander Pavlov <apavlov@chromium.org> + + WebKit does not enumerate over CSS properties in HTMLElement.style + https://bugs.webkit.org/show_bug.cgi?id=23946 + + Reviewed by Darin Adler. + + Add a few exports to follow the JSCSSStyleDeclaration.cpp changes, + introduce an std::sort() comparator function. + + * JavaScriptCore.exp: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * wtf/text/WTFString.h: + (WTF::codePointCompareLessThan): Used by std::sort() to sort properties. + +2011-12-12 Carlos Garcia Campos <cgarcia@igalia.com> + + Unreviewed. Fix make distcheck issues. + + * GNUmakefile.list.am: + +2011-12-11 Sam Weinig <sam@webkit.org> + + Fix another signed vs. unsigned warning + + * runtime/ArgList.h: + (JSC::MarkedArgumentBuffer::~MarkedArgumentBuffer): + +2011-12-11 Sam Weinig <sam@webkit.org> + + Fix a signed vs. unsigned warning. + + * runtime/ArgList.cpp: + (JSC::MarkedArgumentBuffer::slowAppend): + Cast inlineCapacity to an int to appease the warning. This is known OK + since inlineCapacity is defined to be 8. + +2011-12-11 Geoffrey Garen <ggaren@apple.com> + + Rolled out *another* debugging change I committed accidentally. + + Unreviewed. + + * Configurations/Base.xcconfig: + +2011-12-11 Geoffrey Garen <ggaren@apple.com> + + Rolled out a debug counter I committed accidentally. + + Unreviewed. + + * jit/JITStubs.cpp: + (JSC::arityCheckFor): + +2011-12-10 Geoffrey Garen <ggaren@apple.com> + + v8 benchmark takes 12-13 million function call slow paths due to extra arguments + https://bugs.webkit.org/show_bug.cgi?id=74244 + + Reviewed by Filip Pizlo. + + .arguments function of order the Reversed + + 10% speedup on v8-raytrace, 1.7% speedup on v8 overall, neutral on Kraken + and SunSpider. + + * bytecode/CodeBlock.h: + (JSC::CodeBlock::valueProfileForArgument): Clarified that the interface + to this function is an argument number. + + * bytecompiler/BytecodeGenerator.cpp: + (JSC::BytecodeGenerator::BytecodeGenerator): + (JSC::BytecodeGenerator::emitCall): + (JSC::BytecodeGenerator::emitConstruct): + (JSC::BytecodeGenerator::isArgumentNumber): Switched to using CallFrame + helper functions for computing offsets for arguments, rather than doing + the math by hand. + + Switched to iterating argument offsets backwards (--) instead of forwards (++). + + * bytecompiler/BytecodeGenerator.h: + (JSC::CallArguments::thisRegister): + (JSC::CallArguments::argumentRegister): + (JSC::CallArguments::registerOffset): Updated for arguments being reversed. + + * bytecompiler/NodesCodegen.cpp: Allocate arguments in reverse order. + + * dfg/DFGByteCodeParser.cpp: + (JSC::DFG::ByteCodeParser::getArgument): + (JSC::DFG::ByteCodeParser::setArgument): + (JSC::DFG::ByteCodeParser::flush): + (JSC::DFG::ByteCodeParser::addCall): + (JSC::DFG::ByteCodeParser::handleCall): + (JSC::DFG::ByteCodeParser::handleInlining): + (JSC::DFG::ByteCodeParser::handleMinMax): + (JSC::DFG::ByteCodeParser::handleIntrinsic): + (JSC::DFG::ByteCodeParser::parseBlock): + (JSC::DFG::ByteCodeParser::processPhiStack): Use abstract argument indices + that just-in-time convert to bytecode operands (i.e., indexes in the register + file) through helper functions. This means only one piece of code needs + to know how arguments are laid out in the register file. + + * dfg/DFGGraph.cpp: + (JSC::DFG::Graph::dump): Ditto. + + * dfg/DFGGraph.h: + (JSC::DFG::Graph::valueProfileFor): Ditto. + + * dfg/DFGJITCompiler.cpp: + (JSC::DFG::JITCompiler::compileFunction): The whole point of this patch: + Treat too many arguments as an arity match. + + * dfg/DFGOSRExit.h: + (JSC::DFG::OSRExit::variableForIndex): + (JSC::DFG::OSRExit::operandForIndex): Use helper functions, as above. + + * dfg/DFGOperands.h: + (JSC::DFG::operandToArgument): + (JSC::DFG::argumentToOperand): These are now the only two lines of code in + the DFG compiler that know how arguments are laid out in memory. + + (JSC::DFG::Operands::operand): + (JSC::DFG::Operands::setOperand): Use helper functions, as above. + + * dfg/DFGOperations.cpp: The whole point of this patch: + Treat too many arguments as an arity match. + + * dfg/DFGSpeculativeJIT32_64.cpp: + (JSC::DFG::SpeculativeJIT::emitCall): Use helper functions, as above. + + Also, don't tag the caller frame slot as a cell, because it's not a cell. + + * dfg/DFGSpeculativeJIT64.cpp: + (JSC::DFG::SpeculativeJIT::emitCall): Use helper functions, as above. + + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::compile): Use helper functions, as above. + + (JSC::DFG::SpeculativeJIT::checkArgumentTypes): Use already-computed + argument virtual register instead of recomputing by hand. + + * dfg/DFGSpeculativeJIT.h: + (JSC::DFG::SpeculativeJIT::callFrameSlot): + (JSC::DFG::SpeculativeJIT::argumentSlot): + (JSC::DFG::SpeculativeJIT::callFrameTagSlot): + (JSC::DFG::SpeculativeJIT::callFramePayloadSlot): + (JSC::DFG::SpeculativeJIT::argumentTagSlot): + (JSC::DFG::SpeculativeJIT::argumentPayloadSlot): Added a few helper + functions for dealing with callee arguments specifically. These still + build on top of our other helper functions, and have no direct knowledge + of how arguments are laid out in the register file. + + (JSC::DFG::SpeculativeJIT::resetCallArguments): + (JSC::DFG::SpeculativeJIT::addCallArgument): Renamed argumentIndex to + argumentOffset to match CallFrame naming. + + (JSC::DFG::SpeculativeJIT::valueSourceReferenceForOperand): Use helper + functions, as above. + + * interpreter/CallFrame.h: + (JSC::ExecState::argumentOffset): + (JSC::ExecState::argumentOffsetIncludingThis): + (JSC::ExecState::argument): + (JSC::ExecState::setArgument): + (JSC::ExecState::thisArgumentOffset): + (JSC::ExecState::thisValue): + (JSC::ExecState::setThisValue): + (JSC::ExecState::offsetFor): + (JSC::ExecState::hostThisRegister): + (JSC::ExecState::hostThisValue): Added a bunch of helper functions for + computing where an argument is in the register file. Anything in the + runtime that needs to access arguments should use these helpers. + + * interpreter/CallFrameClosure.h: + (JSC::CallFrameClosure::setThis): + (JSC::CallFrameClosure::setArgument): + (JSC::CallFrameClosure::resetCallFrame): This stuff is a lot simpler, now + that too many arguments counts as an arity match and doesn't require + preserving two copies of our arguments. + + * interpreter/Interpreter.cpp: + (JSC::Interpreter::slideRegisterWindowForCall): Only need to do something + special if the caller provided too few arguments. + + Key simplification: We never need to maintain two copies of our arguments + anymore. + + (JSC::eval): + (JSC::loadVarargs): Use helper functions. + + (JSC::Interpreter::unwindCallFrame): Updated for new interface. + + (JSC::Interpreter::execute): + (JSC::Interpreter::executeCall): + (JSC::Interpreter::executeConstruct): + (JSC::Interpreter::prepareForRepeatCall): Seriously, though: use helper + functions. + + (JSC::Interpreter::privateExecute): No need to check for stack overflow + when calling host functions because they have zero callee registers. + + (JSC::Interpreter::retrieveArguments): Explicitly tear off the arguments + object, since there's no special constructor for this anymore. + + * interpreter/Interpreter.h: Reduced the C++ re-entry depth because some + workers tests were hitting stack overflow in some of my testing. We should + make this test more exact in future. + + * interpreter/RegisterFile.h: Death to all runtime knowledge of argument + location that does not belong to the CallFrame class! + + * jit/JIT.cpp: + (JSC::JIT::privateCompile): I am a broken record and I use helper functions. + + Also, the whole point of this patch: Treat too many arguments as an arity match. + + * jit/JITCall32_64.cpp: + (JSC::JIT::compileLoadVarargs): + * jit/JITCall.cpp: + (JSC::JIT::compileLoadVarargs): Updated the argument copying math to use + helper functions, for backwards-correctness. Removed the condition + pertaining to declared argument count because, now that arguments are + always in just one place, this optimization is valid for all functions. + Standardized the if predicate for each line of the optimization. This might + fix a bug, but I couldn't get the bug to crash in practice. + + * jit/JITOpcodes32_64.cpp: + (JSC::JIT::emit_op_create_arguments): + (JSC::JIT::emit_op_get_argument_by_val): + (JSC::JIT::emitSlow_op_get_argument_by_val): + * jit/JITOpcodes.cpp: + (JSC::JIT::emit_op_create_arguments): + (JSC::JIT::emit_op_get_argument_by_val): + (JSC::JIT::emitSlow_op_get_argument_by_val): Removed cti_op_create_arguments_no_params + optimization because it's no longer an optimization, now that arguments + are always contiguous in a known location. + + Updated argument access opcode math for backwards-correctness. + + * jit/JITStubs.cpp: + (JSC::arityCheckFor): Updated just like slideRegisterWindowForCall. This + function is slightly different because it copies the call frame in + addition to the arguments. (In the Interpreter, the call frame is not + set up by this point.) + + (JSC::lazyLinkFor): The whole point of this patch: Treat too many + arguments as an arity match. + + (JSC::DEFINE_STUB_FUNCTION): Updated for new iterface to tearOff(). + + * jit/JITStubs.h: + * jit/SpecializedThunkJIT.h: + (JSC::SpecializedThunkJIT::loadDoubleArgument): + (JSC::SpecializedThunkJIT::loadCellArgument): + (JSC::SpecializedThunkJIT::loadInt32Argument): Use helper functions! They + build strong bones and teeth! + + * runtime/ArgList.cpp: + (JSC::ArgList::getSlice): + (JSC::MarkedArgumentBuffer::slowAppend): + * runtime/ArgList.h: + (JSC::MarkedArgumentBuffer::MarkedArgumentBuffer): + (JSC::MarkedArgumentBuffer::~MarkedArgumentBuffer): + (JSC::MarkedArgumentBuffer::at): + (JSC::MarkedArgumentBuffer::clear): + (JSC::MarkedArgumentBuffer::append): + (JSC::MarkedArgumentBuffer::removeLast): + (JSC::MarkedArgumentBuffer::last): + (JSC::ArgList::ArgList): + (JSC::ArgList::at): Updated for backwards-correctness. WTF::Vector doesn't + play nice with backwards-ness, so I changed to using manual allocation. + + Fixed a FIXME about not all values being marked in the case of out-of-line + arguments. I had to rewrite the loop anyway, and I didn't feel like + maintaining fidelity to its old bugs. + + * runtime/Arguments.cpp: + (JSC::Arguments::visitChildren): + (JSC::Arguments::copyToArguments): + (JSC::Arguments::fillArgList): + (JSC::Arguments::getOwnPropertySlotByIndex): + (JSC::Arguments::getOwnPropertySlot): + (JSC::Arguments::getOwnPropertyDescriptor): + (JSC::Arguments::putByIndex): + (JSC::Arguments::put): + (JSC::Arguments::tearOff): + * runtime/Arguments.h: + (JSC::Arguments::create): + (JSC::Arguments::Arguments): + (JSC::Arguments::argument): + (JSC::Arguments::finishCreation): Secondary benefit of this patch: deleted + lots of tricky code designed to maintain two different copies of function + arguments. Now that arguments are always contiguous in one place in memory, + this complexity can go away. + + Reduced down to one create function for the Arguments class, from three. + + Moved tearOff() into an out-of-line function because it's huge. + + Moved logic about whether to tear off eagerly into the Arguments class, + so we didn't have to duplicate it elsewhere. + + * runtime/JSActivation.cpp: + (JSC::JSActivation::JSActivation): + (JSC::JSActivation::visitChildren): Renamed m_numParametersMinusThis to + m_numCapturedArgs because if the value really were m_numParametersMinusThis + we would be marking too much. (We shouldn't mark 'this' because it can't + be captured.) Also, use helper functions. + + * runtime/JSActivation.h: + (JSC::JSActivation::tearOff): Use helper functions. + + * runtime/JSArray.cpp: + (JSC::JSArray::copyToArguments): + * runtime/JSArray.h: Use helper functions, as above. + +2011-12-10 Mark Hahnenberg <mhahnenberg@apple.com> + + JSC testapi is crashing on Windows + https://bugs.webkit.org/show_bug.cgi?id=74233 + + Reviewed by Sam Weinig. + + Same error we've encountered before where we are calling the wrong version of + visitChildren and objects that are still reachable aren't getting marked. + This problem will go away soon with the removal of vptrs for these sorts of + optimizations in favor of using the ClassInfo, but for now we can simply give + JSFinalObject a bogus virtual method that Visual Studio can't optimize away to + ensure that JSFinalObject will always have a unique vptr. We don't have to worry + about JSString or JSArray right now, which are the other two special cases for + visitChildren, since they already have their own virtual functions. + + * JavaScriptCore.exp: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * runtime/JSObject.cpp: + (JSC::JSFinalObject::vtableAnchor): + * runtime/JSObject.h: + +2011-12-10 Alexis Menard <alexis.menard@openbossa.org> + + Unused variable in YarrJIT.cpp. + https://bugs.webkit.org/show_bug.cgi?id=74237 + + Reviewed by Andreas Kling. + + Variable is set but not used so we can remove it. + + * yarr/YarrJIT.cpp: + (JSC::Yarr::YarrGenerator::generatePatternCharacterOnce): + +2011-12-09 Filip Pizlo <fpizlo@apple.com> + + DFG ArithMul power-of-two case does not check for overflow + https://bugs.webkit.org/show_bug.cgi?id=74230 + + Reviewed by Gavin Barraclough. + + Disabled power-of-2 peephole optimization for multiplication, because it was wrong, + and any attempt to fix it would likely introduce code bloat and register pressure. + + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::compileArithMul): + +2011-12-09 David Levin <levin@chromium.org> + + REGRESSION(r101863-r102042): Assertion hit: m_verifier.isSafeToUse() in RefCountedBase::ref in FunctionCodeBlock + https://bugs.webkit.org/show_bug.cgi?id=73886 + + Reviewed by Darin Adler. + + * runtime/SymbolTable.h: + (JSC::SharedSymbolTable::SharedSymbolTable): Added deprecatedTurnOffVerifier for + another JavaScriptObject, since JavaScriptCore objects allow use on multiple threads. + Bug 58091 is about changing these deprecated calls to something else but that something + else will still need to be in all of these places. + +2011-12-09 Konrad Piascik <kpiascik@rim.com> + + Remove unnecessary file DissasemblerARM.cpp from build system + https://bugs.webkit.org/show_bug.cgi?id=74184 + + Reviewed by Daniel Bates. + + * PlatformBlackBerry.cmake: + +2011-12-09 Filip Pizlo <fpizlo@apple.com> + + DFG's interpretation of rare case profiles should be frequency-based not count-based + https://bugs.webkit.org/show_bug.cgi?id=74170 + + Reviewed by Geoff Garen. + + DFG optimizes for rare cases only when the rare case counter is above some threshold + and it also constitutes a large enough fraction of total function executions. Also + added some minor debug logic. + + * bytecode/CodeBlock.cpp: + (JSC::CodeBlock::CodeBlock): + * bytecode/CodeBlock.h: + (JSC::CodeBlock::likelyToTakeSlowCase): + (JSC::CodeBlock::couldTakeSlowCase): + (JSC::CodeBlock::likelyToTakeSpecialFastCase): + (JSC::CodeBlock::likelyToTakeDeepestSlowCase): + (JSC::CodeBlock::likelyToTakeAnySlowCase): + (JSC::CodeBlock::executionEntryCount): + * dfg/DFGByteCodeParser.cpp: + (JSC::DFG::ByteCodeParser::makeSafe): + (JSC::DFG::ByteCodeParser::makeDivSafe): + (JSC::DFG::ByteCodeParser::handleCall): + (JSC::DFG::ByteCodeParser::parseBlock): + * dfg/DFGDriver.cpp: + (JSC::DFG::compile): + * jit/JIT.cpp: + (JSC::JIT::privateCompile): + * runtime/Heuristics.cpp: + (JSC::Heuristics::initializeHeuristics): + * runtime/Heuristics.h: + +2011-12-09 Oliver Hunt <oliver@apple.com> + + PutByValAlias unnecessarily clobbers GetIndexedPropertyStorage + https://bugs.webkit.org/show_bug.cgi?id=74223 + + Reviewed by Geoffrey Garen. + + Don't clobber GetIndexedPropertyStorage when we see PutByValAlias + + * dfg/DFGPropagator.cpp: + (JSC::DFG::Propagator::getIndexedPropertyStorageLoadElimination): + +2011-12-09 David Levin <levin@chromium.org> + + Hash* iterators should allow comparison between const and const versions. + https://bugs.webkit.org/show_bug.cgi?id=73370 + + Reviewed by Darin Adler. + + * wtf/HashTable.h: Add the operators needed to do this. + (WTF::HashTableConstIterator::operator==): + (WTF::HashTableConstIterator::operator!=): + (WTF::HashTableIterator::operator==): + (WTF::HashTableIterator::operator!=): + (WTF::operator==): + (WTF::operator!=): + +2011-12-09 Michael Saboff <msaboff@apple.com> + + YARR: Multi-character read optimization for 8bit strings + https://bugs.webkit.org/show_bug.cgi?id=74191 + + Reviewed by Oliver Hunt. + + Changed generatePatternCharacterOnce to generate + code for 1 to 4 characters in the 8 bit case. + This is worth 29% improvement on SunSpider regexp-dna test. + It provides no benefit to v8-regexp. + + * yarr/YarrJIT.cpp: + (JSC::Yarr::YarrGenerator::generatePatternCharacterOnce): + (JSC::Yarr::YarrGenerator::generate): Spelling fix in comment. + +2011-12-09 David Levin <levin@chromium.org> + + Regression(r53595): Sync xhr requests in workers aren't terminated on worker close. + https://bugs.webkit.org/show_bug.cgi?id=71695 + + Reviewed by Zoltan Herczeg. + + * wtf/MessageQueue.h: + (WTF::MessageQueue::tryGetMessageIgnoringKilled): Added a way to get messages + even after the queue has been killed. This is useful when one wants to + kill a queue but then go through it to run clean up tasks from it. + +2011-12-09 Adrienne Walker <enne@google.com> + + Fix HashMap<..., OwnPtr<...> >::add compilation errors + https://bugs.webkit.org/show_bug.cgi?id=74159 + + Reviewed by Darin Adler. + + Add a constructor to OwnPtr that takes the empty value (nullptr_t) + from HashTraits so that this function can compile. + + * wtf/OwnPtr.h: + (WTF::OwnPtr::OwnPtr): + +2011-12-09 Oliver Hunt <oliver@apple.com> + + Avoid reloading storage pointer for indexed properties unnecessarily + https://bugs.webkit.org/show_bug.cgi?id=74136 + + Reviewed by Filip Pizlo. + + Add a node to represent loading property storage for indexed properties. + This allows us to reduce code generated for sequential access of arrays, + strings, etc. This results in up to 5% improvement in code that is + very heavy on indexed reads, such as matrix operations in typed arrays + and 20% faster on microbenchmarks. + + Currently this is only supported by GetByVal and other similar indexed reads. + + * bytecode/PredictedType.h: + (JSC::isFixedIndexedStorageObjectPrediction): + * dfg/DFGAbstractState.cpp: + (JSC::DFG::AbstractState::execute): + * dfg/DFGByteCodeParser.cpp: + (JSC::DFG::ByteCodeParser::handleIntrinsic): + (JSC::DFG::ByteCodeParser::parseBlock): + * dfg/DFGNode.h: + * dfg/DFGPropagator.cpp: + (JSC::DFG::Propagator::propagateNodePredictions): + (JSC::DFG::Propagator::fixupNode): + (JSC::DFG::Propagator::getIndexedPropertyStorageLoadElimination): + (JSC::DFG::Propagator::performNodeCSE): + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::compileGetCharCodeAt): + (JSC::DFG::SpeculativeJIT::compileGetByValOnString): + (JSC::DFG::SpeculativeJIT::compileGetByValOnByteArray): + (JSC::DFG::SpeculativeJIT::compileGetByValOnIntTypedArray): + (JSC::DFG::SpeculativeJIT::compileGetByValOnFloatTypedArray): + (JSC::DFG::SpeculativeJIT::compileGetIndexedPropertyStorage): + * dfg/DFGSpeculativeJIT.h: + * dfg/DFGSpeculativeJIT32_64.cpp: + (JSC::DFG::SpeculativeJIT::compile): + * dfg/DFGSpeculativeJIT64.cpp: + (JSC::DFG::SpeculativeJIT::compile): + +2011-12-08 Fady Samuel <fsamuel@chromium.org> + + [Chromium] Enable viewport metatag + https://bugs.webkit.org/show_bug.cgi?id=73495 + + Reviewed by Darin Fisher. + + * wtf/Platform.h: Added ENABLE(VIEWPORT) tag. + +2011-12-08 Adam Klein <adamk@chromium.org> + + Use HashMap<Node*, OwnPtr<...>> in ChildListMutationScope + https://bugs.webkit.org/show_bug.cgi?id=73964 + + Reviewed by Darin Adler. + + * wtf/HashTraits.h: Add passOut(std::nullptr_t) to allow callers to use HashMap::take on a HashMap of OwnPtrs. + +2011-12-08 Thouraya ANDOLSI <thouraya.andolsi@st.com> + + https://bugs.webkit.org/show_bug.cgi?id=74005 + fix unaligned access memory in generatePatternCharacterOnce function + for SH4 platforms. + + Reviewed by Gavin Barraclough. + + * assembler/MacroAssemblerARM.h: + (JSC::MacroAssemblerARM::load16Unaligned): + * assembler/MacroAssemblerARMv7.h: + (JSC::MacroAssemblerARMv7::load16Unaligned): + * assembler/MacroAssemblerMIPS.h: + (JSC::MacroAssemblerMIPS::load16Unaligned): + * assembler/MacroAssemblerSH4.h: + (JSC::MacroAssemblerSH4::lshift32): + (JSC::MacroAssemblerSH4::load8): + (JSC::MacroAssemblerSH4::load16): + (JSC::MacroAssemblerSH4::load16Unaligned): + (JSC::MacroAssemblerSH4::branch8): + * assembler/MacroAssemblerX86Common.h: + (JSC::MacroAssemblerX86Common::load16Unaligned): + * jit/JIT.h: + * yarr/YarrJIT.cpp: + (JSC::Yarr::YarrGenerator::generatePatternCharacterOnce): + +2011-12-08 Michael Saboff <msaboff@apple.com> + + Add 8 bit paths for StringTypeAdapter classes + https://bugs.webkit.org/show_bug.cgi?id=73882 + + Reviewed by Darin Adler. + + Added is8Bit() method and writeTo(LChar*) methods + to StringTypeAdapter<> classes. The writeTo(LChar*) + method can be used if is8Bit() returns true. The + non-native 8 bit classes contain ASSERT(is8Bit()) + in their writeTo(LChar*). + + Updated all of the various versions of tryMakeString() to + use 8 bit processing in the updated StringTypeAdapter<> + classes. + + This has slight if any performance improvement on kraken. + + * runtime/UStringConcatenate.h: + * wtf/text/StringConcatenate.h: + (WTF::tryMakeString): + * wtf/text/StringOperators.h: + (WTF::StringAppend::is8Bit): + (WTF::StringAppend::writeTo): + +2011-12-07 Filip Pizlo <fpizlo@apple.com> + + DFG CSE should know that CheckFunction is pure + https://bugs.webkit.org/show_bug.cgi?id=74044 + + Reviewed by Oliver Hunt. + + Possible slight win on V8, no regressions. + + * dfg/DFGPropagator.cpp: + (JSC::DFG::Propagator::checkFunctionElimination): + +2011-12-07 Michael Saboff <msaboff@apple.com> + + StringBuilderTest.Append and StringBuilderTest.ToStringPreserveCapacity are failing. + https://bugs.webkit.org/show_bug.cgi?id=73995 + + Reviewed by Geoffrey Garen. + + Problem was that a call to characters on an StringImpl associated + with a StringBuilder that is being appended to gets stale. + Added a new m_valid16BitShadowlen that keeps the length of + the 16 bit shadow that has been upconverted or will be up converted + with the first getCharacters(). When StringBuilder::characters or + ::reifyString is called, further characters are upconverted if + we have a shadow16bit copy and the m_valid16BitShadowlen is updated. + + * JavaScriptCore.exp: + * wtf/text/StringBuilder.cpp: + (WTF::StringBuilder::reifyString): + * wtf/text/StringBuilder.h: + (WTF::StringBuilder::StringBuilder): + (WTF::StringBuilder::characters): + (WTF::StringBuilder::clear): Cleaned up as part of the change. + * wtf/text/StringImpl.cpp: + (WTF::StringImpl::getData16SlowCase): + (WTF::StringImpl::upconvertCharacters): + * wtf/text/StringImpl.h: + +2011-12-07 Filip Pizlo <fpizlo@apple.com> + + Compare and Swap should be enabled on ARMv7 + https://bugs.webkit.org/show_bug.cgi?id=74023 + + Reviewed by Geoff Garen. + + Implemented weakCompareAndSwap in terms of LDREX/STREX and enabled PARALLEL_GC. + It gives the expected speed-up on multi-core ARMv7 devices. + + * wtf/Atomics.h: + (WTF::weakCompareAndSwap): + * wtf/Platform.h: + +2011-12-07 Filip Pizlo <fpizlo@apple.com> + + DFG CSE is overzealous with GetByVal + https://bugs.webkit.org/show_bug.cgi?id=74042 + + Reviewed by Oliver Hunt. + + Made sure that the purity of GetByVal and the limited-clobber-itude of PutByVal + is tested in all places that matter. + + * dfg/DFGPropagator.cpp: + (JSC::DFG::Propagator::byValIsPure): + (JSC::DFG::Propagator::clobbersWorld): + (JSC::DFG::Propagator::getByValLoadElimination): + (JSC::DFG::Propagator::checkStructureLoadElimination): + (JSC::DFG::Propagator::getByOffsetLoadElimination): + (JSC::DFG::Propagator::getPropertyStorageLoadElimination): + (JSC::DFG::Propagator::performNodeCSE): + +2011-12-07 Sheriff Bot <webkit.review.bot@gmail.com> + + Unreviewed, rolling out r102267. + http://trac.webkit.org/changeset/102267 + https://bugs.webkit.org/show_bug.cgi?id=74032 + + Breaks build on Chromium Mac Debug (Requested by aklein on + #webkit). + + * wtf/HashTraits.h: + +2011-12-07 Adam Klein <adamk@chromium.org> + + Use HashMap<Node*, OwnPtr<...>> in ChildListMutationScope + https://bugs.webkit.org/show_bug.cgi?id=73964 + + Reviewed by Ryosuke Niwa. + + * wtf/HashTraits.h: Add passOut(std::nullptr_t) to allow callers to use HashMap::take on an entry whose value is null. + +2011-12-07 Filip Pizlo <fpizlo@apple.com> + + Non-Mac devices should benefit from a larger heap + https://bugs.webkit.org/show_bug.cgi?id=74015 + + Reviewed by Geoff Garen. + + Removed the ENABLE(LARGE_HEAP) option from Platform.h, since it was only used in + Heap.cpp, and got in the way of having more granular, per-platform control over + what the heap size should be. Bumped the heap size to 8MB on iOS (was 512KB). + + * heap/Heap.cpp: + (JSC::GCTimer::heapSizeForHint): + * wtf/Platform.h: + +2011-11-30 Simon Hausmann <simon.hausmann@nokia.com> + + [Qt] V8 build fixes. + + Reviewed by Tor Arne Vestbø. + + * yarr/yarr.pri: Don't rely on Source/JavaScriptCore being in + VPATH. Prefix SOURCES correctly and make sure that runtime/ is + in the include search path when building with v8. + +2011-12-06 Filip Pizlo <fpizlo@apple.com> + + Zapping a block that is Marked leads to dead objects being mistaken for live ones + https://bugs.webkit.org/show_bug.cgi?id=73982 + + Reviewed by Geoff Garen. + + Changed the zapping code to ignore blocks that are Marked or Zapped. Additionally, + the code asserts that: + + - If we zap a Marked or Zapped block then the free list is empty, because this + can only happen if the block was never free-listed. + + - Zapping can only happen for Marked, Zapped, or FreeListed blocks, since Allocated + blocks are those that cannot be referred to by SizeClass::currentBlock (since + SizeClass::currentBlock only refers to blocks that are candidates for allocation, + and Allocated blocks are those who have been exhausted by allocation and will not + be allocated from again), and New blocks cannot be referred to by anything except + during a brief window inside the allocation slow-path. + + * heap/MarkedBlock.cpp: + (JSC::MarkedBlock::zapFreeList): + +2011-12-06 Filip Pizlo <fpizlo@apple.com> + + DFG 32_64 call linking does not handle non-cell callees correctly + https://bugs.webkit.org/show_bug.cgi?id=73965 + + Reviewed by Sam Weinig. + + * dfg/DFGSpeculativeJIT32_64.cpp: + (JSC::DFG::SpeculativeJIT::emitCall): + +2011-12-06 Sam Weinig <sam@webkit.org> + + Remove unintentional type name shadowing in the Interpreter + https://bugs.webkit.org/show_bug.cgi?id=73963 + + Reviewed by Oliver Hunt. + + * interpreter/Interpreter.cpp: + (JSC::Interpreter::prepareForRepeatCall): Replace the parameter name FunctionExecutable, + which shadows the FunctionExecutable type name, with functionExecutable. + +2011-12-06 Michael Saboff <msaboff@apple.com> + + r102146 from 73875 broke fast/js/encode-URI-test.html + https://bugs.webkit.org/show_bug.cgi?id=73950 + + Reviewed by Gavin Barraclough. + + * runtime/JSGlobalObjectFunctions.cpp: + (JSC::globalFuncUnescape): Restructured to handle + the %uHHHH case to output the resulting character + and continue so that a failure in finding 4 hex + digits will fall through and output the '%'. + Due to style check, changed the temporary + character variable to a more descriptive name. + +2011-12-06 Filip Pizlo <fpizlo@apple.com> + + GC zapping logic could benefit from some more assertions + https://bugs.webkit.org/show_bug.cgi?id=73947 + + Reviewed by Gavin Barraclough. + + - If you're in a zapped block and you're zapped, then your mark bit should + never be set. + + - If you're being marked, then you should never be zapped. + + * heap/MarkedBlock.h: + (JSC::MarkedBlock::isLive): + * runtime/Structure.h: + (JSC::MarkStack::internalAppend): + +2011-12-06 Oliver Hunt <oliver@apple.com> + + Don't allocate register in typedarray control flow + https://bugs.webkit.org/show_bug.cgi?id=73944 + + Reviewed by Gavin Barraclough. + + Move a temporary allocation outside of control flow. + + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::compileGetByValOnFloatTypedArray): + +2011-12-06 Gavin Barraclough <barraclough@apple.com> + + https://bugs.webkit.org/show_bug.cgi?id=68328 + The generator and intrinsic fields in HashTableValue/HashEntry and associated structures and methods are redundant + + Reviewed by Geoff Garen. + + Move the instrinsic enum out of the DFG, into runtime. Add entires for all host functions + that have an intrinsic in the form of a generated thunk. Remove the thunk pointer from the + hashtable, and make Intrinsic field no longer ifdef on JIT/DFG. In getHostFunction select + a thunk genertaor to use based on the Intrinsic. + + * JavaScriptCore.xcodeproj/project.pbxproj: + * create_hash_table: + * dfg/DFGByteCodeParser.cpp: + (JSC::DFG::ByteCodeParser::handleCall): + (JSC::DFG::ByteCodeParser::handleIntrinsic): + * dfg/DFGCapabilities.h: + * dfg/DFGIntrinsic.h: Removed. + * jit/JITStubs.cpp: + (JSC::JITThunks::hostFunctionStub): + * jit/JITStubs.h: + * runtime/Executable.cpp: + (JSC::ExecutableBase::intrinsic): + (JSC::NativeExecutable::intrinsic): + * runtime/Executable.h: + (JSC::ExecutableBase::intrinsicFor): + (JSC::NativeExecutable::create): + (JSC::NativeExecutable::finishCreation): + * runtime/Intrinsic.h: Copied from Source/JavaScriptCore/dfg/DFGIntrinsic.h. + * runtime/JSGlobalData.cpp: + (JSC::thunkGeneratorForIntrinsic): + (JSC::JSGlobalData::getHostFunction): + * runtime/JSGlobalData.h: + * runtime/Lookup.cpp: + (JSC::HashTable::createTable): + (JSC::setUpStaticFunctionSlot): + * runtime/Lookup.h: + (JSC::HashEntry::initialize): + (JSC::HashEntry::intrinsic): + +2011-12-06 Michael Saboff <msaboff@apple.com> + + Add 8 bit paths to global object functions + https://bugs.webkit.org/show_bug.cgi?id=73875 + + Added 8 bit paths for converions methods. + + This is worth 1.5% on kraken audio-oscillator, + 1.6% on stanford-crypto-ccm and 2.5% on + stanford-crypto-sha256-iterative. See bug for + a full report. + + Reviewed by Oliver Hunt. + + * runtime/JSGlobalObjectFunctions.cpp: + (JSC::decode): Split into a templated helper. + (JSC::parseInt): Split into a templated helper. + (JSC::parseFloat): Added an 8 bit path + (JSC::globalFuncEscape): Added 8 bit path + (JSC::globalFuncUnescape): Added 8 bit path + * runtime/JSStringBuilder.h: + (JSC::JSStringBuilder::append): New append for LChar + * wtf/text/StringBuilder.h: + (WTF::StringBuilder::append): New append for LChar + +2011-11-21 Balazs Kelemen <kbalazs@webkit.org> + + Enable ParallelJobs by default + https://bugs.webkit.org/show_bug.cgi?id=70032 + + Reviewed by Zoltan Herczeg. + + According to measurements on Mac and Linux it is a + considerable speedup for SVG on multicore. + + Remove the ENABLE(PARALLEL_JOBS) guard. + Fix build on Windows and Chromium. + + * JavaScriptCore.gypi: Add the files to the build. It was + missing for the gyp build system. + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + Export symbols. + * wtf/ParallelJobs.h: + * wtf/ParallelJobsGeneric.cpp: + (WTF::ParallelEnvironment::ParallelEnvironment): + (WTF::ParallelEnvironment::execute): + Deinline these to avoid exporting a lot of symbols. + These are non-trivial and called only once on a given object + so it doesn't seems to be worthwile to inline them. + Additionally fix a signed-unsigned comparison in the constructor. + * wtf/ParallelJobsGeneric.h: + * wtf/Platform.h: + +2011-12-06 Simon Hausmann <simon.hausmann@nokia.com> + + [Qt] build-jsc script doesn't work + https://bugs.webkit.org/show_bug.cgi?id=73910 + + Reviewed by Tor Arne Vestbø. + + * JavaScriptCore.pro: Build WTF before JavaScriptCore and JSC + (moved from top-level WebKit.pro). Also add v8 scopes to only build + WTF during v8 builds. + +2011-12-05 Anders Carlsson <andersca@apple.com> + + Add HashMap::keys() and HashMap::values() for easy iteration of hash map keys and values in C++11. + + Reviewed by Darin Adler. + + * wtf/HashMap.h: + +2011-12-05 Michael Saboff <msaboff@apple.com> + + Create StringImpl::empty() as an 8 bit string + https://bugs.webkit.org/show_bug.cgi?id=73871 + + Reviewed by Oliver Hunt. + + * wtf/text/StringStatics.cpp: + (WTF::StringImpl::empty): Changed to be an 8 bit string. + +2011-12-05 Darin Adler <darin@apple.com> + + Convert JSClassRef to use HashMap<OwnPtr> + https://bugs.webkit.org/show_bug.cgi?id=73780 + + Reviewed by Andreas Kling. + + * API/JSCallbackObjectFunctions.h: + (JSC::JSCallbackObject::getOwnPropertyNames): Use get() on the hash map + entries because the hash map now has an OwnPtr instead of a raw pointer. + + * API/JSClassRef.cpp: + (OpaqueJSClass::OpaqueJSClass): No need to initialize m_staticValues and + m_staticFunctions since they are now OwnPtr. Use adoptPtr when allocating. + Removed the code that gets and deletes existing entries, and just use set, + which now handles deletion automatically due to it being OwnPtr. + (OpaqueJSClass::~OpaqueJSClass): Replaced code to do all the deletion + with assertion-only NDEBUG-only code. + (OpaqueJSClassContextData::OpaqueJSClassContextData): Use adoptPtr when + allocating. Use OwnPtr when adding. Removed unneeded code to set + staticValues and staticFunctions to 0. Removed unneeded destructor. + (OpaqueJSClass::staticValues): Added get call. Also removed unneeded local. + (OpaqueJSClass::staticFunctions): Ditto. + (OpaqueJSClass::prototype): Added use of adoptPtr. + + * API/JSClassRef.h: Made the static values and static functions tables + use OwnPtr for the entries. Also used OwnPtr for the pointers to the + tables themselves. Also removed ~OpaqueJSClassContextData(), letting + the compiler generate it. + +2011-12-05 Oliver Hunt <oliver@apple.com> + + Land uncommitted bit of float array support + https://bugs.webkit.org/show_bug.cgi?id=73873 + + Reviewed by Filip Pizlo. + + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::compileGetByValOnFloatTypedArray): + +2011-12-05 Benjamin Poulain <benjamin@webkit.org> + + Update String::containsOnlyASCII() to handle 8 bits strings + https://bugs.webkit.org/show_bug.cgi?id=73799 + + Reviewed by Darin Adler. + + Implement String::containsOnlyASCII() so that it does not + call String::characters(). + + * wtf/text/WTFString.h: + (WTF::String::containsOnlyASCII): + +2011-12-05 Filip Pizlo <fpizlo@apple.com> + + Unreviewed build fix for non-DFG platforms. + + * dfg/DFGRepatch.h: + +2011-12-05 Filip Pizlo <fpizlo@apple.com> + + Old JIT emits 32-bit offsets for put_by_id but sometimes patches them as if they + were compact offsets + https://bugs.webkit.org/show_bug.cgi?id=73861 + + Reviewed by Gavin Barraclough. + + * jit/JITPropertyAccess32_64.cpp: + (JSC::JIT::resetPatchPutById): + +2011-12-05 Filip Pizlo <fpizlo@apple.com> + + Unreviewed, build fixes for ARM. + + * assembler/AbstractMacroAssembler.h: + (JSC::AbstractMacroAssembler::unreachableForPlatform): + * assembler/MacroAssemblerARMv7.h: + (JSC::MacroAssemblerARMv7::loadDouble): + (JSC::MacroAssemblerARMv7::loadFloat): + (JSC::MacroAssemblerARMv7::storeFloat): + (JSC::MacroAssemblerARMv7::convertFloatToDouble): + (JSC::MacroAssemblerARMv7::convertDoubleToFloat): + +2011-12-05 Benjamin Poulain <benjamin@webkit.org> + + Update String::containsOnlyLatin1() to avoid converting to 16 bits + https://bugs.webkit.org/show_bug.cgi?id=73797 + + Reviewed by Andreas Kling. + + When the String use 8bits StringImpl, there is no need to iterate + over the string. + + The function charactersAreAllLatin1() is removed because it is not + used anywhere. + + * wtf/text/WTFString.h: + (WTF::String::containsOnlyLatin1): + +2011-12-05 Michael Saboff <msaboff@apple.com> + + 8 bit string work slows down Kraken json-stringify-tinderbox + https://bugs.webkit.org/show_bug.cgi?id=73457 + + Added 8 bit path to StringBuilder. StringBuilder starts + assuming 8 bit contents and gets converted to 16 bit upon + seeing the first 16 bit character or string. Split + appendUninitialiezed into an inlined fast and function call + slow case. + + Factored out the processing of the UString argument from + Stringifier::appendQuotedString() to a static templated function + based on character size. + + This change eliminates 5% of the 7% slowdown to json-stringify-tinderbox. + This change introduces a 4.8% slowdown to json-parse-financial. + This slowdown will be addressed in a subsequent patch to StringImpl::equal. + + Reviewed by Oliver Hunt. + + * runtime/JSONObject.cpp: + (JSC::appendStringToUStringBuilder): + (JSC::Stringifier::appendQuotedString): + * wtf/text/StringBuilder.cpp: + (WTF::StringBuilder::resize): + (WTF::StringBuilder::allocateBuffer): + (WTF::StringBuilder::allocateBufferUpConvert): + (WTF::LChar): + (WTF::UChar): + (WTF::StringBuilder::reserveCapacity): + (WTF::StringBuilder::appendUninitialized): + (WTF::StringBuilder::appendUninitializedSlow): + (WTF::StringBuilder::append): + (WTF::StringBuilder::shrinkToFit): + * wtf/text/StringBuilder.h: + (WTF::StringBuilder::StringBuilder): + (WTF::StringBuilder::append): + (WTF::StringBuilder::operator[]): + (WTF::StringBuilder::characters8): + (WTF::StringBuilder::characters16): + (WTF::StringBuilder::charactersBlah): + (WTF::LChar): + (WTF::UChar): + +2011-12-01 Gavin Barraclough <barraclough@apple.com> + + https://bugs.webkit.org/show_bug.cgi?id=73624 + JIT + INTERPRETER builds are broken + + Reviewed by Geoff Garen, Sam Weinig. + + These don't fallback to the interpreter correctly. + Thunk creation assumes that is the JIT is compiled in, then it is enabled. + + * jit/JITStubs.cpp: + (JSC::JITThunks::JITThunks): + * runtime/Executable.h: + (JSC::NativeExecutable::create): + (JSC::NativeExecutable::finishCreation): + * runtime/JSGlobalData.cpp: + (JSC::JSGlobalData::getHostFunction): + +2011-12-05 Zoltan Herczeg <zherczeg@webkit.org> + + MacroAssemblerSH4 does not implement readCallTarget + https://bugs.webkit.org/show_bug.cgi?id=73434 + + Reviewed by Csaba Osztrogonác. + + * assembler/MacroAssemblerSH4.h: Support for SH4. + (JSC::MacroAssemblerSH4::readCallTarget): + * assembler/SH4Assembler.h: + (JSC::SH4Assembler::readCallTarget): + +2011-12-04 Filip Pizlo <fpizlo@apple.com> + + DFG should optimize strict equality + https://bugs.webkit.org/show_bug.cgi?id=73764 + + Reviewed by Oliver Hunt. + + 1% speed-up on V8. + + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::compare): + (JSC::DFG::SpeculativeJIT::compileStrictEqForConstant): + (JSC::DFG::SpeculativeJIT::compileStrictEq): + * dfg/DFGSpeculativeJIT.h: + * dfg/DFGSpeculativeJIT32_64.cpp: + (JSC::DFG::SpeculativeJIT::compileIntegerCompare): + (JSC::DFG::SpeculativeJIT::compileDoubleCompare): + (JSC::DFG::SpeculativeJIT::compile): + * dfg/DFGSpeculativeJIT64.cpp: + (JSC::DFG::SpeculativeJIT::compileIntegerCompare): + (JSC::DFG::SpeculativeJIT::compileDoubleCompare): + (JSC::DFG::SpeculativeJIT::compile): + +2011-12-03 Darin Adler <darin@apple.com> + + Use HashMap<OwnPtr> for ScriptSampleRecordMap + https://bugs.webkit.org/show_bug.cgi?id=73758 + + Reviewed by Andreas Kling. + + * bytecode/SamplingTool.cpp: + (JSC::SamplingTool::notifyOfScope): Added adoptPtr. + (JSC::SamplingTool::dump): Added get. + * bytecode/SamplingTool.h: Changed the value type of ScriptSampleRecordMap to be OwnPtr. + +2011-12-03 Darin Adler <darin@apple.com> + + Use HashMap<OwnPtr> for the opaqueJSClassData map + https://bugs.webkit.org/show_bug.cgi?id=73759 + + Reviewed by Andreas Kling. + + * API/JSClassRef.cpp: + (OpaqueJSClass::contextData): Update types. + * runtime/JSGlobalData.cpp: + (JSC::JSGlobalData::~JSGlobalData): Add an explicit clear of opaqueJSClassData to keep the + timing the same. If we didn't care about the order of operations, we could remove this, too. + * runtime/JSGlobalData.h: Use OwnPtr instead of raw pointer for the mapped type in the + opaqueJSClassData map. + +2011-12-03 Darin Adler <darin@apple.com> + + Change HashMap implementation to use the pass type and peek type from traits for the mapped value + https://bugs.webkit.org/show_bug.cgi?id=72474 + + Reviewed by Anders Carlsson. + + * wtf/HashMap.h: Added ReferenceTypeMaker struct template. Get PassInType, PassOutType, + and PeekType from the traits of the mapped value instead of hard-coding them here. + Changed inlineAdd to take a reference to the PassInType instead of the PassInType itself, + to accomodate a PassInType that can't be copied. Use the store, peek, and passOut + functions from the traits as well. + + * wtf/HashTraits.h: Updated GenericHashTraits and HashTraits for OwnPtr to include + PassInType, PassOutType, PeekType, store, passOut, and peek. Before this, the file had + an earlier version that was just PassType, PeekType, pass, and peek. Also commented + the HashTraits for RefPtr to foreshadow some work we can do there. + + * wtf/RefPtrHashMap.h: Same changes as HashMap.h. + +2011-12-02 David Levin <levin@chromium.org> + + Rename WTF class from TemporarilyChange to TemporaryChange. + https://bugs.webkit.org/show_bug.cgi?id=73479 + + Reviewed by Eric Seidel. + + * JavaScriptCore.gypi: + * JavaScriptCore.vcproj/WTF/WTF.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * wtf/TemporaryChange.h: Renamed from Source/JavaScriptCore/wtf/TemporarilyChange.h. + (WTF::TemporaryChange::TemporaryChange): + (WTF::TemporaryChange::~TemporaryChange): + +2011-12-02 Mark Hahnenberg <mhahnenberg@apple.com> + + REGRESSION (r99754): All layout tests crash on Windows + https://bugs.webkit.org/show_bug.cgi?id=72305 + + Reviewed by Geoffrey Garen. + + Fixes a crash in release builds on Windows. Windows was optimizing the out-of-line virtual destructor in + JSFunction away, which left it with no virtual functions. Its vtable ptr was then identical to that of + a different class, therefore the optimization in the visitChildren helper function in MarkedStack.cpp was calling an + incorrect version of visitChildren on the object, which left its children unmarked, causing them to be + collected when they were still reachable. + + * runtime/JSFunction.cpp: + (JSC::JSFunction::vtableAnchor): Add a virtual function to JSFunction that Visual Studio can't optimize away. + * runtime/JSFunction.h: + * runtime/JSGlobalData.cpp: + (JSC::JSGlobalData::storeVPtrs): Add checks to make sure that all virtual pointers that we rely on for optimization + purposes are distinct from one another. + +2011-12-02 Oliver Hunt <oliver@apple.com> + + Improve float array support in the DFG JIT + https://bugs.webkit.org/show_bug.cgi?id=73722 + + Reviewed by Gavin Barraclough. + + Add basic support for float typed arrays in JSC. This is currently + less optimal than it could be in the following ways: + * float32Array1[0] = float32Array2[0] (eg. an element by element copy) + promotes float to double and then back to float. + * float64Array[0] will always perform NaN tests in order to prevent + signalling NaNs from entering the engine. + + We also don't support Float32Array on ARMv7 + + * assembler/MacroAssemblerARMv7.h: + (JSC::MacroAssemblerARMv7::loadDouble): + (JSC::MacroAssemblerARMv7::loadFloat): + (JSC::MacroAssemblerARMv7::storeDouble): + (JSC::MacroAssemblerARMv7::storeFloat): + (JSC::MacroAssemblerARMv7::convertFloatToDouble): + (JSC::MacroAssemblerARMv7::convertDoubleToFloat): + * assembler/MacroAssemblerX86Common.h: + (JSC::MacroAssemblerX86Common::loadDouble): + (JSC::MacroAssemblerX86Common::loadFloat): + (JSC::MacroAssemblerX86Common::storeDouble): + (JSC::MacroAssemblerX86Common::storeFloat): + (JSC::MacroAssemblerX86Common::convertDoubleToFloat): + (JSC::MacroAssemblerX86Common::convertFloatToDouble): + * assembler/X86Assembler.h: + (JSC::X86Assembler::cvtsd2ss_rr): + (JSC::X86Assembler::cvtss2sd_rr): + (JSC::X86Assembler::movsd_rm): + (JSC::X86Assembler::movss_rm): + (JSC::X86Assembler::movsd_mr): + (JSC::X86Assembler::movss_mr): + * dfg/DFGAbstractState.cpp: + (JSC::DFG::AbstractState::execute): + * dfg/DFGNode.h: + (JSC::DFG::Node::shouldSpeculateFloat32Array): + * dfg/DFGPropagator.cpp: + (JSC::DFG::Propagator::propagateNodePredictions): + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::compilePutByValForIntTypedArray): + (JSC::DFG::SpeculativeJIT::compileGetByValOnFloatTypedArray): + (JSC::DFG::SpeculativeJIT::compilePutByValForFloatTypedArray): + * dfg/DFGSpeculativeJIT.h: + * dfg/DFGSpeculativeJIT32_64.cpp: + (JSC::DFG::SpeculativeJIT::compile): + * dfg/DFGSpeculativeJIT64.cpp: + (JSC::DFG::SpeculativeJIT::fillSpeculateIntInternal): + (JSC::DFG::SpeculativeJIT::compile): + +2011-12-02 Sheriff Bot <webkit.review.bot@gmail.com> + + Unreviewed, rolling out r101801. + http://trac.webkit.org/changeset/101801 + https://bugs.webkit.org/show_bug.cgi?id=73667 + + Build is still broken (Requested by Ossy on #webkit). + + * assembler/SH4Assembler.h: + +2011-12-01 Darin Adler <darin@apple.com> + + Prepare to deploy pass and peek types in the HashMap class + https://bugs.webkit.org/show_bug.cgi?id=73477 + + Reviewed by Adam Roben. + + This patch adds private typedefs inside the HashMap class, + and uses them as appropriate. A future patch will actually + tie those typedefs to hash traits, which will allow us to + make HashMap work with OwnPtr mapped values and to optimize + how HashMap works with RefPtr mapped values. + + Also changed the hash translator and adapter struct templates + to use template functions to simplify them and make them more + flexible. + + Also removed some unused template arguments. + + This goes out of its way to not change behavior. Future patches + will change the peek type to be a reference type, which will + reduce reference count churn a bit for hash tables with RefPtr + mapped values, and then do further optimizations for RefPtr + and OwnPtr by getting types from the hash traits. + + * wtf/HashMap.h: Added MappedPassInType, MappedPassOutType, + and MappedPeekType typedefs, and used them for the arguments + and return types of the get, set, add, take, and inlineAdd + functions. + (WTF::HashMapTranslator): Changed this struct template to take + fewer arguments, and changed its member functions to be + function templates instead. This allows the compiler to + determine types more flexibly and also simplifies use of it. + (WTF::HashMapTranslatorAdapter): Ditto. + (WTF::HashMap::find): Updated to use new HashMapTranslatorAdapter. + Also reduced the arguments passed to the HashTable function template. + (WTF::HashMap::contains): Ditto. + (WTF::HashMap::inlineAdd): Ditto. Also take MappedPassInType. + (WTF::HashMap::set): Ditto. + (WTF::HashMap::add): Ditto. + (WTF::HashMap::inlineGet): Ditto, but return MappedPeekType. + (WTF::HashMap::get): Ditto. + (WTF::HashMap::take): Ditto, but return MappedPassOutType and use + that type in the implementation. + (WTF::deleteAllValues): Removed unneeded template arguments from + call to deleteAllPairSeconds. + (WTF::deleteAllKeys): Removed unneeded template arguments from + call to deleteAllPairFirsts. + + * wtf/HashSet.h: + (WTF::IdentityExtractor): Changed this to be a struct rather than + a struct template, and replaced the extract function with a function + template. This allows the compiler to deduce the type. + (WTF::HashSetTranslatorAdapter): Changed this struct template to take + fewer arguments, and changed its member functions to be + function templates instead. This allows the compiler to + determine types more flexibly and also simplifies use of it. + (WTF::HashSet::find): Updated to use new HashSetTranslatorAdapter. + Also reduced the arguments passed to the HashTable function template. + (WTF::HashSet::contains): Ditto. + (WTF::HashSet::add): Ditto. + + * wtf/HashTable.h: + (WTF::IdentityHashTranslator): Changed this struct template to take + fewer arguments, and changed its member functions to be + function templates instead. This allows the compiler to + determine types more flexibly and also simplifies use of it. + (WTF::HashTable::add): Reduced arguments passed to the function template. + (WTF::HashTable::find): Ditto, also reversed the template arguments so the + translator comes first so the compiler can deduce the other type. + (WTF::HashTable::contains): Ditto. + (WTF::HashTable::lookup): Ditto. + (WTF::HashTable::lookupForWriting): Ditto. + (WTF::HashTable::checkKey): Ditto. + (WTF::HashTable::fullLookupForWriting): Ditto. + (WTF::HashTable::add): Ditto. + (WTF::HashTable::addPassingHashCode): Ditto. + (WTF::HashTable::find): Ditto. + (WTF::HashTable::contains): Ditto. + + * wtf/ListHashSet.h: + (WTF::ListHashSetNodeHashFunctions): Changed this struct template to take + fewer arguments, and changed its member functions to be function templates + instead. This allows the compiler to determine types more flexibly and + also simplifies use of it. + (WTF::ListHashSet::find): Reduced the arguments passed to the HashTable + functon template. + (WTF::ListHashSetTranslatorAdapter): Changed this struct template in the + same way we changed ListHashSetNodeHashFunctions above. + (WTF::ListHashSetTranslatorAdapter::equal): + (WTF::::contains): + (WTF::::add): + (WTF::::insertBefore): + + * wtf/RefPtrHashMap.h: Updated comments. Removed the + RefPtrHashMapRawKeyTranslator struct template; we can use the + HashMapTranslator struct template from HashMap.h instead now that + it is more flexible. Added MappedPassInType, MappedPassOutType, + and MappedPeekType typedefs, and used them for the arguments + and return types of the get, inlineGet, set, add, take, and inlineAdd + functions. Changed the name of the RawKeyTranslator type to + Translator since it's now a class that can handle both raw keys + and conventional keys. + (WTF::HashMap::find): Changed to use Translator instead of RawKeyTranslator. + Reduced the arguments passed to the HashTable function template. + (WTF::HashMap::contains): Ditto. + (WTF::HashMap::inlineAdd): Ditto. Also take MappedPassInType. + (WTF::HashMap::set): Ditto. + (WTF::HashMap::add): Ditto. + (WTF::HashMap::inlineGet): Ditto, but return MappedPeekType. + (WTF::HashMap::get): Ditto. + (WTF::HashMap::take): Ditto, but return MappedPassOutType and use + that type in the implementation. + (WTF::deleteAllValues): Removed unneeded template arguments from + call to deleteAllPairSeconds. + (WTF::deleteAllKeys): Removed unneeded template arguments from + call to deleteAllPairFirsts. + +2011-12-02 Zoltan Herczeg <zherczeg@webkit.org> + + MacroAssemblerSH4 does not implement readCallTarget + https://bugs.webkit.org/show_bug.cgi?id=73434 + + Reviewed by Csaba Osztrogonác. + + * assembler/SH4Assembler.h: + (JSC::SH4Assembler::readCallTarget): Support for SH4. + +2011-12-02 Hajime Morrita <morrita@chromium.org> + + Unreviewed, rolling out r101751 and r101775. + http://trac.webkit.org/changeset/101751 + http://trac.webkit.org/changeset/101775 + https://bugs.webkit.org/show_bug.cgi?id=73191 + + breaks Windows build + + * JavaScriptCore.xcodeproj/project.pbxproj: + * config.h: + * runtime/JSExportMacros.h: Removed. + * wtf/ExportMacros.h: + * wtf/Platform.h: + * wtf/WTFThreadData.h: + * wtf/text/AtomicString.h: + * wtf/text/StringStatics.cpp: + +2011-12-01 Hajime Morrita <morrita@chromium.org> + + JS_INLINE and WTF_INLINE should be visible from WebCore + https://bugs.webkit.org/show_bug.cgi?id=73191 + + - Moved Export related macro definitions from config.h to ExportMacros.h and JSExportMacros.h. + - Moved WTF_USE_JSC and WTF_USE_V8 from various config.h family to Platform.h. + - Replaced JS_EXPORTDATA in wtf moudule with newly introduced WTF_EXPORTDATA. + + Reviewed by Kevin Ollivier. + + * JavaScriptCore.xcodeproj/project.pbxproj: + * config.h: + * runtime/JSExportMacros.h: Added. + * wtf/ExportMacros.h: + * wtf/Platform.h: + * wtf/WTFThreadData.h: + * wtf/text/AtomicString.h: + * wtf/text/StringStatics.cpp: + +2011-12-01 Michael Saboff <msaboff@apple.com> + + Changes proposed for 73457 slow down Kraken json-parse-financial + https://bugs.webkit.org/show_bug.cgi?id=73584 + + Restructured StringImpl::equal to take advantage of 8 or 4 bytes + at a time when possible. + + This is worth ~3% on Kraken json-parse-financial. It provides + ~2% on SunSpider string-unpack-code. + + Reviewed by Sam Weinig. + + * wtf/text/StringImpl.cpp: + (WTF::equal): + +2011-12-01 Oliver Hunt <oliver@apple.com> + + Support integer typed arrays in the DFG JIT + https://bugs.webkit.org/show_bug.cgi?id=73608 + + Reviewed by Filip Pizlo. + + Add support for all the integral typed arrays in the DFG JIT. + Currently this loads the contents of Uint32 arrays as doubles, + which is clearly not as efficient as it could be, but this is + still in the order of 10-20x faster than the existing behaviour. + + This needed us to add support for writing 16bit values to the + macroassembler, and also to support double<->unsigned conversion. + + * assembler/ARMv7Assembler.h: + (JSC::ARMv7Assembler::strh): + (JSC::ARMv7Assembler::vcvt_floatingPointToUnsigned): + * assembler/MacroAssemblerARMv7.h: + (JSC::MacroAssemblerARMv7::store16): + (JSC::MacroAssemblerARMv7::truncateDoubleToUint32): + * assembler/MacroAssemblerX86Common.h: + (JSC::MacroAssemblerX86Common::store16): + (JSC::MacroAssemblerX86Common::truncateDoubleToUint32): + * assembler/X86Assembler.h: + (JSC::X86Assembler::movw_rm): + (JSC::X86Assembler::cvttsd2siq_rr): + * bytecode/PredictedType.cpp: + (JSC::predictionToString): + (JSC::predictionFromClassInfo): + * bytecode/PredictedType.h: + (JSC::isInt8ArrayPrediction): + (JSC::isInt16ArrayPrediction): + (JSC::isInt32ArrayPrediction): + (JSC::isUint8ArrayPrediction): + (JSC::isUint16ArrayPrediction): + (JSC::isUint32ArrayPrediction): + (JSC::isFloat32ArrayPrediction): + (JSC::isFloat64ArrayPrediction): + * dfg/DFGAbstractState.cpp: + (JSC::DFG::AbstractState::initialize): + (JSC::DFG::AbstractState::execute): + * dfg/DFGNode.h: + (JSC::DFG::Node::shouldSpeculateInt8Array): + (JSC::DFG::Node::shouldSpeculateInt16Array): + (JSC::DFG::Node::shouldSpeculateInt32Array): + (JSC::DFG::Node::shouldSpeculateUint8Array): + (JSC::DFG::Node::shouldSpeculateUint16Array): + (JSC::DFG::Node::shouldSpeculateUint32Array): + (JSC::DFG::Node::shouldSpeculateFloat32Array): + (JSC::DFG::Node::shouldSpeculateFloat64Array): + * dfg/DFGPropagator.cpp: + (JSC::DFG::Propagator::propagateNodePredictions): + (JSC::DFG::Propagator::fixupNode): + (JSC::DFG::Propagator::performNodeCSE): + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::checkArgumentTypes): + (JSC::DFG::SpeculativeJIT::compileGetTypedArrayLength): + (JSC::DFG::SpeculativeJIT::compileGetByValOnIntTypedArray): + (JSC::DFG::SpeculativeJIT::compilePutByValForIntTypedArray): + * dfg/DFGSpeculativeJIT.h: + * dfg/DFGSpeculativeJIT32_64.cpp: + (JSC::DFG::SpeculativeJIT::compile): + * dfg/DFGSpeculativeJIT64.cpp: + (JSC::DFG::SpeculativeJIT::compile): + * runtime/JSGlobalData.h: + +2011-12-01 Benjamin Poulain <benjamin@webkit.org> + + URLs are encoded in UTF-8, then decoded as if they are Latin1 + https://bugs.webkit.org/show_bug.cgi?id=71758 + + Reviewed by Darin Adler. + + Add the operator == between a String and a Vector of char. The implementation + is the same as the comparison of String and char* but adds the length as a + parameter for comparing the strings. + + * JavaScriptCore.exp: + * wtf/text/StringImpl.h: + (WTF::equal): + * wtf/text/WTFString.h: + (WTF::operator==): + (WTF::operator!=): + +2011-12-01 Martin Robinson <mrobinson@igalia.com> + + [GTK] Read fonts from the jhbuild root + https://bugs.webkit.org/show_bug.cgi?id=73487 + + Reviewed by Gustavo Noronha Silva. + + Read fonts from the jhbuild root instead of from the system. This will ensure + that all testers use the same fonts instead of leaving this up to luck. + + * wtf/gobject/GlibUtilities.h: Add Assertions.h which was required for the WebKit2TestRunner. + +2011-12-01 Martin Robinson <mrobinson@igalia.com> + + [GTK] Add a helper function to find the current executable's path + https://bugs.webkit.org/show_bug.cgi?id=73473 + + Reviewed by Gustavo Noronha Silva. + + Add a WTF helper which gets the binary path. This is currently only used + in WebKit2. + + * GNUmakefile.list.am: Add the new file to the source list. + * wtf/gobject/GlibUtilities.cpp: Added. + (getCurrentExecutablePath): + * wtf/gobject/GlibUtilities.h: Added. + +2011-12-01 Sheriff Bot <webkit.review.bot@gmail.com> + + Unreviewed, rolling out r101691. + http://trac.webkit.org/changeset/101691 + https://bugs.webkit.org/show_bug.cgi?id=73588 + + Tests fail on Chromium bots, early warning system warned + committer, please adjust test_expectations in patch (Requested + by scheib on #webkit). + + * JavaScriptCore.exp: + * wtf/text/StringImpl.h: + * wtf/text/WTFString.h: + +2011-12-01 Filip Pizlo <fpizlo@apple.com> + + ARMv7 only allows for one-shot patching of compact offsets, while the + JIT expects to be able to repatch + https://bugs.webkit.org/show_bug.cgi?id=73548 + + Reviewed by Oliver Hunt. + + * assembler/ARMv7Assembler.h: + (JSC::ARMv7Assembler::setUInt7ForLoad): + +2011-11-30 Benjamin Poulain <benjamin@webkit.org> + + URLs are encoded in UTF-8, then decoded as if they are Latin1 + https://bugs.webkit.org/show_bug.cgi?id=71758 + + Reviewed by Darin Adler. + + Add the operator == between a String and a Vector of char. The implementation + is the same as the comparison of String and char* but adds the length as a + parameter for comparing the strings. + + * JavaScriptCore.exp: + * wtf/text/StringImpl.h: + (WTF::equal): + * wtf/text/WTFString.h: + (WTF::operator==): + (WTF::operator!=): + +2011-11-30 Dmitry Lomov <dslomov@google.com> + + https://bugs.webkit.org/show_bug.cgi?id=73503 + [Chromium][V8] Implement ArrayBuffer transfer in chromium. + Portions of this patch come from Luke Zarko. + + Reviewed by David Levin. + + * wtf/ArrayBuffer.cpp: + (WTF::ArrayBuffer::transfer): Changed prototype from pointers to RefPtr. + * wtf/ArrayBuffer.h: + (WTF::ArrayBufferContents::transfer): Changed prototype from pointers to RefPtr. + (WTF::ArrayBuffer::isNeutered): + * wtf/TypedArrayBase.h: + (WTF::TypedArrayBase::neuter): + +2011-12-01 Chao-ying Fu <fu@mips.com> + + MacroAssemblerMIPS does not implement readCallTarget + https://bugs.webkit.org/show_bug.cgi?id=73432 + + Reviewed by Zoltan Herczeg. + + * assembler/MIPSAssembler.h: + (JSC::MIPSAssembler::readCallTarget): + * assembler/MacroAssemblerMIPS.h: + (JSC::MacroAssemblerMIPS::readCallTarget): + +2011-12-01 Noel Gordon <noel.gordon@gmail.com> + + [chromium] Remove wtf/qt/ThreadingQt.cpp from the gyp projects + https://bugs.webkit.org/show_bug.cgi?id=73527 + + Reviewed by Simon Hausmann. + + wtf/qt/ThreadingQt.cpp was removed in r101477 + + * JavaScriptCore.gypi: remove wtf/qt/ThreadingQt.cpp + +2011-12-01 Filip Pizlo <fpizlo@apple.com> + + BitVector isInline check could fail + https://bugs.webkit.org/show_bug.cgi?id=70691 + + Reviewed by Gavin Barraclough. + + Switch back to using the high bit as the inline marker, to make + all of the bit indexing operations simpler. Computing the size in + words and in bytes of a bitvector, using the number of bits as + input is error-prone enough; and with the current approach to + solving the X86 bug we end up getting it wrong. Making it right + seems hard. + + So instead, to solve the original problem (the high bit may be + meaningful on 32-bit systems), the out-of-line storage pointer is + right-shifted by 1. Compared to the original BitVector code, this + is a much smaller change (just three lines). + + This solves a bug where the DFG was corrupting its call frame + because BitVector lost track of some bits. + + * wtf/BitVector.cpp: + (WTF::BitVector::setSlow): + (WTF::BitVector::resizeOutOfLine): + * wtf/BitVector.h: + (WTF::BitVector::quickGet): + (WTF::BitVector::quickSet): + (WTF::BitVector::quickClear): + (WTF::BitVector::makeInlineBits): + (WTF::BitVector::isInline): + (WTF::BitVector::outOfLineBits): + +2011-11-30 Filip Pizlo <fpizlo@apple.com> + + DFG should make it easier to notice node boundaries in disassembly + https://bugs.webkit.org/show_bug.cgi?id=73509 + + Rubber-stamped by Gavin Barraclough + + If you set XOR_DEBUG_AID to 1 in DFGCommon.h, a pair of xor's will + be emitted at node boundaries, where the immediate being xor'd is the + node index. + + * dfg/DFGCommon.h: + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::compile): + +2011-11-30 Geoffrey Garen <ggaren@apple.com> + + Removed ArgList iterators. + + Reviewed by Gavin Barraclough. + + Another step toward reversing the argument order. + + * interpreter/Interpreter.cpp: + (JSC::Interpreter::executeCall): + (JSC::Interpreter::executeConstruct): Switched from iterator to int. + + * runtime/ArgList.h: + (JSC::ArgList::ArgList): + (JSC::ArgList::isEmpty): Removed iterators. + + * runtime/JSArray.cpp: + (JSC::JSArray::finishCreation): Switched from iterator to int. + +2011-11-30 Yuqiang Xian <yuqiang.xian@intel.com> + + 32 bit DFG should handle logicalNot slow case instead of simply bailing out + https://bugs.webkit.org/show_bug.cgi?id=73515 + + Reviewed by Filip Pizlo. + + This improves Kraken performance by 14%, mainly due to ~3X improvement + on imaging-desaturate. + + * dfg/DFGSpeculativeJIT32_64.cpp: + (JSC::DFG::SpeculativeJIT::compileLogicalNot): + +2011-11-30 Max Vujovic <mvujovic@adobe.com> + + Some date values not handled consistently with IE/Firefox + https://bugs.webkit.org/show_bug.cgi?id=14176 + + Reviewed by Gavin Barraclough. + + Changed time zone offset parsing behavior to match IE/Firefox/Opera's in + implementation dependent cases like "GMT-4". + + * wtf/DateMath.cpp: + (WTF::parseDateFromNullTerminatedCharacters): + +2011-11-30 Mark Hahnenberg <mhahnenberg@apple.com> + + toStringCallback and valueOfCallback do not check the entire prototype chain for convertToType callback + https://bugs.webkit.org/show_bug.cgi?id=73368 + + Reviewed by Darin Adler. + + We need to search the entire prototype chain for the convertToType callback, rather than just calling whatever + happens to be in the first class of the chain, which potentially could be null. + + <rdar://problem/10493218> + + * API/JSCallbackFunction.cpp: + (JSC::JSCallbackFunction::toStringCallback): + (JSC::JSCallbackFunction::valueOfCallback): + +2011-11-29 Sam Weinig <sam@webkit.org> + + Add adoptCF and adoptNS convenience functions to RetainPtr.h + https://bugs.webkit.org/show_bug.cgi?id=73399 + + Reviewed by Anders Carlsson. + + * wtf/RetainPtr.h: + (WTF::adoptCF): + (WTF::adoptNS): + These adoption functions match the pattern we use in other + smart pointer classes. + +2011-11-30 Adam Roben <aroben@apple.com> + + Fix RetainPtr's move assignment operators + + Fixes <http://webkit.org/b/73449> RetainPtr's move assignment operators don't modify the + pointer being assigned to + + I didn't write a test for this because we don't have a way of unit testing C++11 code (see + <http://webkit.org/b/73448>). + + Reviewed by Anders Carlsson. + + * wtf/RetainPtr.h: + (WTF::RetainPtr::operator=): Adopt the passed-in RetainPtr's underlying pointer, not our own + pointer. + +2011-11-30 Csaba Osztrogonác <ossy@webkit.org> + + Unreviewed rolling out incorrect r101481. + + * assembler/MIPSAssembler.h: + * assembler/MacroAssemblerMIPS.h: + +2011-11-30 Simon Hausmann <simon.hausmann@nokia.com> + + Fix compilation with MingW. + + Reviewed by Csaba Osztrogonác. + + * wtf/ThreadingWin.cpp: + (WTF::initializeCurrentThreadInternal): MingW doesn't support MSVC exception handling, so for + the time being make the thread name setting unimplemented for MingW. + +2011-11-30 Simon Hausmann <simon.hausmann@nokia.com> + + Unreviewed propective build fix for Qt/Windows part 2 after r101477. + + * wtf/ThreadSpecific.h: Fix the OS(WINDOWS) defines for the friend declaration for ThreadSpecific<T>::Data + +2011-11-30 Simon Hausmann <simon.hausmann@nokia.com> + + Unreviewed propective build fix for Qt/Windows after r101477. + + * wtf/ThreadSpecific.h: Use OS(WINDOWS) for declaring "destructor", as it's + only referenced from within another OS(WINDOWS) section. + +2011-11-30 Csaba Osztrogonác <ossy@webkit.org> + + Unreviewed speculative buildfix after r101457. + + * assembler/MIPSAssembler.h: + (JSC::MIPSAssembler::readCallTarget): + * assembler/MacroAssemblerMIPS.h: + (JSC::MacroAssemblerMIPS::readCallTarget): + +2011-11-30 Andrew Wason <rectalogic@rectalogic.com> + + Replace Qt QThread threading back-end with pthread/Win32 threading back-ends + https://bugs.webkit.org/show_bug.cgi?id=72155 + + Reviewed by Simon Hausmann. + + Use ThreadingPthreads and ThreadingWin instead of ThreadingQt. + + * heap/MachineStackMarker.cpp: + * wtf/MainThread.cpp: + (WTF::initializeMainThread): + * wtf/Platform.h: + * wtf/ThreadSpecific.h: Drop QThreadStorage related code. + (WTF::::destroy): + * wtf/ThreadingPrimitives.h: + * wtf/qt/MainThreadQt.cpp: Drop Qt specific isMainThread(). + (WTF::initializeMainThreadPlatform): Initialize MainThreadInvoker on main thread to avoid infecting secondary thread with QAdoptedThread. + (WTF::scheduleDispatchFunctionsOnMainThread): + * wtf/qt/ThreadingQt.cpp: Removed. + * wtf/wtf.pro: + +2011-11-30 Csaba Osztrogonác <ossy@webkit.org> + + MacroAssemblerARM does not implement readCallTarget + https://bugs.webkit.org/show_bug.cgi?id=73413 + + Based on Filip Pizlo's patch. + + Buildfix. Rubber-stamped by Gabor Loki. + + * assembler/ARMAssembler.h: + (JSC::ARMAssembler::readCallTarget): + * assembler/MacroAssemblerARM.h: + (JSC::MacroAssemblerARM::readCallTarget): + +2011-11-29 Filip Pizlo <fpizlo@apple.com> + + Resetting a put_by_id inline cache should preserve the "isDirect" bit + https://bugs.webkit.org/show_bug.cgi?id=73375 + + Reviewed by Gavin Barraclough. + + For the replace case, we can find out if it was direct by looking at the + slow call. For the transition case, we explicitly remember if it was + direct. + + * bytecode/CodeBlock.cpp: + (JSC::printStructureStubInfo): + * bytecode/StructureStubInfo.cpp: + (JSC::StructureStubInfo::deref): + (JSC::StructureStubInfo::visitWeakReferences): + * bytecode/StructureStubInfo.h: + (JSC::isPutByIdAccess): + (JSC::StructureStubInfo::initPutByIdTransition): + * dfg/DFGByteCodeParser.cpp: + (JSC::DFG::ByteCodeParser::parseBlock): + * dfg/DFGRepatch.cpp: + (JSC::DFG::tryCachePutByID): + * jit/JIT.h: + * jit/JITPropertyAccess.cpp: + (JSC::JIT::resetPatchPutById): + (JSC::JIT::isDirectPutById): + * jit/JITPropertyAccess32_64.cpp: + (JSC::JIT::resetPatchPutById): + * jit/JITStubs.cpp: + (JSC::JITThunks::tryCachePutByID): + +2011-11-29 Sam Weinig <sam@webkit.org> + + Remove RetainPtr::releaseRef + https://bugs.webkit.org/show_bug.cgi?id=73396 + + Reviewed by Dan Bernstein. + + * wtf/RetainPtr.h: + Be gone releaseRef! Long live leakRef! + +2011-11-29 Sam Weinig <sam@webkit.org> + + Add move semantics to RetainPtr + https://bugs.webkit.org/show_bug.cgi?id=73393 + + Reviewed by Anders Carlsson. + + * wtf/RetainPtr.h: + (WTF::RetainPtr::RetainPtr): + Add a move constructor and move enabled assignment operators + to RetainPtr if the compiler being used supports rvalue + references. If the compiler does not support it, we fallback + to the copy semantics we have always had. + +2011-11-29 Yuqiang Xian <yuqiang.xian@intel.com> + + DFG local CSE may cause incorrect reference counting for a node + https://bugs.webkit.org/show_bug.cgi?id=73390 + + Reviewed by Filip Pizlo. + + When performing a node substitution, the ref count of the replaced + child will be increased, no matter whether the user node is skipped in + code generation or not. This will cause the reference count of the + replaced child never get the chance to become zero and so the + registers occupied by it cannot be reused simply without spilling, if + it's used by a "skipped" node. + This is a 1% gain on V8 benchmark, tested on IA32 Linux. + + * dfg/DFGPropagator.cpp: + (JSC::DFG::Propagator::performSubstitution): + (JSC::DFG::Propagator::performNodeCSE): + +2011-11-29 David Levin <levin@chromium.org> + + Add a way to revert a variable to its previous value after leaving a scope. + https://bugs.webkit.org/show_bug.cgi?id=73371 + + Reviewed by Adam Barth. + + In case anyone from Chromium sees this, it is nearly identical to AutoReset + but if the same name were used, it causes unnecessary ambiguity. + + * JavaScriptCore.xcodeproj/project.pbxproj: + * wtf/TemporarilyChange.h: Added. + (WTF::TemporarilyChange::TemporarilyChange): + (WTF::TemporarilyChange::~TemporarilyChange): + +2011-11-29 Sam Weinig <sam@webkit.org> + + Add COMPILER_SUPPORTS macro to allow for compiler feature testing + https://bugs.webkit.org/show_bug.cgi?id=73386 + + Reviewed by Anders Carlsson. + + * wtf/Compiler.h: + Add COMPILER_SUPPORTS and #defines for C++11 variadic templates and + rvalue references for Clang. + +2011-11-29 Oliver Hunt <oliver@apple.com> + + Allow WebCore to describe typed arrays to JSC + https://bugs.webkit.org/show_bug.cgi?id=73355 + + Reviewed by Gavin Barraclough. + + Allow globaldata to track the structure of typed arrays. + + * runtime/JSGlobalData.h: + (JSC::TypedArrayDescriptor::TypedArrayDescriptor): + +2011-11-28 Filip Pizlo <fpizlo@apple.com> + + DFG debugCall() mechanism only works on X86 and X86-64 + https://bugs.webkit.org/show_bug.cgi?id=73282 + + Reviewed by Oliver Hunt. + + * dfg/DFGAssemblyHelpers.h: + (JSC::DFG::AssemblyHelpers::debugCall): + +2011-11-28 Filip Pizlo <fpizlo@apple.com> + + DFG non-X86 ArithDiv does speculation failure after mutating state, + without a value recovery + https://bugs.webkit.org/show_bug.cgi?id=73286 + + Reviewed by Gavin Barraclough. + + * dfg/DFGSpeculativeJIT32_64.cpp: + (JSC::DFG::SpeculativeJIT::compile): + +2011-11-28 Filip Pizlo <fpizlo@apple.com> + + Unreviewed build fixes for ARM. + + * assembler/MacroAssemblerARMv7.h: + (JSC::MacroAssemblerARMv7::readCallTarget): + * dfg/DFGSpeculativeJIT.h: + (JSC::DFG::SpeculativeJIT::setupArgumentsWithExecState): + +2011-11-20 Roland Steiner <rolandsteiner@chromium.org> + + <style scoped>: add ENABLE(STYLE_SCOPED) flag to WebKit + https://bugs.webkit.org/show_bug.cgi?id=72848 + + Add ENABLE_STYLE_SCOPED flag. + + Reviewed by Dimitri Glazkov. + + * Configurations/FeatureDefines.xcconfig: + +2011-11-28 Jon Lee <jonlee@apple.com> + + Create skeleton framework for notifications support in WK2 + https://bugs.webkit.org/show_bug.cgi?id=73253 + <rdar://problem/10356943> + + * Configurations/FeatureDefines.xcconfig: Split out ENABLE_NOTIFICATIONS based on platform. + +2011-11-28 Oliver Hunt <oliver@apple.com> + + Fix windows build. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + +2011-11-28 Oliver Hunt <oliver@apple.com> + + Fix gyp build + + * JavaScriptCore.gypi: + +2011-11-28 Filip Pizlo <fpizlo@apple.com> + + GetById should not always speculate cell + https://bugs.webkit.org/show_bug.cgi?id=73181 + + Reviewed by Gavin Barraclough. + + GetById will now speculate cell if the predictions of the base are cell. + Otherwise it will do like the old JIT (and like the old non-speculative + DFG JIT): if not cell, go straight to slow-path but otherwise don't OSR + out. This is a 1% speed-up on SunSpider. + + * dfg/DFGAbstractState.cpp: + (JSC::DFG::AbstractState::execute): + * dfg/DFGOperations.cpp: + * dfg/DFGOperations.h: + * dfg/DFGSpeculativeJIT.h: + (JSC::DFG::SpeculativeJIT::setupArgumentsWithExecState): + (JSC::DFG::SpeculativeJIT::callOperation): + * dfg/DFGSpeculativeJIT32_64.cpp: + (JSC::DFG::SpeculativeJIT::cachedGetById): + (JSC::DFG::SpeculativeJIT::compile): + * dfg/DFGSpeculativeJIT64.cpp: + (JSC::DFG::SpeculativeJIT::compile): + +2011-11-28 Oliver Hunt <oliver@apple.com> + + Move typed array implementations into wtf + https://bugs.webkit.org/show_bug.cgi?id=73248 + + Reviewed by Sam Weinig. + + Move typed array implementation files from WebCore to wtf. Inline the + .cpp files for each of the array views to cut down on unnecessary exports + and function call overhead for trivial operations. + + Added files to all the project files. + + * GNUmakefile.list.am: + * JavaScriptCore.exp: + * JavaScriptCore.vcproj/WTF/WTF.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * wtf/ArrayBuffer.cpp: Renamed from Source/WebCore/html/canvas/Float32Array.cpp. + (WTF::ArrayBuffer::transfer): + (WTF::ArrayBuffer::addView): + (WTF::ArrayBuffer::removeView): + * wtf/ArrayBuffer.h: Renamed from Source/WebCore/html/canvas/ArrayBuffer.cpp. + (WTF::ArrayBufferContents::ArrayBufferContents): + (WTF::ArrayBufferContents::data): + (WTF::ArrayBufferContents::sizeInBytes): + (WTF::ArrayBufferContents::transfer): + (WTF::ArrayBuffer::~ArrayBuffer): + (WTF::ArrayBuffer::clampValue): + (WTF::ArrayBuffer::create): + (WTF::ArrayBuffer::ArrayBuffer): + (WTF::ArrayBuffer::data): + (WTF::ArrayBuffer::byteLength): + (WTF::ArrayBuffer::slice): + (WTF::ArrayBuffer::sliceImpl): + (WTF::ArrayBuffer::clampIndex): + (WTF::ArrayBufferContents::tryAllocate): + (WTF::ArrayBufferContents::~ArrayBufferContents): + * wtf/ArrayBufferView.cpp: Copied from Source/WebCore/bindings/js/JSArrayBufferCustom.cpp. + (WTF::ArrayBufferView::ArrayBufferView): + (WTF::ArrayBufferView::~ArrayBufferView): + (WTF::ArrayBufferView::neuter): + * wtf/ArrayBufferView.h: Renamed from Source/WebCore/html/canvas/ArrayBufferView.h. + (WTF::ArrayBufferView::isByteArray): + (WTF::ArrayBufferView::isUnsignedByteArray): + (WTF::ArrayBufferView::isShortArray): + (WTF::ArrayBufferView::isUnsignedShortArray): + (WTF::ArrayBufferView::isIntArray): + (WTF::ArrayBufferView::isUnsignedIntArray): + (WTF::ArrayBufferView::isFloatArray): + (WTF::ArrayBufferView::isDoubleArray): + (WTF::ArrayBufferView::isDataView): + (WTF::ArrayBufferView::buffer): + (WTF::ArrayBufferView::baseAddress): + (WTF::ArrayBufferView::byteOffset): + (WTF::ArrayBufferView::verifySubRange): + (WTF::ArrayBufferView::clampOffsetAndNumElements): + (WTF::ArrayBufferView::setImpl): + (WTF::ArrayBufferView::setRangeImpl): + (WTF::ArrayBufferView::zeroRangeImpl): + (WTF::ArrayBufferView::calculateOffsetAndLength): + * wtf/CMakeLists.txt: + * wtf/Float32Array.h: Renamed from Source/WebCore/html/canvas/Float32Array.h. + (WTF::Float32Array::set): + (WTF::Float32Array::item): + (WTF::Float32Array::isFloatArray): + (WTF::Float32Array::create): + (WTF::Float32Array::Float32Array): + (WTF::Float32Array::subarray): + * wtf/Float64Array.h: Renamed from Source/WebCore/html/canvas/Float64Array.h. + (WTF::Float64Array::set): + (WTF::Float64Array::item): + (WTF::Float64Array::isDoubleArray): + (WTF::Float64Array::create): + (WTF::Float64Array::Float64Array): + (WTF::Float64Array::subarray): + * wtf/Int16Array.h: Renamed from Source/WebCore/html/canvas/Int16Array.cpp. + (WTF::Int16Array::set): + (WTF::Int16Array::isShortArray): + (WTF::Int16Array::create): + (WTF::Int16Array::Int16Array): + (WTF::Int16Array::subarray): + * wtf/Int32Array.h: Renamed from Source/WebCore/html/canvas/Int32Array.cpp. + (WTF::Int32Array::set): + (WTF::Int32Array::isIntArray): + (WTF::Int32Array::create): + (WTF::Int32Array::Int32Array): + (WTF::Int32Array::subarray): + * wtf/Int8Array.h: Renamed from Source/WebCore/html/canvas/Int8Array.cpp. + (WTF::Int8Array::set): + (WTF::Int8Array::isByteArray): + (WTF::Int8Array::create): + (WTF::Int8Array::Int8Array): + (WTF::Int8Array::subarray): + * wtf/IntegralTypedArrayBase.h: Renamed from Source/WebCore/html/canvas/IntegralTypedArrayBase.h. + (WTF::IntegralTypedArrayBase::set): + (WTF::IntegralTypedArrayBase::item): + (WTF::IntegralTypedArrayBase::IntegralTypedArrayBase): + * wtf/TypedArrayBase.h: Renamed from Source/WebCore/html/canvas/TypedArrayBase.h. + (WTF::TypedArrayBase::data): + (WTF::TypedArrayBase::set): + (WTF::TypedArrayBase::setRange): + (WTF::TypedArrayBase::zeroRange): + (WTF::TypedArrayBase::length): + (WTF::TypedArrayBase::byteLength): + (WTF::TypedArrayBase::TypedArrayBase): + (WTF::TypedArrayBase::create): + (WTF::TypedArrayBase::subarrayImpl): + * wtf/Uint16Array.h: Renamed from Source/WebCore/html/canvas/Uint16Array.cpp. + (WTF::Uint16Array::set): + (WTF::Uint16Array::isUnsignedShortArray): + (WTF::Uint16Array::create): + (WTF::Uint16Array::Uint16Array): + (WTF::Uint16Array::subarray): + * wtf/Uint32Array.h: Renamed from Source/WebCore/html/canvas/Uint32Array.cpp. + (WTF::Uint32Array::set): + (WTF::Uint32Array::isUnsignedIntArray): + (WTF::Uint32Array::create): + (WTF::Uint32Array::Uint32Array): + (WTF::Uint32Array::subarray): + * wtf/Uint8Array.h: Renamed from Source/WebCore/html/canvas/Uint8Array.h. + (WTF::Uint8Array::set): + (WTF::Uint8Array::isUnsignedByteArray): + (WTF::Uint8Array::create): + (WTF::Uint8Array::Uint8Array): + (WTF::Uint8Array::subarray): + * wtf/wtf.pro: + +2011-11-27 Filip Pizlo <fpizlo@apple.com> + + Don't try to optimize huge code blocks + https://bugs.webkit.org/show_bug.cgi?id=73187 + + Reviewed by Oliver Hunt. + + This unifies the heuristics used for deciding if a code block is too big + to optimize, and sets this heuristic to 1000, which is intuitively better + than numeric_limits<unsigned>::max(). It also results in what looks like + a speed-up on both SunSpider and V8 (in Tools/Scripts/bencher). + + * dfg/DFGCapabilities.h: + (JSC::DFG::mightCompileEval): + (JSC::DFG::mightCompileProgram): + (JSC::DFG::mightCompileFunctionForCall): + (JSC::DFG::mightCompileFunctionForConstruct): + * runtime/Heuristics.cpp: + (JSC::Heuristics::initializeHeuristics): + * runtime/Heuristics.h: + +2011-11-28 Filip Pizlo <fpizlo@apple.com> + + Either remove the GetMethod node from the DFG backend, or find a use for it + https://bugs.webkit.org/show_bug.cgi?id=73178 + + Reviewed by Gavin Barraclough. + + More testing seemed to imply that the GetMethod code was indeed not profitable + in any major test. So, it's probably best to just remove it. + + * bytecode/CodeBlock.cpp: + (JSC::MethodCallLinkInfo::reset): + * dfg/DFGAbstractState.cpp: + (JSC::DFG::AbstractState::execute): + * dfg/DFGJITCompiler.cpp: + (JSC::DFG::JITCompiler::link): + * dfg/DFGJITCompiler.h: + * dfg/DFGNode.h: + (JSC::DFG::Node::hasIdentifier): + (JSC::DFG::Node::hasHeapPrediction): + * dfg/DFGOperations.cpp: + * dfg/DFGOperations.h: + * dfg/DFGPropagator.cpp: + (JSC::DFG::Propagator::propagateNodePredictions): + * dfg/DFGRepatch.cpp: + * dfg/DFGRepatch.h: + * dfg/DFGSpeculativeJIT.h: + * dfg/DFGSpeculativeJIT32_64.cpp: + (JSC::DFG::SpeculativeJIT::cachedGetById): + (JSC::DFG::SpeculativeJIT::compile): + * dfg/DFGSpeculativeJIT64.cpp: + (JSC::DFG::SpeculativeJIT::cachedGetById): + (JSC::DFG::SpeculativeJIT::compile): + +2011-11-28 Michael Saboff <msaboff@apple.com> + + Change set 101187 from bug 73154 removed already lower case optimization + https://bugs.webkit.org/show_bug.cgi?id=73174 + + Added back the "string is already lower case" optimization. + + Reviewed by Geoffrey Garen. + + * runtime/StringPrototype.cpp: + (JSC::stringProtoFuncToLowerCase): + +2011-11-28 Simon Hausmann <simon.hausmann@nokia.com> + + Unreviewed prospective build fix. Touch the file to trigger correct + rebuild on the Qt mips/sh4/sl bot. + + * wtf/unicode/qt4/UnicodeQt4.h: + +2011-11-28 Tor Arne Vestbø <tor.arne.vestbo@nokia.com> + + [Qt] Remove cruft from project file + + Reviewed by Simon Hausmann. + + * Target.pri: + +2011-11-28 Simon Hausmann <simon.hausmann@nokia.com> + + [Qt] WTF should be built as separate static library + https://bugs.webkit.org/show_bug.cgi?id=73201 + + Reviewed by Tor Arne Vestbø. + + * Target.pri: Don't claim to build WTF, as that would cause + the debug-with-shlibs build to not link in wtf. + * jsc.pro: Require wtf. + * wtf/wtf.pri: Removed. + * wtf/wtf.pro: Added. Pro file to build wtf statically. + +2011-11-28 Martin Robinson <mrobinson@igalia.com> + + [GTK] JavaScriptCore generated sources should build in the DerivedSources directory + https://bugs.webkit.org/show_bug.cgi?id=73197 + + Reviewed by Philippe Normand. + + Build all JavaScriptCore generated sources in DerivedSources. + + * GNUmakefile.am: Update generation rules. + * GNUmakefile.list.am: Update source lists. + +2011-11-27 Filip Pizlo <fpizlo@apple.com> + + DFG should not emit GetMethod node + https://bugs.webkit.org/show_bug.cgi?id=73175 + + Reviewed by Gavin Barraclough. + + Replaces all instances of the GetMethod node with GetById. This appears to + be a slight win on V8. This patch leaves GetMethod support in the code-base, + making this decision easy to reverse, for now. + + * dfg/DFGByteCodeParser.cpp: + (JSC::DFG::ByteCodeParser::parseBlock): + +2011-11-26 Hajime Morrita <morrita@chromium.org> + + Needs WTF_INLINE and JS_INLINE + https://bugs.webkit.org/show_bug.cgi?id=72853 + + Reviewed by Kevin Ollivier. + + Added WTF_HIDDEN, WTF_INLINE and JS_INLINE which + indirect __attribute__((visibility("hidden")) + + * config.h: + * wtf/ExportMacros.h: + +2011-11-25 Michael Saboff <msaboff@apple.com> + + String.prototype.toLower should be optimized for 8 bit strings + https://bugs.webkit.org/show_bug.cgi?id=73154 + + Changed stringProtoFuncToLowerCase to use StringImpl::lower() which has + been optimized for 8 bit strings. + + This is worth ~7% to sunspider string.tagcloud. + + Reviewed by Filip Pizlo. + + * runtime/StringPrototype.cpp: + (JSC::stringProtoFuncToLowerCase): + +2011-11-25 Michael Saboff <msaboff@apple.com> + + Array.toString always uses StringImpl::characters() + https://bugs.webkit.org/show_bug.cgi?id=72969 + + If all component strings are 8 bit, create an 8 bit result string for toString(). + + This appears to be performance neutral to sunspider and v8. + + Reviewed by Filip Pizlo. + + * runtime/ArrayPrototype.cpp: + (JSC::arrayProtoFuncToString): + +2011-11-24 Michael Saboff <msaboff@apple.com> + + UString methods are not character size aware + https://bugs.webkit.org/show_bug.cgi?id=72975 + + Changed the UString number constructors to build 8 bit strings. + Modified the other methods to check string bitness and process + with 8 bits wherre appropriate. + + * runtime/UString.cpp: + (JSC::UString::number): + (JSC::operator==): + (JSC::operator<): + (JSC::UString::ascii): + +2011-11-24 Michael Saboff <msaboff@apple.com> + + JavaScript string to number conversion functions use characters() + https://bugs.webkit.org/show_bug.cgi?id=72974 + + Change the various JS to number routines to process strings + using characters8() or characters16() as appropriate. + Implemented using static template methods. + + Reviewed by Filip Pizlo. + + * runtime/JSGlobalObjectFunctions.cpp: + (JSC::isInfinity): + (JSC::jsHexIntegerLiteral): + (JSC::jsStrDecimalLiteral): + (JSC::toDouble): + (JSC::jsToNumber): + +2011-11-24 Michael Saboff <msaboff@apple.com> + + Empty JSStrings are created as 16 bit + https://bugs.webkit.org/show_bug.cgi?id=72968 + + Clear m_is8Bit flag for empty strings. + + Reviewed by Filip Pizlo. + + * runtime/JSString.h: + (JSC::RopeBuilder::finishCreation): + +2011-11-24 Michael Saboff <msaboff@apple.com> + + Tune JSStringBuilder for 8 bit Strings + https://bugs.webkit.org/show_bug.cgi?id=72683 + + Changed JSStringBuilder to use 8 bit buffers until 16 bit data is added. + When 16 bit data is to be added, the 8 bit buffer is converted to 16 bit + and building continues with a 16 bit buffer. + + Reviewed by Filip Pizlo. + + * runtime/JSStringBuilder.h: + (JSC::JSStringBuilder::JSStringBuilder): + (JSC::JSStringBuilder::append): + (JSC::JSStringBuilder::upConvert): + (JSC::JSStringBuilder::build): + * runtime/UString.h: + (JSC::UString::adopt): + * wtf/text/StringImpl.h: + (WTF::StringImpl::adopt): + +2011-11-24 Zeno Albisser <zeno@webkit.org> + + [Qt]WK2][Mac] Use Mac port's IPC implementation instead of Unix sockets + https://bugs.webkit.org/show_bug.cgi?id=72495 + + Update defines to not use Unix Domain Sockets for platform Qt on Mac. + This enables Qt to reuse existing code for mach ports and Grand + Central Dispatch based IPC. + + Reviewed by Simon Hausmann. + + * wtf/Platform.h: + +2011-11-24 Simon Hausmann <simon.hausmann@nokia.com> + + [Qt] REGRESSION(r101131): WTF::scheduleDispatchFunctionsOnMainThread() doesn't work reliably + + Reviewed by Andreas Kling. + + We must make sure that the MainThreadInvoker object lives in the gui thread. There are a few + ways of doing that and this fix seems like the least intrusive one by simply pushing the + invoker to the gui thread if it's not there already. + + * wtf/qt/MainThreadQt.cpp: + (WTF::scheduleDispatchFunctionsOnMainThread): + +2011-11-24 Patrick Gansterer <paroga@webkit.org> + + [Qt] Use QEvent for dispatchFunctionsFromMainThread() + https://bugs.webkit.org/show_bug.cgi?id=72704 + + Reviewed by Simon Hausmann. + + Replace QMetaObject::invokeMethod with QCoreApplication::postEvent. + This is the same as what invokeMethod does internally, but reduces + the dependency on some internal QThread stuff. + + * wtf/qt/MainThreadQt.cpp: + (WTF::MainThreadInvoker::MainThreadInvoker): + (WTF::MainThreadInvoker::event): + (WTF::scheduleDispatchFunctionsOnMainThread): + +2011-11-23 George Staikos <staikos@webkit.org> + + Remove BlackBerry OS support from RandomNumberSeed, making QNX=UNIX. + https://bugs.webkit.org/show_bug.cgi?id=73028 + + Reviewed by Daniel Bates. + + * wtf/RandomNumberSeed.h: + (WTF::initializeRandomNumberGenerator): + +2011-11-23 Nikolas Zimmermann <nzimmermann@rim.com> + + Add flags/precision arguments to String::number(double) to allow fine-grained control over the result string + https://bugs.webkit.org/show_bug.cgi?id=72793 + + Reviewed by Zoltan Herczeg. + + This new code will be used in follow-up patches to replace the String::format("%.2f") usage in + platform/text/TextStream.cpp, and String::format("%.6lg") usage in svg/SVGPathStringBuilder.cpp. + + The String::number(double) currently calls String::format("%.6lg") in trunk. In order to replace + this by a variant that properly rounds to six significant figures, JSC code could be refactored. + JSCs Number.toPrecision/toFixed uses wtf/dtoa/double-conversion which provides all features we need, + except truncating trailing zeros, needed to mimic the "g" format, which is either f or e but with + trailing zeros removed, producing shorter results. Changed the default signature to: + + "static String number(double, unsigned = ShouldRoundSignificantFigures | ShouldTruncateTrailingZeros, unsigned precision = 6);". + + In WebCore we can now replace String::format() calls like this: + String::format("%.2f", f) -> String::number(f, ShouldRoundDecimalPlaces, 2) + String::format("%.6lg", f) -> String::number(f) + + The default parameters for precison & flags exactly match the format of the string produced now, except that the result + is rounded according to the rounding mode / formatting mode and precision. This paves the way towards reliable results + in the d="" attribute dumps of SVG paths across platforms. The dtoa rounding code enforces a unique zero, resolving + all 0.0 vs. -0.0 issues currently seen on Windows, and some Gtk/Qt bots. + + This patch needs a rebaseline of svg/dom/length-list-parser.html as we don't perfecly mimic the String::format() "lg" mode + result for exponentials, we used to return eg. "e-7" and now return "e-07" - the trailing zero truncation hasn't been + implemented for exponentials, as this really affects only this test and thus wasn't worth the trouble - in contrary the + trailing zero truncation is needed for thousands of other results in "f" notation, and thus needed to match the DRT results. + + Here's a performance comparision using a JSC release build and some arbitary numbers: + Converting 123.456 using old approach took 95.527100ms. avg 0.000955ms/call. + Converting 123.456 using new approach took 28.126953ms. avg 0.000281ms/call. + + Converting 123 using old approach took 85.411133ms. avg 0.000854ms/call. + Converting 123 using new approach took 24.190186ms. avg 0.000242ms/call. + + Converting 0.1 using old approach took 92.622803ms. avg 0.000926ms/call. + Converting 0.1 using new approach took 23.317871ms. avg 0.000233ms/call. + + Converting 1/i using old approach took 106.893066ms. avg 0.001069ms/call. + Converting 1/i using new approach took 27.164062ms. avg 0.000272ms/call. + + For all numbers I've tested in RoundingSignificantFigures mode and 6 digit precision the speedup was at least 250%. + + * JavaScriptCore.exp: Change String::number(double) signature. + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Ditto. + * runtime/NumberPrototype.cpp: + (JSC::numberProtoFuncToFixed): Refactor this into numberToFixedPrecisionString(), move to wtf/dtoa.cpp. + (JSC::numberProtoFuncToPrecision): Ditto, refactor this into numberToFixedWidthString. + * wtf/dtoa.cpp: Moved fixedWidth/Precision helpers into dtoa, extend numberToFixedPrecisionString(). Add a mode which allows to truncate trailing zeros/decimal point. + to make it possible to use them to generate strings that match the output from String::format("%6.lg"), while using our dtoas rounding facilities. + * wtf/dtoa.h: + * wtf/dtoa/utils.h: Expose new helper method, which allows us to truncate the result, before generating the output const char*. + (WTF::double_conversion::StringBuilder::SetPosition): + * wtf/text/WTFString.cpp: + (WTF::String::number): Remove String::format("%6.lg") usage! Switch to rounding to six significant figures, while matching the output of String::format. + * wtf/text/WTFString.h: + +2011-11-23 Hajime Morrita <morrita@chromium.org> + + WTF::String has extra WTF_EXPORT_PRIVATE + https://bugs.webkit.org/show_bug.cgi?id=72858 + + Reviewed by Kevin Ollivier. + + * wtf/text/WTFString.h: + (WTF::String::String): + +2011-11-23 Raphael Kubo da Costa <kubo@profusion.mobi> + + [CMake] Move the top-level logic to the top-level directory. + https://bugs.webkit.org/show_bug.cgi?id=72685 + + Reviewed by Brent Fulgham. + + * CMakeLists.txt: Point to the right Source/ directory. + * wtf/CMakeLists.txt: Ditto. + +2011-11-22 Yuqiang Xian <yuqiang.xian@intel.com> + + Strength reduction for Mul and Mod operations for known constants in DFG + https://bugs.webkit.org/show_bug.cgi?id=72878 + + Reviewed by Filip Pizlo. + + Also the code should be commonly shared by both 32_64 and 64. + + * dfg/DFGNode.h: + (JSC::DFG::nodeMayOverflow): + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::fmodAsDFGOperation): + (JSC::DFG::SpeculativeJIT::compileInstanceOf): + (JSC::DFG::isPowerOfTwo): + (JSC::DFG::logTwo): + (JSC::DFG::SpeculativeJIT::compileSoftModulo): + (JSC::DFG::SpeculativeJIT::compileArithMul): + (JSC::DFG::SpeculativeJIT::compileArithMod): + * dfg/DFGSpeculativeJIT.h: + * dfg/DFGSpeculativeJIT32_64.cpp: + (JSC::DFG::SpeculativeJIT::compile): + * dfg/DFGSpeculativeJIT64.cpp: + (JSC::DFG::SpeculativeJIT::compile): + +2011-11-22 Daniel Bates <dbates@rim.com> + + Add WTF infrastructure for the BlackBerry port + https://bugs.webkit.org/show_bug.cgi?id=72970 + + Reviewed by Antonio Gomes. + + * wtf/Assertions.cpp: Added BlackBerry-specific logging directive. + * wtf/MathExtras.h: + (abs): Added; stdlib doesn't contain abs() on QNX. + * wtf/Platform.h: Define WTF_PLATFORM_BLACKBERRY and enable some platform features. + * wtf/RandomNumberSeed.h: + (WTF::initializeRandomNumberGenerator): For the BlackBerry port, we initialize + the bad pseudo random number generator using time(3) before initializing the + Mersenne Twister random number generator. + * wtf/ThreadingPthreads.cpp: + (WTF::createThreadInternal): Added. + * wtf/blackberry: Added. + * wtf/blackberry/MainThreadBlackBerry.cpp: Added. + (WTF::initializeMainThreadPlatform): + (WTF::scheduleDispatchFunctionsOnMainThread): + * wtf/text/WTFString.h: Added constructor and conversion operator for + BlackBerry WebString string object. + +2011-11-22 Sheriff Bot <webkit.review.bot@gmail.com> + + Unreviewed, rolling out r100988. + http://trac.webkit.org/changeset/100988 + https://bugs.webkit.org/show_bug.cgi?id=72941 + + "Broke pixel tests on Chromium-Linux" (Requested by kbalazs on + #webkit). + + * JavaScriptCore.gypi: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * wtf/ParallelJobs.h: + * wtf/ParallelJobsGeneric.cpp: + * wtf/ParallelJobsGeneric.h: + (WTF::ParallelEnvironment::ParallelEnvironment): + (WTF::ParallelEnvironment::execute): + * wtf/Platform.h: + +2011-11-21 Balazs Kelemen <kbalazs@webkit.org> + + Enable ParallelJobs by default + https://bugs.webkit.org/show_bug.cgi?id=70032 + + Reviewed by Zoltan Herczeg. + + According to measurements on Mac and Linux it is a + considerable speedup for SVG on multicore. + + Remove the ENABLE(PARALLEL_JOBS) guard. + Fix build on Windows and Chromium. + + * JavaScriptCore.gypi: Add the files to the build. It was + missing for the gyp build system. + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + Export symbols. + * wtf/ParallelJobs.h: + * wtf/ParallelJobsGeneric.cpp: + (WTF::ParallelEnvironment::ParallelEnvironment): + (WTF::ParallelEnvironment::execute): + Deinline these to avoid exporting a lot of symbols. + These are non-trivial and called only once on a given object + so it doesn't seems to be worthwile to inline them. + Additionally fix a signed-unsigned comparison in the constructor. + * wtf/ParallelJobsGeneric.h: + * wtf/Platform.h: + +2011-11-21 Filip Pizlo <fpizlo@apple.com> + + DFG should have richer debug output for CFA and phi processing + https://bugs.webkit.org/show_bug.cgi?id=72922 + + Reviewed by Gavin Barraclough. + + In the default verbose mode, we now print information about variable + state at the bottom of basic blocks in addition to the top, and we + also print local variable linking. In the verbose propagation mode, + the state of phi processing is dumped more richly and CFA merging (the + most subtle part of CFA) is traced as well. + + * dfg/DFGAbstractState.cpp: + (JSC::DFG::AbstractState::endBasicBlock): + (JSC::DFG::AbstractState::mergeStateAtTail): + * dfg/DFGAbstractValue.h: + (JSC::DFG::StructureAbstractValue::dump): + (JSC::DFG::AbstractValue::dump): + * dfg/DFGByteCodeParser.cpp: + (JSC::DFG::ByteCodeParser::processPhiStack): + (JSC::DFG::ByteCodeParser::parse): + * dfg/DFGCommon.h: + (JSC::DFG::NodeIndexTraits::dump): + * dfg/DFGDriver.cpp: + (JSC::DFG::compile): + * dfg/DFGGraph.cpp: + (JSC::DFG::Graph::dump): + * dfg/DFGNode.h: + (JSC::DFG::Node::dumpChildren): + * dfg/DFGOSRExitCompiler.cpp: + * dfg/DFGOperands.h: + (JSC::DFG::OperandValueTraits::dump): + (JSC::DFG::dumpOperands): + +2011-11-21 Filip Pizlo <fpizlo@apple.com> + + Showing the data overlay in OpenStreetMap doesn't work, zooming partially broken + https://bugs.webkit.org/show_bug.cgi?id=71505 + + Reviewed by Gavin Barraclough. + + It turns out that we were corrupting phi nodes in case of overflow. The bug is + really obvious, but producing a test case that causes the badness is hard. Even + when the phi nodes do get corrupt, there's more that has to happen before it + causes incorrect execution - and I wasn't able to reproduce in any kind of + sensible reduced case. + + * dfg/DFGByteCodeParser.cpp: + (JSC::DFG::ByteCodeParser::processPhiStack): + +2011-11-21 Simon Hausmann <simon.hausmann@nokia.com> + + [Qt] Speed up debug builds. + https://bugs.webkit.org/show_bug.cgi?id=72882 + + Reviewed by Tor Arne Vestbø. + + * Target.pri: Make BUILDING_JavaScriptCore available earlier, so it can be + used by the build system. + +2011-11-21 Sheriff Bot <webkit.review.bot@gmail.com> + + Unreviewed, rolling out r100913. + http://trac.webkit.org/changeset/100913 + https://bugs.webkit.org/show_bug.cgi?id=72885 + + "Break Windows build" (Requested by kbalazs on #webkit). + + * JavaScriptCore.gypi: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * wtf/ParallelJobs.h: + * wtf/ParallelJobsGeneric.cpp: + * wtf/ParallelJobsGeneric.h: + (WTF::ParallelEnvironment::ParallelEnvironment): + (WTF::ParallelEnvironment::execute): + * wtf/Platform.h: + +2011-11-21 Balazs Kelemen <kbalazs@webkit.org> + + Enable ParallelJobs by default + https://bugs.webkit.org/show_bug.cgi?id=70032 + + Reviewed by Zoltan Herczeg. + + According to measurements on Mac and Linux it is a + considerable speedup for SVG on multicore. + + Remove the ENABLE(PARALLEL_JOBS) guard. + Fix build on Windows and Chromium. + + * JavaScriptCore.gypi: Add the files to the build. It was + missing for the gyp build system. + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + Export symbols. + * wtf/ParallelJobs.h: + * wtf/ParallelJobsGeneric.cpp: + (WTF::ParallelEnvironment::ParallelEnvironment): + (WTF::ParallelEnvironment::execute): + Deinline these to avoid exporting a lot of symbols. + These are non-trivial and called only once on a given object + so it doesn't seems to be worthwile to inline them. + Additionally fix a signed-unsigned comparison in the constructor. + * wtf/ParallelJobsGeneric.h: + * wtf/Platform.h: + +2011-11-21 Andy Wingo <wingo@igalia.com> + + Add .dir-locals.el file for better Emacs defaults + https://bugs.webkit.org/show_bug.cgi?id=72483 + + Reviewed by Xan Lopez. + + * .dir-locals.el: Set appropriate directory-local variables for Emacs. + +2011-11-21 Filip Pizlo <fpizlo@apple.com> + + Another attempt at a build fix. + + * dfg/DFGRepatch.h: + (JSC::DFG::dfgResetGetByID): + (JSC::DFG::dfgResetPutByID): + +2011-11-20 Filip Pizlo <fpizlo@apple.com> + + Unreviewed interpreter build fix. + + * bytecode/CodeBlock.cpp: + (JSC::CodeBlock::finalizeUnconditionally): + * dfg/DFGRepatch.h: + +2011-11-20 Yuqiang Xian <yuqiang.xian@intel.com> + + Improve modulo operation on 32bit platforms + https://bugs.webkit.org/show_bug.cgi?id=72501 + + Reviewed by Filip Pizlo. + + Extend softModulo to support X86 and MIPS in baseline JIT. + Apply the same optimization to 32bit DFG JIT. + 1% gain on Kraken, tested on Linux Core i7 Nehalem 32bit. + + * dfg/DFGSpeculativeJIT.h: + * dfg/DFGSpeculativeJIT32_64.cpp: + (JSC::DFG::SpeculativeJIT::compileSoftModulo): + (JSC::DFG::SpeculativeJIT::compile): + * jit/JITArithmetic32_64.cpp: + (JSC::JIT::emit_op_mod): + (JSC::JIT::emitSlow_op_mod): + * jit/JITOpcodes32_64.cpp: + (JSC::JIT::softModulo): + * wtf/Platform.h: + +2011-11-18 Filip Pizlo <fpizlo@apple.com> + + Inline caches that refer to otherwise dead objects should be cleared + https://bugs.webkit.org/show_bug.cgi?id=72311 + + Reviewed by Geoff Garen. + + DFG code blocks now participate in the weak reference harvester fixpoint + so that they only consider themselves to be live if either they are + currently executing, or their owner is live and all of their weak references + are live. If not, the relevant code blocks are jettisoned. + + Inline caches in both the old JIT and the DFG are now cleared if any of + their references are not marked at the end of a GC. + + This is performance-neutral on SunSpider, V8, and Kraken. With the clear- + all-code-on-GC policy that we currently have, it shows a slight reduction + in memory usage. If we turn that policy off, it's pretty easy to come up + with an example program that will cause ToT to experience linear heap + growth, while with this patch, the heap stays small and remains at a + constant size. + + * assembler/ARMv7Assembler.h: + (JSC::ARMv7Assembler::readCallTarget): + * assembler/MacroAssemblerARMv7.h: + (JSC::MacroAssemblerARMv7::readCallTarget): + * assembler/MacroAssemblerX86.h: + (JSC::MacroAssemblerX86::readCallTarget): + * assembler/MacroAssemblerX86_64.h: + (JSC::MacroAssemblerX86_64::readCallTarget): + * bytecode/CodeBlock.cpp: + (JSC::CodeBlock::visitAggregate): + (JSC::CodeBlock::performTracingFixpointIteration): + (JSC::CodeBlock::visitWeakReferences): + (JSC::CodeBlock::finalizeUnconditionally): + (JSC::CodeBlock::stronglyVisitStrongReferences): + (JSC::MethodCallLinkInfo::reset): + (JSC::ProgramCodeBlock::jettison): + (JSC::EvalCodeBlock::jettison): + (JSC::FunctionCodeBlock::jettison): + * bytecode/CodeBlock.h: + (JSC::CodeBlock::reoptimize): + (JSC::CodeBlock::shouldImmediatelyAssumeLivenessDuringScan): + * bytecode/Instruction.h: + (JSC::PolymorphicAccessStructureList::visitWeak): + * bytecode/StructureStubInfo.cpp: + (JSC::StructureStubInfo::visitWeakReferences): + * bytecode/StructureStubInfo.h: + (JSC::isGetByIdAccess): + (JSC::isPutByIdAccess): + (JSC::StructureStubInfo::reset): + * dfg/DFGJITCompiler.cpp: + (JSC::DFG::JITCompiler::link): + * dfg/DFGOperations.cpp: + * dfg/DFGRepatch.cpp: + (JSC::DFG::dfgRepatchByIdSelfAccess): + (JSC::DFG::dfgResetGetByID): + (JSC::DFG::dfgResetPutByID): + * dfg/DFGRepatch.h: + (JSC::DFG::dfgResetGetByID): + (JSC::DFG::dfgResetPutByID): + * jit/JIT.h: + * jit/JITPropertyAccess.cpp: + (JSC::JIT::resetPatchGetById): + (JSC::JIT::resetPatchPutById): + * jit/JITPropertyAccess32_64.cpp: + (JSC::JIT::resetPatchGetById): + (JSC::JIT::resetPatchPutById): + * jit/JITStubs.cpp: + (JSC::DEFINE_STUB_FUNCTION): + * jit/JITWriteBarrier.h: + (JSC::JITWriteBarrierBase::clearToMaxUnsigned): + +2011-11-20 Filip Pizlo <fpizlo@apple.com> + + Showing the data overlay in OpenStreetMap doesn't work, zooming partially broken + https://bugs.webkit.org/show_bug.cgi?id=71505 + + Reviewed by Oliver Hunt. + + The bytecode generator was assuming that call_varargs never reuses the base register + (i.e. the function being called) for the result. This is no longer true. + + * bytecompiler/BytecodeGenerator.cpp: + (JSC::BytecodeGenerator::emitCallVarargs): + * bytecompiler/BytecodeGenerator.h: + * bytecompiler/NodesCodegen.cpp: + (JSC::ApplyFunctionCallDotNode::emitBytecode): + +2011-11-20 Filip Pizlo <fpizlo@apple.com> + + DFG 32_64 should directly store double virtual registers on SetLocal + https://bugs.webkit.org/show_bug.cgi?id=72845 + + Reviewed by Oliver Hunt. + + 2% win on Kraken. + + * dfg/DFGSpeculativeJIT32_64.cpp: + (JSC::DFG::SpeculativeJIT::compile): + +2011-11-20 Noel Gordon <noel.gordon@gmail.com> + + [chromium] Remove DFG::JITCodeGenerator from the gyp projects + https://bugs.webkit.org/show_bug.cgi?id=72842 + + Reviewed by Filip Pizlo. + + dfg/DFGJITCodeGenerator.{h,cpp} were removed in r100244 + + * JavaScriptCore.gypi: remove dfg/DFGJITCodeGenerator.{h,cpp} + +2011-11-18 Daniel Bates <dbates@rim.com> + + Add CMake build infrastructure for the BlackBerry port + https://bugs.webkit.org/show_bug.cgi?id=72768 + + Reviewed by Antonio Gomes. + + * PlatformBlackBerry.cmake: Added. + * shell/PlatformBlackBerry.cmake: Added. + * wtf/PlatformBlackBerry.cmake: Added. + +2011-11-18 Filip Pizlo <fpizlo@apple.com> + + DFG JIT fails speculation on InstanceOf if the base is not an object + https://bugs.webkit.org/show_bug.cgi?id=72709 + + Reviewed by Geoff Garen. + + InstanceOf already leverages the fact that we only allow the default + hasInstance implementation. So, if the base is predicted to possibly + be not an object and the CFA has not yet proven otherwise, InstanceOf + will abstain from speculating cell and instead return false if the + base is not a cell. + + This appears to be a 1% speed-up on V8 on the V8 harness. 3-4% or so + speed-up in earley-boyer. Neutral according to bencher on SunSpider, + V8, and Kraken. In 32-bit, it's a 0.5% win on SunSpider and a 1.9% + win on V8 even on my harness, due to a 12.5% win on earley-boyer. + + I also took this opportunity to make the code for InstanceOf common + between the two JITs. This was partially successful, in that the + "common code" has a bunch of #if's, but overall it seems like a code + size reduction. + + * dfg/DFGAbstractState.cpp: + (JSC::DFG::AbstractState::execute): + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::compileInstanceOfForObject): + (JSC::DFG::SpeculativeJIT::compileInstanceOf): + * dfg/DFGSpeculativeJIT.h: + * dfg/DFGSpeculativeJIT32_64.cpp: + (JSC::DFG::SpeculativeJIT::compile): + * dfg/DFGSpeculativeJIT64.cpp: + (JSC::DFG::SpeculativeJIT::compile): + +2011-11-18 Mark Hahnenberg <mhahnenberg@apple.com> + + Forgot to completely de-virtualize isDynamicScope + https://bugs.webkit.org/show_bug.cgi?id=72763 + + Reviewed by Darin Adler. + + * runtime/JSActivation.h: Removed virtual keyword. + +2011-11-18 Filip Pizlo <fpizlo@apple.com> + + Crash in JSC::DFG::OSRExitCompiler::compileExit(JSC::DFG::OSRExit const&, JSC::DFG::SpeculationRecovery*) + https://bugs.webkit.org/show_bug.cgi?id=72292 + + Reviewed by Darin Adler. + + Fix this for 32_64. + + * dfg/DFGOSRExitCompiler32_64.cpp: + (JSC::DFG::OSRExitCompiler::compileExit): + +2011-11-18 Mark Hahnenberg <mhahnenberg@apple.com> + + De-virtualize ExecutableBase::intrinsic + https://bugs.webkit.org/show_bug.cgi?id=72548 + + Reviewed by Oliver Hunt. + + * runtime/Executable.cpp: + (JSC::ExecutableBase::intrinsic): Dynamic cast to NativeExecutable. If successful, call intrinsic, otherwise return default value. + * runtime/Executable.h: + * runtime/JSCell.h: + (JSC::jsDynamicCast): Add jsDynamicCast that duplicates the functionality of dynamic_cast in C++ but uses ClassInfo + rather than requiring C++ RTTI. + +2011-11-18 Patrick Gansterer <paroga@webkit.org> + + [CMake] Remove duplicate dtoa files from CMakeLists.txt + https://bugs.webkit.org/show_bug.cgi?id=72711 + + Reviewed by Brent Fulgham. + + * wtf/CMakeLists.txt: + +2011-11-17 Michael Saboff <msaboff@apple.com> + + [Qt] REGRESSION(r100510): Enable 8 Bit Strings in JavaScriptCore + https://bugs.webkit.org/show_bug.cgi?id=72602 + + Fixed StringImpl::foldCase by adding return in the case we need to handle + folding of 8 bit strings with Latin-1 characters. + + Fixed case where StringImpl::replace was using a char temp instead of an + LChar temp. + + Because of the second change, I changed other uses of char or + unsigned char to LChar. + + Reviewed by Zoltan Herczeg. + + * wtf/text/StringImpl.cpp: + (WTF::StringImpl::upper): + (WTF::StringImpl::foldCase): + (WTF::equal): + (WTF::equalIgnoringCase): + (WTF::StringImpl::replace): + +2011-11-17 Patrick Gansterer <paroga@webkit.org> + + [CMake] Move FAST_MALLOC specific lines from Platform*.cmake to CMakeLists.txt + https://bugs.webkit.org/show_bug.cgi?id=72644 + + Reviewed by Brent Fulgham. + + All ports need to do the same determination about fast malloc. Move the CMake code from + platform specific files into the generic one, so that additional ports can reuse it. + + * wtf/CMakeLists.txt: + * wtf/PlatformEfl.cmake: + * wtf/PlatformWinCE.cmake: + +2011-11-17 Mark Hahnenberg <mhahnenberg@apple.com> + + Add finalizer to JSActivation + https://bugs.webkit.org/show_bug.cgi?id=72575 + + Reviewed by Geoffrey Garen. + + * runtime/JSActivation.cpp: + (JSC::JSActivation::finishCreation): Attach finalize function to objects during creation. + (JSC::JSActivation::finalize): + * runtime/JSActivation.h: Replaced virtual destructor with static finalize function. + +2011-11-15 Filip Pizlo <fpizlo@apple.com> + + Code block jettisoning should be part of the GC's transitive closure + https://bugs.webkit.org/show_bug.cgi?id=72467 + + Reviewed by Geoff Garen. + + Replaced JettisonedCodeBlocks with DFGCodeBlocks. The latter knows about all + DFG code blocks (i.e. those that may be jettisoned, and may have inlined weak + references) and helps track what state each of those code blocks is in during + GC. The state consists of two flags; mayBeExecuting, which tells if the code block + is live from call frames; and isJettisoned, which tells if the code block is + not owned by any executable and thus should be deleted as soon as it is not + mayBeExecuting. + + - Not executing, Not jettisoned: The code block may or may not be reachable from + any executables, but it is owned by an executable, and hence should be + kept alive if its executable is live and if all of its weak references are + live. Otherwise it should be deleted during the current GC cycle, and its + outgoing references should not be scanned. + + - Not executing but jettisoned: The code block should be deleted as soon as + possible and none of its outgoing references should be scanned. + + - Executing but not jettisoned: The code block should be kept alive during this + GC cycle, and all of its outgoing references (including the weak ones) + should be scanned and marked strongly. The mayBeExecuting bit will be cleared at + the end of the GC cycle. + + - Executing and jettisoned: The code block should be kept alive during this + GC cycle, and all of its outgoing references (including the weak ones) + should be scanned and marked strongly. However, on the next GC cycle, it + will have its mayBeExecuting bit cleared and hence it will become a candidate + for immediate deletion provided it is not executing again. + + This is performance-neutral. + + * CMakeLists.txt: + * GNUmakefile.list.am: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * Target.pri: + * bytecode/CodeBlock.cpp: + (JSC::CodeBlock::~CodeBlock): + * bytecode/CodeBlock.h: + (JSC::CodeBlock::setJITCode): + (JSC::CodeBlock::DFGData::DFGData): + (JSC::DFGCodeBlocks::mark): + * heap/ConservativeRoots.cpp: + (JSC::ConservativeRoots::add): + * heap/ConservativeRoots.h: + * heap/DFGCodeBlocks.cpp: Added. + (JSC::DFGCodeBlocks::DFGCodeBlocks): + (JSC::DFGCodeBlocks::~DFGCodeBlocks): + (JSC::DFGCodeBlocks::jettison): + (JSC::DFGCodeBlocks::clearMarks): + (JSC::DFGCodeBlocks::deleteUnmarkedJettisonedCodeBlocks): + (JSC::DFGCodeBlocks::traceMarkedCodeBlocks): + * heap/DFGCodeBlocks.h: Added. + * heap/Heap.cpp: + (JSC::Heap::jettisonDFGCodeBlock): + (JSC::Heap::markRoots): + (JSC::Heap::collect): + * heap/Heap.h: + * heap/JettisonedCodeBlocks.cpp: Removed. + * heap/JettisonedCodeBlocks.h: Removed. + * interpreter/RegisterFile.cpp: + (JSC::RegisterFile::gatherConservativeRoots): + * interpreter/RegisterFile.h: + * runtime/Executable.cpp: + (JSC::jettisonCodeBlock): + +2011-11-16 Filip Pizlo <fpizlo@apple.com> + + Unreviewed, build fix for 32-bit. + + * dfg/DFGSpeculativeJIT32_64.cpp: + (JSC::DFG::SpeculativeJIT::compile): + +2011-11-16 Geoffrey Garen <ggaren@apple.com> + + Some CachedCall cleanup, in preparation for reversing argument order. + + Reviewed by Gavin Barraclough. + + * bytecode/CodeBlock.cpp: + (JSC::CodeBlock::stronglyVisitWeakReferences): A build fix for the interpreter, + so I can test it. + + * interpreter/CachedCall.h: + (JSC::CachedCall::CachedCall): Renamed argCount to argumentCount because + we are not that desperate for character saving. + + (JSC::CachedCall::setThis): + (JSC::CachedCall::setArgument): Adopted new 0-based argument indexing for + CallFrameClosure. + + * interpreter/CallFrameClosure.h: + (JSC::CallFrameClosure::setThis): + (JSC::CallFrameClosure::setArgument): + (JSC::CallFrameClosure::resetCallFrame): Provide 0-based argument indexing, + with an explicit setter for 'this', since that's how most clients think. + + * interpreter/Interpreter.cpp: + (JSC::Interpreter::prepareForRepeatCall): + * interpreter/Interpreter.h: Change argCount to argumentCountIncludingThis, + for clarity. + +2011-11-16 Mark Hahnenberg <mhahnenberg@apple.com> + + De-virtualize ScriptExecutable::unlinkCalls + https://bugs.webkit.org/show_bug.cgi?id=72546 + + Reviewed by Geoffrey Garen. + + * runtime/Executable.cpp: + (JSC::FunctionExecutable::~FunctionExecutable): Added an empty explicit virtual destructor to prevent a very odd compilation error + due to the fact that the compiler was trying to generate the implicit inline destructor in every translation unit, some of which + didn't have complete type information on the things that needed to be destructed in the implicit destructor. + * runtime/Executable.h: + (JSC::EvalExecutable::createStructure): Used new type value from JSType + (JSC::ProgramExecutable::createStructure): Ditto + (JSC::FunctionExecutable::createStructure): Ditto + (JSC::ScriptExecutable::unlinkCalls): Condition upon the type value, cast and call the corresponding unlinkCalls implementation. + * runtime/JSType.h: Added new values for EvalExecutable, ProgramExecutable, and FunctionExecutable. Remove explicit numbers, since + that just adds noise to patches and they currently have no significance. + +2011-11-16 Filip Pizlo <fpizlo@apple.com> + + JSC::CodeBlock should know which references generated by the DFG are weak + https://bugs.webkit.org/show_bug.cgi?id=72563 + + Reviewed by Geoff Garen. + + CodeBlock::m_dfgData now tracks weak references and weak reference transitions + (like ephemerons) generated by the DFG. The DFG makes sure to notify the + CodeBlock of all uses of weak references and weak reference transitions. + CodeBlock currently marks them strongly, since the weak marking logic is not + in place, yet. + + * bytecode/CodeBlock.cpp: + (JSC::CodeBlock::visitAggregate): + (JSC::CodeBlock::stronglyVisitWeakReferences): + * bytecode/CodeBlock.h: + (JSC::CodeBlock::appendWeakReference): + (JSC::CodeBlock::shrinkWeakReferencesToFit): + (JSC::CodeBlock::appendWeakReferenceTransition): + (JSC::CodeBlock::shrinkWeakReferenceTransitionsToFit): + (JSC::CodeBlock::WeakReferenceTransition::WeakReferenceTransition): + * bytecode/CodeOrigin.h: + (JSC::CodeOrigin::codeOriginOwner): + * dfg/DFGByteCodeParser.cpp: + (JSC::DFG::ByteCodeParser::handleCall): + (JSC::DFG::ByteCodeParser::handleInlining): + (JSC::DFG::ByteCodeParser::parseBlock): + * dfg/DFGJITCompiler.cpp: + (JSC::DFG::JITCompiler::link): + * dfg/DFGJITCompiler.h: + (JSC::DFG::JITCompiler::addWeakReference): + (JSC::DFG::JITCompiler::addWeakReferenceTransition): + (JSC::DFG::JITCompiler::branchWeakPtr): + * dfg/DFGSpeculativeJIT.h: + * dfg/DFGSpeculativeJIT32_64.cpp: + (JSC::DFG::SpeculativeJIT::compile): + * dfg/DFGSpeculativeJIT64.cpp: + (JSC::DFG::SpeculativeJIT::fillJSValue): + (JSC::DFG::SpeculativeJIT::compile): + +2011-11-16 Michael Saboff <msaboff@apple.com> + + LayoutTests for Debug Builds Crashes in JavaScriptCore/yarr/YarrInterpreter.cpp(185) + https://bugs.webkit.org/show_bug.cgi?id=72561 + + Removed #if USE(JSC) and therefore the ASSERT_NOT_REACHED(). + Simplified the code in the process. + + Reviewed by James Robinson. + + * yarr/YarrInterpreter.cpp: + (JSC::Yarr::Interpreter::CharAccess::CharAccess): + (JSC::Yarr::Interpreter::CharAccess::~CharAccess): + +2011-11-16 Geoffrey Garen <ggaren@apple.com> + + Interpreter build fixes. + + * bytecode/CodeBlock.h: + * interpreter/Interpreter.cpp: + (JSC::Interpreter::privateExecute): + +2011-11-16 Patrick Gansterer <paroga@webkit.org> + + Unreviewed. Build fix for !ENABLE(JIT) after r100363. + + * bytecode/CodeBlock.h: + +2011-11-16 Geoffrey Garen <ggaren@apple.com> + + Rolled back in r100375 and r100385 with 32-bit build fixed. + + * dfg/DFGOperations.cpp: + * jit/JITStubs.cpp: + (JSC::DEFINE_STUB_FUNCTION): + * runtime/ArgList.cpp: + (JSC::ArgList::getSlice): + * runtime/ArgList.h: + * runtime/JSArray.cpp: + (JSC::JSArray::finishCreation): + * runtime/JSArray.h: + (JSC::JSArray::create): + * runtime/JSGlobalObject.h: + (JSC::constructArray): + +2011-11-16 Filip Pizlo <fpizlo@apple.com> + + DFG global variable CSE mishandles the cross-global-object inlining corner case + https://bugs.webkit.org/show_bug.cgi?id=72542 + + Reviewed by Geoff Garen. + + Moved code to get the global object for a code origin into CodeBlock, so it is + more broadly accessible. Fixed CSE to compare both the variable number, and the + global object, before deciding to perform elimination. + + * bytecode/CodeBlock.h: + (JSC::CodeBlock::globalObjectFor): + * dfg/DFGAssemblyHelpers.h: + (JSC::DFG::AssemblyHelpers::globalObjectFor): + * dfg/DFGPropagator.cpp: + (JSC::DFG::Propagator::globalVarLoadElimination): + (JSC::DFG::Propagator::performNodeCSE): + +2011-11-16 Michael Saboff <msaboff@apple.com> + + Enable 8 Bit Strings in JavaScriptCore + https://bugs.webkit.org/show_bug.cgi?id=71337 + + This patch turns on 8 bit strings in StringImpl and enables + their use in JavaScriptCore. Some of the changes are to + turn on code that had been staged (Lexer.cpp, Identifier.cpp, + SmallStrings.cpp and some of StringImpl.{h,cpp}). + Other changes are minor fixes to make 8 bit strings work + (UString.h, StringImpl::getData16SlowCase()). + Changed StringBuffer to be a templated class based on character + type. This change rippled into WebCore code as well. + + Reviewed by Geoffrey Garen. + + * JavaScriptCore.exp: + * parser/Lexer.cpp: + (JSC::::append8): Changed to use 8 bit buffers. + (JSC::::parseIdentifier): Changed to use 8 bit buffers. + (JSC::::parseString): Changed to use 8 bit buffers. + * runtime/Identifier.cpp: + (JSC::IdentifierCStringTranslator::translate): 8 bit version keeps data 8 bit + (JSC::Identifier::toUInt32FromCharacters): Templated helper. + (JSC::Identifier::toUInt32): Added 8 bit optimized path. + * runtime/SmallStrings.cpp: + (JSC::SmallStringsStorage::SmallStringsStorage): Changed to be 8 bit strings + * runtime/UString.h: + (JSC::UString::characters): Now calls StringImpl::characters() + * wtf/Forward.h: + * wtf/text/StringBuffer.h: Made StringBuffer a template base on character type. + (WTF::StringBuffer::StringBuffer): + (WTF::StringBuffer::characters): + (WTF::StringBuffer::release): + * wtf/text/StringImpl.cpp: + (WTF::StringImpl::create): + (WTF::StringImpl::getData16SlowCase): Fixed null terminated case. + (WTF::StringImpl::removeCharacters): Added 8 bit path. + (WTF::StringImpl::simplifyMatchedCharactersToSpace): + (WTF::StringImpl::simplifyWhiteSpace): + (WTF::equal): Removed bug from code copied from null terminated version. + (WTF::StringImpl::adopt): Added 8 bit path. + (WTF::StringImpl::createWithTerminatingNullCharacter): Fixed 8 bi flag propagation. + * wtf/text/StringImpl.h: + (WTF::StringImpl::StringImpl): Added new 8 bit constructor. + (WTF::StringImpl::characters8): Removed ASSERT_NOT_REACHED(). + (WTF::getCharacters<LChar>): Added templated accessor for 8 bit strings. + (WTF::getCharacters<UChar>): Added templated accessor for 16 bit strings. + * wtf/text/WTFString.h: + (WTF::String::adopt): Changed to use StringBuffer template. + +2011-11-16 Mark Hahnenberg <mhahnenberg@apple.com> + + De-virtualize ExecutableBase::clearCodeVirtual + https://bugs.webkit.org/show_bug.cgi?id=72337 + + Reviewed by Darin Adler. + + Added static finalize functions to the subclasses of ExecutableBase that provide an implementation + of clearCodeVirtual, changed all of the clearCodeVirtual methods to non-virtual clearCode method, + and had the finalize functions call the corresponding clearCode methods. + + * runtime/Executable.cpp: + (JSC::ExecutableBase::clearCode): + (JSC::NativeExecutable::finalize): + (JSC::EvalExecutable::finalize): + (JSC::EvalExecutable::clearCode): + (JSC::ProgramExecutable::finalize): + (JSC::ProgramExecutable::clearCode): + (JSC::FunctionExecutable::discardCode): + (JSC::FunctionExecutable::finalize): + (JSC::FunctionExecutable::clearCode): + * runtime/Executable.h: + (JSC::ExecutableBase::finishCreation): + (JSC::NativeExecutable::create): + (JSC::EvalExecutable::create): + (JSC::ProgramExecutable::create): + (JSC::FunctionExecutable::create): + +2011-11-16 Yusuke Suzuki <utatane.tea@gmail.com> + + String new RegExp('\n').toString() returns is invalid RegularExpressionLiteral + https://bugs.webkit.org/show_bug.cgi?id=71572 + + Reviewed by Gavin Barraclough and Darin Adler. + + * runtime/RegExpObject.cpp: + (JSC::regExpObjectSource): + +2011-11-16 Darin Adler <darin@apple.com> + + Specialize HashTraits for OwnPtr to use PassOwnPtr and raw pointer + https://bugs.webkit.org/show_bug.cgi?id=72475 + + Reviewed by Adam Roben. + + * wtf/HashTraits.h: Specialize HashTraits for OwnPtr. + Do overloads so we can pass a nullptr and also be sure to get the + raw pointer type from the OwnPtr template so we handle both forms + of OwnPtr: OwnPtr<T> and OwnPtr<T*>. + +2011-11-16 Simon Hausmann <simon.hausmann@nokia.com> + + [Qt] Centralize hide_symbols and ensure all libs are built with symbol visibility & bsymbolic_functions + + Reviewed by Tor Arne Vestbø. + + * Target.pri: Eliminate duplicated symbol stuff that lives now in default_post.prf. + +2011-11-16 Simon Hausmann <simon.hausmann@nokia.com> + + Unreviewed, rolling out r100266. + http://trac.webkit.org/changeset/100266 + + Broke WTR. + + * Target.pri: + +2011-11-16 Darin Adler <darin@apple.com> + + Add a "pass type" and "peek type" concept to HashTraits + https://bugs.webkit.org/show_bug.cgi?id=72473 + + Reviewed by Filip Pizlo. + + * wtf/HashTraits.h: Added the pass type and peek type. + For OwnPtr, the pass type will be PassOwnPtr and the peek + type will be a raw pointer. + +2011-11-16 Darin Adler <darin@apple.com> + + Fix some hash traits that don't derive from the base hash traits + https://bugs.webkit.org/show_bug.cgi?id=72470 + + Reviewed by Filip Pizlo. + + Hash traits structures need to derive from the base hash traits in + HashTraits.h, but some were not. This is needed for compatibility with + some additional traits we will be adding to make OwnPtr work with HashMap. + + * runtime/Identifier.h: Make IdentifierMapIndexHashTraits derive from + HashTraits<int>. This enabled removal of all the members except for the + ones that control the empty value, because this is otherwise the same + as the standard int hash. + + * runtime/SymbolTable.h: Changed SymbolTableIndexHashTraits to derive + from HashTraits<SymbolTableEntry> and removed redundant members. + +2011-11-15 Sheriff Bot <webkit.review.bot@gmail.com> + + Unreviewed, rolling out r100375 and r100385. + http://trac.webkit.org/changeset/100375 + http://trac.webkit.org/changeset/100385 + https://bugs.webkit.org/show_bug.cgi?id=72465 + + They broke 32 bit builds on Qt (Requested by ossy on #webkit). + + * dfg/DFGOperations.cpp: + * jit/JITStubs.cpp: + (JSC::DEFINE_STUB_FUNCTION): + * runtime/ArgList.cpp: + (JSC::ArgList::getSlice): + * runtime/ArgList.h: + (JSC::ArgList::ArgList): + * runtime/JSArray.cpp: + * runtime/JSArray.h: + * runtime/JSGlobalObject.h: + +2011-11-15 George Staikos <staikos@webkit.org> + + Remove the guard page from the addressable stack region on QNX. + https://bugs.webkit.org/show_bug.cgi?id=72455 + + Reviewed by Daniel Bates. + + * wtf/StackBounds.cpp: + (WTF::StackBounds::initialize): + +2011-11-15 Michael Saboff <msaboff@apple.com> + + Towards 8 bit Strings - Update utf8() and ascii() methods for 8 bit strings + https://bugs.webkit.org/show_bug.cgi?id=72323 + + Added 8 bit optimized paths for String and UString ascii() and utf8() methods. + + Added String::characters8(), characters16() and is8Bit() helper methods. + + Added an new Unicode::convertLatin1ToUTF8() method that works on + LChar (8 bit) strings that is a stripped down version of convertUTF16ToUTF8(). + + Reviewed by Geoff Garen. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * runtime/UString.cpp: + (JSC::UString::utf8): + * wtf/text/WTFString.cpp: + (WTF::String::ascii): + (WTF::String::utf8): + * wtf/text/WTFString.h: + (WTF::String::characters8): + (WTF::String::characters16): + (WTF::String::is8Bit): + (WTF::LChar): + (WTF::UChar): + * wtf/unicode/UTF8.cpp: + (WTF::Unicode::convertLatin1ToUTF8): + * wtf/unicode/UTF8.h: + * wtf/unicode/Unicode.h: + +2011-11-15 Darin Adler <darin@apple.com> + + REGRESSION (r98887): ParserArena and Keywords leaking + https://bugs.webkit.org/show_bug.cgi?id=72428 + + Reviewed by Sam Weinig. + + * parser/Lexer.h: Made Keywords destructor public since OwnPtr and PassOwnPtr + need to be able to destroy it. + + * parser/Parser.cpp: + (JSC::Parser::Parser): Use get now that parserArena is an OwnPtr. + + * runtime/JSGlobalData.cpp: + (JSC::JSGlobalData::JSGlobalData): Use adoptPtr to initialize OwnPtr members. + + * runtime/JSGlobalData.h: Make parserArena and keywords be OwnPtr. + +2011-11-15 Geoffrey Garen <ggaren@apple.com> + + Removed another use of ArgList that baked in the assumption that arguments + are forward in the regiter file. + + Reviewed by Sam Weinig. + + * dfg/DFGOperations.cpp: + * jit/JITStubs.cpp: + (JSC::DEFINE_STUB_FUNCTION): Use our new array creation API, instead of + working through ArgList. + + * runtime/ArgList.h: Removed! + +2011-11-15 Geoffrey Garen <ggaren@apple.com> + + Removed a use of ArgList that baked in the assumption that arguments + are forward in the regiter file. + + Reviewed by Sam Weinig. + + * dfg/DFGOperations.cpp: + * jit/JITStubs.cpp: + (JSC::DEFINE_STUB_FUNCTION): Use new API. + + * runtime/ArgList.cpp: + (JSC::ArgList::getSlice): No need to provide an arbitrary constructor -- + getSlice can do the right thing by using its rights to private data. + + * runtime/ArgList.h: Removed constructor that took a forward-contiguous + set of arguments. + + * runtime/JSArray.cpp: + (JSC::JSArray::finishCreation): + * runtime/JSArray.h: + (JSC::JSArray::create): + * runtime/JSGlobalObject.h: + (JSC::constructArray): Added explicit support for creating an array from + a pre-allocated set of values, so we could stop relying on the ArgList + API we want to remove. + +2011-11-15 Filip Pizlo <fpizlo@apple.com> + + Crash in JSC::DFG::OSRExitCompiler::compileExit(JSC::DFG::OSRExit const&, JSC::DFG::SpeculationRecovery*) + https://bugs.webkit.org/show_bug.cgi?id=72292 + + Reviewed by Geoff Garen. + + We need to be careful about how we look for the baseline CodeBlock if we're lazy-compiling + an OSR exit after our CodeBlock has been jettisoned. In short, use CodeBlock::baselineVersion() + instead of CodeBlock::alternative(). + + No performance effect. + + No tests because all of our heuristics work very hard to make sure that this never happens in + the first place. OSR exits are rare by design, and jettisoning of CodeBlocks (i.e. recompilation) + is even rarer. Furthermore, OSR exits after a CodeBlock has been jettisoned is rarer still + because the whole point of jettisoning is to bring the probability of future OSR exits to as + close to zero as possible. But even that isn't enough to trigger this bug; it requires the OSR + exit after a jettison to be the first of its kind; our whole design tries to ensure that + CodeBlocks tend to OSR exit at a handful (i.e. 1 in most cases) of points, and since jettisoning + is triggered by OSR, in most sane cases the OSR exits after jettison will not require lazy OSR + compilation. So this is a truly evil case, and any test for it would be quite fragile. + + * bytecode/CodeBlock.h: + (JSC::CodeBlock::specializationKind): + (JSC::CodeBlock::largeFailCountThreshold): + (JSC::CodeBlock::largeFailCountThresholdForLoop): + * dfg/DFGAssemblyHelpers.h: + (JSC::DFG::AssemblyHelpers::AssemblyHelpers): + (JSC::DFG::AssemblyHelpers::baselineCodeBlockFor): + (JSC::DFG::AssemblyHelpers::baselineCodeBlock): + * dfg/DFGDriver.cpp: + (JSC::DFG::compile): + * dfg/DFGOSRExitCompiler.cpp: + * dfg/DFGOSRExitCompiler64.cpp: + (JSC::DFG::OSRExitCompiler::compileExit): + +2011-11-15 Geoffrey Garen <ggaren@apple.com> + + Use MarkedArgumentBuffer to avoid making assumptions about argument order + https://bugs.webkit.org/show_bug.cgi?id=72418 + + Reviewed by Sam Weinig. + + A step toward reversing the argument order. + + * runtime/JSONObject.cpp: + (JSC::Stringifier::toJSON): + (JSC::Stringifier::appendStringifiedValue): + (JSC::Walker::callReviver): Don't assume that ArgList wants to point + at arguments in forward order. Instead, use MarkedArgumentBuffer, which + will make the decision for us. + +2011-11-15 Filip Pizlo <fpizlo@apple.com> + + DFG should distinguish between constants in the constant pool and weak + constants added as artifacts of code generation + https://bugs.webkit.org/show_bug.cgi?id=72367 + + Reviewed by Geoff Garen. + + Added the notion of a WeakJSConstant, which is like a JSConstant except that + it can only refer to JSCell*. Currently all WeakJSConstants are also backed + by constants in the constant pool, since weak references originated from + machine code are not yet properly handled. + + Replaced CheckMethod, and MethodCheckData, with a combination of WeakJSConstant + and CheckStructure. This results in improved CSE, leading to a 1% win on V8. + + * dfg/DFGAbstractState.cpp: + (JSC::DFG::AbstractState::execute): + * dfg/DFGByteCodeParser.cpp: + (JSC::DFG::ByteCodeParser::cellConstant): + (JSC::DFG::ByteCodeParser::prepareToParseBlock): + (JSC::DFG::ByteCodeParser::parseBlock): + * dfg/DFGGraph.cpp: + (JSC::DFG::Graph::dump): + * dfg/DFGGraph.h: + (JSC::DFG::Graph::getJSConstantPrediction): + (JSC::DFG::Graph::valueOfJSConstant): + (JSC::DFG::Graph::valueOfInt32Constant): + (JSC::DFG::Graph::valueOfNumberConstant): + (JSC::DFG::Graph::valueOfBooleanConstant): + * dfg/DFGNode.h: + (JSC::DFG::Node::isWeakConstant): + (JSC::DFG::Node::hasConstant): + (JSC::DFG::Node::weakConstant): + (JSC::DFG::Node::valueOfJSConstant): + (JSC::DFG::Node::isInt32Constant): + (JSC::DFG::Node::isDoubleConstant): + (JSC::DFG::Node::isNumberConstant): + (JSC::DFG::Node::isBooleanConstant): + (JSC::DFG::Node::hasIdentifier): + * dfg/DFGPropagator.cpp: + (JSC::DFG::Propagator::propagateNodePredictions): + (JSC::DFG::Propagator::performNodeCSE): + * dfg/DFGSpeculativeJIT32_64.cpp: + (JSC::DFG::SpeculativeJIT::compile): + * dfg/DFGSpeculativeJIT64.cpp: + (JSC::DFG::SpeculativeJIT::compile): + +2011-11-15 Michael Saboff <msaboff@apple.com> + + Towards 8 bit Strings - Initial JS String Tuning + https://bugs.webkit.org/show_bug.cgi?id=72326 + + Added 8 bit optimized paths for the methods below. + + Reviewed by Geoffrey Garen. + + * runtime/JSString.h: + (JSC::jsSubstring8): + * runtime/StringPrototype.cpp: + (JSC::jsSpliceSubstrings): + (JSC::jsSpliceSubstringsWithSeparators): + (JSC::stringProtoFuncReplace): + (JSC::stringProtoFuncCharCodeAt): + +2011-11-15 Gavin Barraclough <barraclough@apple.com> + + Result of Error.prototype.toString not ES5 conformant + https://bugs.webkit.org/show_bug.cgi?id=70889 + + Reviewed by Oliver Hunt. + + * runtime/ErrorPrototype.cpp: + (JSC::errorProtoFuncToString): + +2011-11-15 Simon Hausmann <simon.hausmann@nokia.com> + + [Qt] Centralize hide_symbols and ensure all libs are built with symbol visibility & bsymbolic_functions + + Reviewed by Tor Arne Vestbø. + + * Target.pri: Eliminate duplicated symbol stuff that lives now in default_post.prf. + +2011-11-15 Yuqiang Xian <yuqiang.xian@intel.com> + + Remove DFGJITCompilerInlineMethods + https://bugs.webkit.org/show_bug.cgi?id=72366 + + Reviewed by Filip Pizlo. + + Those methods are actually seldom used. Modify the few such places and + remove DFGJITCompilerInlineMethods stuffs totally. + + * GNUmakefile.list.am: + * JavaScriptCore.xcodeproj/project.pbxproj: + * dfg/DFGJITCompiler.h: + (JSC::DFG::JITCompiler::addressOfDoubleConstant): + * dfg/DFGJITCompilerInlineMethods.h: Removed. + * dfg/DFGSpeculativeJIT.cpp: + * dfg/DFGSpeculativeJIT.h: + (JSC::DFG::SpeculativeJIT::silentFillFPR): + * dfg/DFGSpeculativeJIT32_64.cpp: + (JSC::DFG::SpeculativeJIT::fillJSValue): + (JSC::DFG::SpeculativeJIT::cachedGetMethod): + +2011-11-14 Filip Pizlo <fpizlo@apple.com> + + DFG::SpeculativeJIT and DFG::JITCodeGenerator should be combined + https://bugs.webkit.org/show_bug.cgi?id=72348 + + Reviewed by Gavin Barraclough. + + Moved all of JITCodeGenerator into SpeculativeJIT. + + * CMakeLists.txt: + * GNUmakefile.list.am: + * JavaScriptCore.xcodeproj/project.pbxproj: + * Target.pri: + * dfg/DFGJITCodeGenerator.cpp: Removed. + * dfg/DFGJITCodeGenerator.h: Removed. + * dfg/DFGJITCodeGenerator32_64.cpp: Removed. + * dfg/DFGJITCodeGenerator64.cpp: Removed. + * dfg/DFGJITCompiler.cpp: + * dfg/DFGRepatch.cpp: + (JSC::DFG::generateProtoChainAccessStub): + (JSC::DFG::tryCacheGetByID): + (JSC::DFG::tryCachePutByID): + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::clearGenerationInfo): + (JSC::DFG::SpeculativeJIT::fillStorage): + (JSC::DFG::SpeculativeJIT::useChildren): + (JSC::DFG::SpeculativeJIT::isStrictInt32): + (JSC::DFG::SpeculativeJIT::isKnownInteger): + (JSC::DFG::SpeculativeJIT::isKnownNumeric): + (JSC::DFG::SpeculativeJIT::isKnownCell): + (JSC::DFG::SpeculativeJIT::isKnownNotCell): + (JSC::DFG::SpeculativeJIT::isKnownNotInteger): + (JSC::DFG::SpeculativeJIT::isKnownNotNumber): + (JSC::DFG::SpeculativeJIT::isKnownBoolean): + (JSC::DFG::SpeculativeJIT::writeBarrier): + (JSC::DFG::SpeculativeJIT::markCellCard): + (JSC::DFG::SpeculativeJIT::nonSpeculativeCompare): + (JSC::DFG::SpeculativeJIT::nonSpeculativeStrictEq): + (JSC::DFG::dataFormatString): + (JSC::DFG::SpeculativeJIT::dump): + (JSC::DFG::SpeculativeJIT::checkConsistency): + (JSC::DFG::GPRTemporary::GPRTemporary): + (JSC::DFG::GPRTemporary::adopt): + (JSC::DFG::FPRTemporary::FPRTemporary): + * dfg/DFGSpeculativeJIT.h: + (JSC::DFG::SpeculativeJIT::at): + (JSC::DFG::SpeculativeJIT::lock): + (JSC::DFG::SpeculativeJIT::unlock): + (JSC::DFG::SpeculativeJIT::canReuse): + (JSC::DFG::SpeculativeJIT::reuse): + (JSC::DFG::SpeculativeJIT::allocate): + (JSC::DFG::SpeculativeJIT::tryAllocate): + (JSC::DFG::SpeculativeJIT::fprAllocate): + (JSC::DFG::SpeculativeJIT::isFilled): + (JSC::DFG::SpeculativeJIT::isFilledDouble): + (JSC::DFG::SpeculativeJIT::use): + (JSC::DFG::SpeculativeJIT::selectScratchGPR): + (JSC::DFG::SpeculativeJIT::silentSpillGPR): + (JSC::DFG::SpeculativeJIT::silentSpillFPR): + (JSC::DFG::SpeculativeJIT::silentFillGPR): + (JSC::DFG::SpeculativeJIT::silentFillFPR): + (JSC::DFG::SpeculativeJIT::silentSpillAllRegisters): + (JSC::DFG::SpeculativeJIT::silentFillAllRegisters): + (JSC::DFG::SpeculativeJIT::boxDouble): + (JSC::DFG::SpeculativeJIT::unboxDouble): + (JSC::DFG::SpeculativeJIT::spill): + (JSC::DFG::SpeculativeJIT::isConstant): + (JSC::DFG::SpeculativeJIT::isJSConstant): + (JSC::DFG::SpeculativeJIT::isInt32Constant): + (JSC::DFG::SpeculativeJIT::isDoubleConstant): + (JSC::DFG::SpeculativeJIT::isNumberConstant): + (JSC::DFG::SpeculativeJIT::isBooleanConstant): + (JSC::DFG::SpeculativeJIT::isFunctionConstant): + (JSC::DFG::SpeculativeJIT::valueOfInt32Constant): + (JSC::DFG::SpeculativeJIT::valueOfNumberConstant): + (JSC::DFG::SpeculativeJIT::addressOfDoubleConstant): + (JSC::DFG::SpeculativeJIT::valueOfJSConstant): + (JSC::DFG::SpeculativeJIT::valueOfBooleanConstant): + (JSC::DFG::SpeculativeJIT::valueOfFunctionConstant): + (JSC::DFG::SpeculativeJIT::isNullConstant): + (JSC::DFG::SpeculativeJIT::identifier): + (JSC::DFG::SpeculativeJIT::flushRegisters): + (JSC::DFG::SpeculativeJIT::isFlushed): + (JSC::DFG::SpeculativeJIT::valueOfJSConstantAsImmPtr): + (JSC::DFG::SpeculativeJIT::bitOp): + (JSC::DFG::SpeculativeJIT::shiftOp): + (JSC::DFG::SpeculativeJIT::detectPeepHoleBranch): + (JSC::DFG::SpeculativeJIT::addressOfCallData): + (JSC::DFG::SpeculativeJIT::tagOfCallData): + (JSC::DFG::SpeculativeJIT::payloadOfCallData): + (JSC::DFG::SpeculativeJIT::integerResult): + (JSC::DFG::SpeculativeJIT::noResult): + (JSC::DFG::SpeculativeJIT::cellResult): + (JSC::DFG::SpeculativeJIT::booleanResult): + (JSC::DFG::SpeculativeJIT::jsValueResult): + (JSC::DFG::SpeculativeJIT::storageResult): + (JSC::DFG::SpeculativeJIT::doubleResult): + (JSC::DFG::SpeculativeJIT::initConstantInfo): + (JSC::DFG::SpeculativeJIT::resetCallArguments): + (JSC::DFG::SpeculativeJIT::addCallArgument): + (JSC::DFG::SpeculativeJIT::setupArguments): + (JSC::DFG::SpeculativeJIT::setupArgumentsExecState): + (JSC::DFG::SpeculativeJIT::setupArgumentsWithExecState): + (JSC::DFG::SpeculativeJIT::setupTwoStubArgs): + (JSC::DFG::SpeculativeJIT::setupStubArguments): + (JSC::DFG::SpeculativeJIT::callOperation): + (JSC::DFG::SpeculativeJIT::appendCallWithExceptionCheck): + (JSC::DFG::SpeculativeJIT::appendCallWithExceptionCheckSetResult): + (JSC::DFG::SpeculativeJIT::setupResults): + (JSC::DFG::SpeculativeJIT::appendCallSetResult): + (JSC::DFG::SpeculativeJIT::addBranch): + (JSC::DFG::SpeculativeJIT::linkBranches): + (JSC::DFG::SpeculativeJIT::block): + (JSC::DFG::SpeculativeJIT::checkConsistency): + (JSC::DFG::SpeculativeJIT::BranchRecord::BranchRecord): + (JSC::DFG::IntegerOperand::IntegerOperand): + (JSC::DFG::IntegerOperand::~IntegerOperand): + (JSC::DFG::IntegerOperand::index): + (JSC::DFG::IntegerOperand::format): + (JSC::DFG::IntegerOperand::gpr): + (JSC::DFG::IntegerOperand::use): + (JSC::DFG::DoubleOperand::DoubleOperand): + (JSC::DFG::DoubleOperand::~DoubleOperand): + (JSC::DFG::DoubleOperand::index): + (JSC::DFG::DoubleOperand::fpr): + (JSC::DFG::DoubleOperand::use): + (JSC::DFG::JSValueOperand::JSValueOperand): + (JSC::DFG::JSValueOperand::~JSValueOperand): + (JSC::DFG::JSValueOperand::index): + (JSC::DFG::JSValueOperand::gpr): + (JSC::DFG::JSValueOperand::jsValueRegs): + (JSC::DFG::JSValueOperand::isDouble): + (JSC::DFG::JSValueOperand::fill): + (JSC::DFG::JSValueOperand::tagGPR): + (JSC::DFG::JSValueOperand::payloadGPR): + (JSC::DFG::JSValueOperand::fpr): + (JSC::DFG::JSValueOperand::use): + (JSC::DFG::StorageOperand::StorageOperand): + (JSC::DFG::StorageOperand::~StorageOperand): + (JSC::DFG::StorageOperand::index): + (JSC::DFG::StorageOperand::gpr): + (JSC::DFG::StorageOperand::use): + (JSC::DFG::GPRTemporary::~GPRTemporary): + (JSC::DFG::GPRTemporary::gpr): + (JSC::DFG::FPRTemporary::~FPRTemporary): + (JSC::DFG::FPRTemporary::fpr): + (JSC::DFG::FPRTemporary::FPRTemporary): + (JSC::DFG::GPRResult::GPRResult): + (JSC::DFG::GPRResult2::GPRResult2): + (JSC::DFG::FPRResult::FPRResult): + (JSC::DFG::FPRResult::lockedResult): + (JSC::DFG::SpeculativeJIT::SpeculativeJIT): + * dfg/DFGSpeculativeJIT32_64.cpp: + (JSC::DFG::SpeculativeJIT::fillInteger): + (JSC::DFG::SpeculativeJIT::fillDouble): + (JSC::DFG::SpeculativeJIT::fillJSValue): + (JSC::DFG::SpeculativeJIT::nonSpeculativeValueToNumber): + (JSC::DFG::SpeculativeJIT::nonSpeculativeValueToInt32): + (JSC::DFG::SpeculativeJIT::nonSpeculativeUInt32ToNumber): + (JSC::DFG::SpeculativeJIT::nonSpeculativeKnownConstantArithOp): + (JSC::DFG::SpeculativeJIT::nonSpeculativeBasicArithOp): + (JSC::DFG::SpeculativeJIT::cachedGetById): + (JSC::DFG::SpeculativeJIT::cachedPutById): + (JSC::DFG::SpeculativeJIT::cachedGetMethod): + (JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeCompareNull): + (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeBranchNull): + (JSC::DFG::SpeculativeJIT::nonSpeculativeCompareNull): + (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeBranch): + (JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeCompare): + (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeStrictEq): + (JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeStrictEq): + (JSC::DFG::SpeculativeJIT::emitCall): + * dfg/DFGSpeculativeJIT64.cpp: + (JSC::DFG::SpeculativeJIT::fillInteger): + (JSC::DFG::SpeculativeJIT::fillDouble): + (JSC::DFG::SpeculativeJIT::fillJSValue): + (JSC::DFG::SpeculativeJIT::nonSpeculativeValueToNumber): + (JSC::DFG::SpeculativeJIT::nonSpeculativeValueToInt32): + (JSC::DFG::SpeculativeJIT::nonSpeculativeUInt32ToNumber): + (JSC::DFG::SpeculativeJIT::nonSpeculativeKnownConstantArithOp): + (JSC::DFG::SpeculativeJIT::nonSpeculativeBasicArithOp): + (JSC::DFG::SpeculativeJIT::cachedGetById): + (JSC::DFG::SpeculativeJIT::cachedPutById): + (JSC::DFG::SpeculativeJIT::cachedGetMethod): + (JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeCompareNull): + (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeBranchNull): + (JSC::DFG::SpeculativeJIT::nonSpeculativeCompareNull): + (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeBranch): + (JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeCompare): + (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeStrictEq): + (JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeStrictEq): + (JSC::DFG::SpeculativeJIT::emitCall): + * runtime/JSFunction.h: + +2011-11-14 Filip Pizlo <fpizlo@apple.com> + + Weak reference harvesters should run to fixpoint + https://bugs.webkit.org/show_bug.cgi?id=72346 + + Reviewed by Oliver Hunt. + + * heap/Heap.cpp: + (JSC::Heap::markRoots): + * heap/ListableHandler.h: + (JSC::ListableHandler::next): + (JSC::ListableHandler::List::head): + (JSC::ListableHandler::List::removeNext): + (JSC::ListableHandler::List::removeAll): + * heap/MarkStack.cpp: + (JSC::MarkStackThreadSharedData::reset): + (JSC::SlotVisitor::harvestWeakReferences): + * heap/MarkStack.h: + (JSC::MarkStack::isEmpty): + +2011-11-14 Oliver Hunt <oliver@apple.com> + + Start migrating typed array impl types to WTF + https://bugs.webkit.org/show_bug.cgi?id=72336 + + Reviewed by Geoffrey Garen. + + Add typed array impls to WTF forwarding header. + + * wtf/Forward.h: + +2011-11-14 Julien Chaffraix <jchaffraix@webkit.org> + + Add --css-grid-layout to build-webkit and the build systems + https://bugs.webkit.org/show_bug.cgi?id=72320 + + Reviewed by Ojan Vafai. + + * Configurations/FeatureDefines.xcconfig: + +2011-11-14 Geoffrey Garen <ggaren@apple.com> + + A little bit of arguments / activation cleanup + https://bugs.webkit.org/show_bug.cgi?id=72339 + + Reviewed by Gavin Barraclough. + + Renamed copyRegisters => tearOff to match bytecode and other terminology. + + Renamed setActivation => didTearOffActivation to indicate that this is a + notification the object may choose to ignore. Moved "Should I ignore?" + code into the arguments object to avoid duplication elsewhere. + + * interpreter/Interpreter.cpp: + (JSC::Interpreter::unwindCallFrame): + (JSC::Interpreter::privateExecute): + (JSC::Interpreter::retrieveArguments): + * jit/JITStubs.cpp: + (JSC::DEFINE_STUB_FUNCTION): + * runtime/Arguments.h: + (JSC::Arguments::createAndTearOff): + (JSC::Arguments::didTearOffActivation): + (JSC::Arguments::finishCreationButDontTearOff): + (JSC::Arguments::finishCreation): + (JSC::Arguments::finishCreationAndTearOff): + (JSC::Arguments::tearOff): + + * runtime/JSActivation.h: + (JSC::JSActivation::tearOff): Moved Activation's code into its own header + because that's where it belongs. + +2011-11-14 Gavin Barraclough <barraclough@apple.com> + + Should sign the jsc binary + https://bugs.webkit.org/show_bug.cgi?id=72332 + + Reviewed by David Kilzer. + + * Configurations/JSC.xcconfig: + * entitlements.plist: Added. + +2011-11-14 Filip Pizlo <fpizlo@apple.com> + + DFG's inline references to objects should be tracked + https://bugs.webkit.org/show_bug.cgi?id=72313 + + Reviewed by Gavin Barraclough. + + Added a pinCell() method in the parser that currently creates a + dummy constant in CodeBlock. Added calls to pinCell() wherever the + DFG would inline a constant reference that the original code would + not have referred to. + + * dfg/DFGByteCodeParser.cpp: + (JSC::DFG::ByteCodeParser::getCellConstantIndex): + (JSC::DFG::ByteCodeParser::pinCell): + (JSC::DFG::ByteCodeParser::cellConstant): + (JSC::DFG::ByteCodeParser::handleCall): + (JSC::DFG::ByteCodeParser::handleInlining): + (JSC::DFG::ByteCodeParser::parseBlock): + +2011-11-14 Filip Pizlo <fpizlo@apple.com> + + DFG put_by_id transition optimizations test the wrong structures + https://bugs.webkit.org/show_bug.cgi?id=72324 + + Reviewed by Gavin Barraclough. + + * dfg/DFGByteCodeParser.cpp: + (JSC::DFG::ByteCodeParser::structureChainIsStillValid): + (JSC::DFG::ByteCodeParser::parseBlock): + * jit/JITPropertyAccess.cpp: + (JSC::JIT::privateCompilePutByIdTransition): + +2011-11-14 Michael Saboff <msaboff@apple.com> + + Further changes and cleanup to JSString.h and cpp. + + Reviewed by Darin Adler. + + * runtime/JSString.cpp: + (JSC::JSString::resolveRope): Change PassRefPtr to RefPtr. Eliminated exec in slow case calls. + (JSC::JSString::resolveRopeSlowCase8): Darin and I agreed that this should have 8 in name. + (JSC::JSString::resolveRopeSlowCase): Removed exec parameter. + * runtime/JSString.h: + +2011-11-14 Adam Barth <abarth@webkit.org> + + DateMath.cpp should not depend on JavaScriptCore + https://bugs.webkit.org/show_bug.cgi?id=71747 + + Reviewed by Darin Adler. + + This patch moves the JSC-specific parts of DateMath into JSDateMath in + JavaScriptCore. There shouldn't be any behavior change. + + * CMakeLists.txt: + * GNUmakefile.list.am: + * JavaScriptCore.gypi: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * Target.pri: + * runtime/DateConstructor.cpp: + * runtime/DateConversion.cpp: + * runtime/DateInstance.cpp: + * runtime/DateInstanceCache.h: + * runtime/DatePrototype.cpp: + * runtime/InitializeThreading.cpp: + * runtime/JSDateMath.cpp: Copied from Source/JavaScriptCore/wtf/DateMath.cpp. + (JSC::timeToMS): + (JSC::msToSeconds): + * runtime/JSDateMath.h: Copied from Source/JavaScriptCore/wtf/DateMath.h. + * wtf/DateMath.cpp: + (WTF::isLeapYear): + (WTF::msToDays): + (WTF::msToMinutes): + (WTF::msToHours): + (WTF::parseDateFromNullTerminatedCharacters): + (WTF::makeRFC2822DateString): + * wtf/DateMath.h: + +2011-11-14 Michael Saboff <msaboff@apple.com> + + Towards 8 bit strings - Add 8 bit handling to JSString Ropes + https://bugs.webkit.org/show_bug.cgi?id=72317 + + Added bit to track that a rope is made up of all 8 bit fibers. + Created an 8 bit path (fast and slow cases) to handle 8 bit + only ropes. + + Reviewed by Oliver Hunt. + + * runtime/JSString.cpp: + (JSC::JSString::resolveRope): + (JSC::JSString::resolveRopeSlowCase8): + (JSC::JSString::resolveRopeSlowCase16): + * runtime/JSString.h: + (JSC::RopeBuilder::finishCreation): + (JSC::RopeBuilder::is8Bit): + (JSC::jsSubstring8): + +2011-11-14 Geoffrey Garen <ggaren@apple.com> + + A little bit of function call cleanup + https://bugs.webkit.org/show_bug.cgi?id=72314 + + Reviewed by Oliver Hunt. + + * bytecompiler/BytecodeGenerator.cpp: + (JSC::BytecodeGenerator::emitCall): Renamed callFrame to registerOffset + because this value doesn't give you the offset of the callee's call frame. + + (JSC::BytecodeGenerator::emitReturn): Tightened to use equality instead + of greater-than. Removed comment since its reasoning was wrong. + + (JSC::BytecodeGenerator::emitConstruct): Updated for rename mentioned above. + + (JSC::BytecodeGenerator::isArgumentNumber): Provided a more precise way + to ask this question, giving the bytecode generator more freedom to change + internal implementation details. + + * bytecompiler/BytecodeGenerator.h: Reduced default vector capacity because + 16 was overkill. + (JSC::CallArguments::registerOffset): Updated for rename mentioned above. + + * bytecompiler/NodesCodegen.cpp: + (JSC::CallArguments::CallArguments): + (JSC::CallArguments::newArgument): Factored out argument allocation into + a helper function, so I can change it later. + + (JSC::CallFunctionCallDotNode::emitBytecode): + (JSC::FunctionBodyNode::emitBytecode): Use helper function mentioned above. + +2011-11-14 Tony Chang <tony@chromium.org> + + Remove the CSS3_FLEXBOX compile time flag and enable on all ports + https://bugs.webkit.org/show_bug.cgi?id=72196 + + Reviewed by Ojan Vafai. + + * Configurations/FeatureDefines.xcconfig: + +2011-11-14 Mark Rowe <mrowe@apple.com> + + <rdar://problem/10424154> testRegExp should not be installed as part of JavaScriptCore + + testRegExp and testapi.js were being installed in the JavaScriptCore framework. + As test-only tools they shouldn't be installed there by default, only when + FORCE_TOOL_INSTALL is set to YES. + + This patch incorprorates a few related changes: + 1) Make the jsc and testRegExp targets be configured via .xcconfig files. + 2) Sets up testRegExp so that SKIP_INSTALL is YES by default, and only NO when + FORCE_TOOL_INSTALL is YES. + 3) Switches the testapi target to using a script build phase to install testapi.js + so that the installation will be skipped when SKIP_INSTALL is YES. I'm not sure + why this isn't the built-in behavior when a Copy Files build phase has "Copy only + when installing" checked, but it doesn't seem to be. + 4) Other random cleanup such as removing a bogus group that refers to files that do + not exist, moving testRegExp.cpp in to the tests group, etc. + + Reviewed by Geoff Garen. + + * Configurations/JSC.xcconfig: Added. + * Configurations/TestRegExp.xcconfig: Added. + * JavaScriptCore.xcodeproj/project.pbxproj: + +2011-11-14 Michael Saboff <msaboff@apple.com> + + Towards 8 bit strings - Add 8 bit paths to StringImpl methods + https://bugs.webkit.org/show_bug.cgi?id=72290 + + Added 8 bit patchs to StringImpl to number and find methods. + + Reviewed by Oliver Hunt. + + * wtf/text/StringImpl.cpp: + (WTF::StringImpl::toIntStrict): + (WTF::StringImpl::toUIntStrict): + (WTF::StringImpl::toInt64Strict): + (WTF::StringImpl::toUInt64Strict): + (WTF::StringImpl::toIntPtrStrict): + (WTF::StringImpl::toInt): + (WTF::StringImpl::toUInt): + (WTF::StringImpl::toInt64): + (WTF::StringImpl::toUInt64): + (WTF::StringImpl::toIntPtr): + (WTF::StringImpl::toDouble): + (WTF::StringImpl::toFloat): + (WTF::StringImpl::find): + (WTF::StringImpl::reverseFind): + * wtf/text/WTFString.cpp: + (WTF::toIntegralType): + (WTF::lengthOfCharactersAsInteger): + (WTF::charactersToIntStrict): + (WTF::charactersToUIntStrict): + (WTF::charactersToInt64Strict): + (WTF::charactersToUInt64Strict): + (WTF::charactersToIntPtrStrict): + (WTF::charactersToInt): + (WTF::charactersToUInt): + (WTF::charactersToInt64): + (WTF::charactersToUInt64): + (WTF::charactersToIntPtr): + (WTF::toDoubleType): + (WTF::charactersToDouble): + (WTF::charactersToFloat): + * wtf/text/WTFString.h: + (WTF::find): + (WTF::reverseFind): + +2011-11-14 Vincent Scheib <scheib@chromium.org> + + Mouse Lock: Renaming to 'Pointer Lock': ENABLE Flags + https://bugs.webkit.org/show_bug.cgi?id=72286 + + Reviewed by Adam Barth. + + * wtf/Platform.h: + +2011-11-14 Gavin Barraclough <barraclough@apple.com> + + https://bugs.webkit.org/show_bug.cgi?id=72280 + + Rubber stamped by Geoff Garen. + + Fix 32-bit Lion. + + * JavaScriptCore.xcodeproj/project.pbxproj: + * wtf/OSAllocatorPosix.cpp: + (WTF::OSAllocator::reserveAndCommit): + +2011-11-14 Geoffrey Garen <ggaren@apple.com> + + 32-bit Build fix: declare virtual register indices to be int rather than + unsigned, since they can be positive or negative. + + For better clarity, explicitly use ReturnPC instead of -1 as the "invalid" + state, since we'll never load and operate on the ReturnPC as a JS value. + + * jit/JIT.cpp: + (JSC::JIT::JIT): + * jit/JIT.h: + * jit/JITInlineMethods.h: + (JSC::JIT::emitLoadTag): + (JSC::JIT::emitLoadPayload): + (JSC::JIT::emitLoad): + (JSC::JIT::emitLoad2): + (JSC::JIT::emitLoadDouble): + (JSC::JIT::emitLoadInt32ToDouble): + (JSC::JIT::emitStore): + (JSC::JIT::emitStoreInt32): + (JSC::JIT::emitStoreAndMapInt32): + (JSC::JIT::emitStoreCell): + (JSC::JIT::emitStoreBool): + (JSC::JIT::emitStoreDouble): + (JSC::JIT::map): + (JSC::JIT::unmap): + (JSC::JIT::isMapped): + (JSC::JIT::getMappedPayload): + (JSC::JIT::getMappedTag): + (JSC::JIT::emitJumpSlowCaseIfNotJSCell): + +2011-11-14 Michael Saboff <msaboff@apple.com> + + Remove unused m_data member from UStringSourceProvider + https://bugs.webkit.org/show_bug.cgi?id=72289 + + Removed unused m_data member from UStringSourceProvider. + + Reviewed by Oliver Hunt. + + * parser/SourceProvider.h: + (JSC::UStringSourceProvider::UStringSourceProvider): + +2011-11-14 Michael Saboff <msaboff@apple.com> + + Towards 8 Bit Strings: Templatize YARR Parser + https://bugs.webkit.org/show_bug.cgi?id=72288 + + Changed Yarr::Parser to be a template based on character type. + + Reviewed by Oliver Hunt. + + * yarr/YarrParser.h: + (JSC::Yarr::Parser::Parser): + (JSC::Yarr::parse): + +2011-11-14 Geoffrey Garen <ggaren@apple.com> + + 32-bit build fix: Removed unused declaration. + + * dfg/DFGJITCodeGenerator32_64.cpp: + (JSC::DFG::JITCodeGenerator::emitCall): + +2011-11-12 Geoffrey Garen <ggaren@apple.com> + + Standardized the JS calling convention + https://bugs.webkit.org/show_bug.cgi?id=72221 + + Reviewed by Oliver Hunt. + + This patch standardizes the calling convention so that the caller always + sets up the callee's CallFrame. Adjustments for call type, callee type, + argument count, etc. now always take place after that initial setup. + + This is a step toward reversing the argument order, but also has these + immediate benefits (measured on x64): + + (1) 1% benchmark speedup across the board. + + (2) 50% code size reduction in baseline JIT function calls. + + (3) 1.5x speedup for single-dispatch .apply forwarding. + + (4) 1.1x speedup for multi-dispatch .apply forwarding. + + This change affected the baseline JIT most, since the baseline JIT had + lots of ad hoc calling conventions for different caller / callee types. + + * assembler/MacroAssemblerX86_64.h: + (JSC::MacroAssemblerX86_64::branchPtr): + (JSC::MacroAssemblerX86_64::branchAddPtr): Optimize compare to 0 into + a test, like other assemblers do. (I added some compares to 0, and didn't + want them to be slow.) + + * bytecode/CodeBlock.cpp: + (JSC::CodeBlock::dump): Merged op_load_varargs into op_call_varargs so + op_call_varargs could share code generation with other forms of op_call. + This is also a small optimization, since op_*varargs no longer have to + pass arguments to each other through the register file. + + (JSC::CallLinkInfo::unlink): + * bytecode/CodeBlock.h: Added a new call type: CallVarargs. This allows + us to link functions called through .apply syntax. We need to distinguish + CallVarargs from Call because CallVarargs changes its argument count + on each inovcation, so we must always link to the argument count checking + version of the callee. + + * bytecode/Opcode.h: + * bytecompiler/BytecodeGenerator.cpp: + (JSC::BytecodeGenerator::emitCallVarargs): + * bytecompiler/BytecodeGenerator.h: Merged op_load_varargs into op_call_varargs. + + * bytecompiler/NodesCodegen.cpp: + (JSC::ApplyFunctionCallDotNode::emitBytecode): Ditto. Also, simplified + some of this bytecode generation to remove redundant copies. + + * dfg/DFGJITCodeGenerator32_64.cpp: + (JSC::DFG::JITCodeGenerator::emitCall): + * dfg/DFGJITCodeGenerator64.cpp: + (JSC::DFG::JITCodeGenerator::emitCall): Added a new call type: CallVarargs. + DFG doesn't support this type, but its code needs to change slightly + to accomodate a 3-state variable. + + Stopped passing the argument count in regT1 because this is non-standard. + (The argument count goes in the CallFrame. This trades speed on the slow + path for speed and code size on the fast path, and simplicity on all paths. + A good trade, in my opinion.) + + * dfg/DFGJITCompiler.cpp: + (JSC::DFG::JITCompiler::compileEntry): + (JSC::DFG::JITCompiler::link): + (JSC::DFG::JITCompiler::compile): + (JSC::DFG::JITCompiler::compileFunction): Tweaked code to make CallFrame + setup more obvious when single-stepping. Also, updated for argument count + not being in regT1. + + * dfg/DFGJITCompiler.h: + (JSC::DFG::JITCompiler::addJSCall): + (JSC::DFG::JITCompiler::JSCallRecord::JSCallRecord): Added a new call + type: CallVarargs. + + * dfg/DFGOperations.cpp: Do finish CallFrame setup in one place before + doing anything else. Don't check for stack overflow because we have no callee + registers, and our caller has already checked for its own registers. + + * dfg/DFGRepatch.cpp: + (JSC::DFG::dfgLinkFor): We can link to our callee even if our argument + count doesn't match -- we just need to link to the argument count checking + version. + + * interpreter/CallFrameClosure.h: + (JSC::CallFrameClosure::setArgument): BUG FIX: When supplying too many + arguments from C++, we need to supply a full copy of the arguments prior + to the subset copy that matches our callee's argument count. (That is what + the standard calling convention would have produced in JS.) I would have + split this into its own patch, but I couldn't find a way to get the JIT + to fail a regression test in this area without my patch applied. + + * interpreter/Interpreter.cpp: Let the true code bomb begin! + + (JSC::eval): Fixed up this helper function to operate on eval()'s CallFrame, + and not eval()'s caller frame. We no longer leave the CallFrame pointing + to eval()'s caller during a call to eval(), since that is not standard. + + (JSC::loadVarargs): Factored out a shared helper function for use by JIT + and interpreter because half the code means one quarter the bugs -- in my + programming, at least. + + (JSC::Interpreter::execute): Removed a now-unused way to invoke eval. + + (JSC::Interpreter::privateExecute): Removed an invalid ASSERT following + putDirect, because it got in the way of my testing. (When putting a + function, the cached base of a PutPropertySlot can be 0 to signify "do + not optimize".) + + op_call_eval: Updated for new, standard eval calling convention. + + op_load_varargs: Merged op_load_varargs into op_call_varargs. + + op_call_varags: Updated for new, standard eval calling convention. Don't + check for stack overflow because the loadVarargs helper function already + checked. + + * interpreter/Interpreter.h: + (JSC::Interpreter::execute): Headers are fun and educational! + + * interpreter/RegisterFile.cpp: + (JSC::RegisterFile::growSlowCase): + * interpreter/RegisterFile.h: + (JSC::RegisterFile::grow): Factored out the slow case into a slow + case because it was cramping the style of my fast case. + + * jit/JIT.cpp: + (JSC::JIT::privateCompile): Moved initialization of + RegisterFile::CodeBlock to make it more obvious when debugging. Removed + assumption that argument count is in regT1, as above. Removed call to + restoreArgumentReference() because the JITStubCall abstraction does this for us. + + (JSC::JIT::linkFor): Link even if we miss on argument count, as above. + + * jit/JIT.h: + * jit/JITCall32_64.cpp: + (JSC::JIT::emitSlow_op_call): + (JSC::JIT::emitSlow_op_call_eval): + (JSC::JIT::emitSlow_op_call_varargs): + (JSC::JIT::emitSlow_op_construct): + (JSC::JIT::emit_op_call_eval): + (JSC::JIT::emit_op_call_varargs): Share all function call code generation. + Don't count call_eval when accounting for linkable function calls because + eval doesn't link. (Its fast path is to perform the eval.) + + (JSC::JIT::compileLoadVarargs): Ported this inline copying optimization + to our new calling convention. The key to this optimization is the + observation that, in a function that declares no arguments, if any + arguments are passed, they all end up right behind 'this'. + + (JSC::JIT::compileCallEval): + (JSC::JIT::compileCallEvalSlowCase): Factored out eval for a little clarity. + + (JSC::JIT::compileOpCall): + (JSC::JIT::compileOpCallSlowCase): If you are still with me, dear reader, + this is the whole point of my patch. The caller now unconditionally moves + the CallFrame forward and fills in the data it knows before taking any + branches to deal with weird caller/callee pairs. + + This also means that there is almost no slow path for calls -- it all + gets folded into the shared virtual call stub. The only things remaining + in the slow path are the rare case counter and a call to the stub. + + * jit/JITOpcodes32_64.cpp: + (JSC::JIT::privateCompileCTIMachineTrampolines): + (JSC::JIT::privateCompileCTINativeCall): Updated for values being in + different registers or in memory, based on our new standard calling + convention. + + Added a shared path for calling out to CTI helper functions for non-JS + calls. + + * jit/JITPropertyAccess32_64.cpp: + (JSC::JIT::emit_op_method_check): method_check emits its own code and + the following get_by_id's code, so it needs to add both when informing + result chaining of its result. This is important because the standard + calling convention can now take advantage of this chaining. + + * jit/JITCall.cpp: + (JSC::JIT::compileLoadVarargs): + (JSC::JIT::compileCallEval): + (JSC::JIT::compileCallEvalSlowCase): + (JSC::JIT::compileOpCall): + (JSC::JIT::compileOpCallSlowCase): + * jit/JITOpcodes.cpp: + (JSC::JIT::privateCompileCTIMachineTrampolines): + (JSC::JIT::emit_op_call_eval): + (JSC::JIT::emit_op_call_varargs): + (JSC::JIT::emitSlow_op_call): + (JSC::JIT::emitSlow_op_call_eval): + (JSC::JIT::emitSlow_op_call_varargs): + (JSC::JIT::emitSlow_op_construct): Observe, as I write all of my code a + second time, now with 64 bits. + + * jit/JITStubs.cpp: + (JSC::throwExceptionFromOpCall): + (JSC::jitCompileFor): + (JSC::arityCheckFor): + (JSC::lazyLinkFor): A lot of mechanical changes here for one purpose: + Exceptions thrown in the middle of a function call now use a shared helper + function (throwExceptionFromOpCall). This function understands that the + CallFrame currently points to the callEE, and the exception must be + thrown by the callER. (The old calling convention would often still have + the CallFrame pointing at the callER at the point of an exception. That + is not the way of our new, standard calling convention.) + + (JSC::op_call_eval): Finish standard CallFrame setup before calling + our eval helper function, which now depends on that setup. + + * runtime/Arguments.h: + (JSC::Arguments::length): Renamed numProvidedArguments() to length() + because that's what other objects call it, and the difference made our + new loadVarargs helper function hard to read. + + * runtime/Executable.cpp: + (JSC::FunctionExecutable::compileForCallInternal): + (JSC::FunctionExecutable::compileForConstructInternal): Interpreter build + fixes. + + * runtime/FunctionPrototype.cpp: + (JSC::functionProtoFuncApply): Honor Arguments::MaxArguments even when + the .apply call_varargs optimization fails. (This bug appears on layout + tests when you disable the optimization.) + +2011-11-11 Jer Noble <jer.noble@apple.com> + + Implement MediaController. + https://bugs.webkit.org/show_bug.cgi?id=71408 + + Reviewed by Eric Carlson. + + Change the definition of WTF_USE_COREAUDIO to exclude Windows completely, as + CoreAudioClock.h is not available there. + + * wtf/Platform.h: + +2011-11-14 Patrick Gansterer <paroga@webkit.org> + + [WIN] Remove dependency on pthread from FastMalloc + https://bugs.webkit.org/show_bug.cgi?id=72098 + + Reviewed by Adam Roben. + + All pthread calls are already ported to native Windows calls. + Use the native version for all OS(WINDOWS) to remove the + runtime dependency on the pthread dll. + + * wtf/FastMalloc.cpp: + +2011-11-14 Simon Hausmann <simon.hausmann@nokia.com> + + [Qt] Replace use of QApplication with QGuiApplication. + + Reviewed by Tor Arne Vestbø. + + * wtf/qt/compat/qguiapplication.h: + (QGuiApplication::styleHints): Introduce styleHints wrapper hack. + +2011-11-14 Carlos Garcia Campos <cgarcia@igalia.com> + + Unreviewed. Fix make distcheck build. + + * GNUmakefile.list.am: Add missing files. + +2011-11-11 Yury Semikhatsky <yurys@chromium.org> + + Web Inspector: function remote objetct should provide access to function position in the script + https://bugs.webkit.org/show_bug.cgi?id=71808 + + Exposed accessor for function source code. + + Reviewed by Pavel Feldman. + + * JavaScriptCore.exp: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * runtime/JSFunction.cpp: + (JSC::JSFunction::sourceCode): + * runtime/JSFunction.h: + +2011-11-13 Yuqiang Xian <yuqiang.xian@intel.com> + + Fix silent spilling/filling GPRs in DFG 32_64 + https://bugs.webkit.org/show_bug.cgi?id=72201 + + Reviewed by Gavin Barraclough. + + Current silentSpillGPR/silentFillGPR may not work as expected for some + cases in 32_64. If there's a JSValue which was retained by two GPRs, + we may end up failing to spill/fill some GPRs or redundantly + spilling/filling some GPRs. For example, if we tend to exclude "eax" + from spilling while a JSValue is retained by both "eax" and "edx", + then "edx" won't be spilled as well (wrong). And if another JSValue is + retained by "ecx" and "ebx", both "ecx" and "ebx" will be spilled + twice. The similar problem applies to silentFillGPR. + The fix is to make silentSpillGPR/silentFillGPR more straightforward, + i.e., spilling/filling based on the GPR instead of the virtual + register. FPR spilling/filling is also modified accordingly to make it + consistent with GPR spilling/filling. + + * dfg/DFGJITCodeGenerator.h: + (JSC::DFG::JITCodeGenerator::silentSpillGPR): + (JSC::DFG::JITCodeGenerator::silentSpillFPR): + (JSC::DFG::JITCodeGenerator::silentFillGPR): + (JSC::DFG::JITCodeGenerator::silentFillFPR): + (JSC::DFG::JITCodeGenerator::silentSpillAllRegisters): + (JSC::DFG::JITCodeGenerator::silentFillAllRegisters): + +2011-11-12 Laszlo Gombos <laszlo.1.gombos@nokia.com> + + [Qt][Symbian] Remove support for WINSCW compiler + https://bugs.webkit.org/show_bug.cgi?id=70178 + + Reviewed by Chang Shu. + + * API/JSStringRef.h: + * create_hash_table: Revert r45553. + * runtime/JSGlobalData.cpp: Revert r45553. + * runtime/LiteralParser.cpp: Remove WINSCW comment. + (JSC::LiteralParser::Lexer::lexString): + * runtime/Lookup.h: Revert r45553. + * runtime/Structure.h: Revert r48461. + * wtf/Alignment.h: + * wtf/Assertions.h: Revert r52337. + * wtf/Compiler.h: + * wtf/ListRefPtr.h: Revert r48988. + (WTF::ListRefPtr::~ListRefPtr): + * wtf/OwnArrayPtr.h: Revert r45911. + (WTF::OwnArrayPtr::operator UnspecifiedBoolType): + * wtf/PassOwnArrayPtr.h: + (WTF::PassOwnArrayPtr::operator UnspecifiedBoolType): + * wtf/PassRefPtr.h: + * wtf/StaticConstructors.h: + * wtf/unicode/qt4/UnicodeQt4.h: + +2011-11-12 Patrick Gansterer <paroga@webkit.org> + + Unreviewed. Add ENABLE(DFG_JIT) around DFGCorrectableJumpPoint code. + + * dfg/DFGCorrectableJumpPoint.cpp: + * dfg/DFGCorrectableJumpPoint.h: + +2011-11-12 Patrick Gansterer <paroga@webkit.org> + + [CMake] Move list of DFG source files into correct file + https://bugs.webkit.org/show_bug.cgi?id=72212 + + Reviewed by Daniel Bates. + + The DFG files are platform independent. So move them from + the EFL specific file into the general CMakeLists.txt. + + * CMakeLists.txt: + * PlatformEfl.cmake: + +2011-11-12 Patrick Gansterer <paroga@webkit.org> + + Fix "unused variable" warning in JSLock + https://bugs.webkit.org/show_bug.cgi?id=72213 + + Reviewed by Anders Carlsson. + + Use ASSERT_UNUSED() instead of ASSERT() to make sure + that the variable is also used in the release build. + + * runtime/JSLock.cpp: + (JSC::JSLock::lock): + (JSC::JSLock::unlock): + +2011-11-11 Gavin Barraclough <barraclough@apple.com> + + Update iOS compiler version. + + Reviewed by David Kilzer. + + * Configurations/CompilerVersion.xcconfig: + - Update compiler version. + +2011-11-11 Gavin Barraclough <barraclough@apple.com> + + Update iOS port's configuration setting, particularly in Platform.h + https://bugs.webkit.org/show_bug.cgi?id=72187 + + Reviewed by David Kilzer. + + * interpreter/Interpreter.h: + - Lower the reentry depth. + * runtime/DatePrototype.cpp: + - iOS also uses CF. + * wtf/FastMalloc.cpp: + (WTF::TCMalloc_PageHeap::IncrementalScavenge): + - Update fastmalloc configuration for iOS. + * wtf/OSAllocatorPosix.cpp: + (WTF::OSAllocator::reserveAndCommit): + - Added flag. + * wtf/Platform.h: + - Update platform configuration for iOS. + +2011-11-11 David Kilzer <ddkilzer@apple.com> + + Only define BUILDING_ON_* and TARGETING_* macros when building for Mac OS X + <http://webkit.org/b/72175> + + Reviewed by Joseph Pecoraro. + + * wtf/Platform.h: Move the definition of the BUILDING_ON_* and + TARGETING_* macros to where the WTF_OS_MAC_OS_X macro is defined + so that they're only defined on Mac OS X builds. Also include + Availability.h, which is needed on iOS builds. + +2011-11-11 Darin Adler <darin@apple.com> + + Remove all releaseRef implementations except for RetainPtr + https://bugs.webkit.org/show_bug.cgi?id=71423 + + Reviewed by Julien Chaffraix. + + * API/JSRetainPtr.h: Removed releaseRef. + * wtf/PassRefPtr.h: Removed releaseRef. + +2011-11-11 Darin Adler <darin@apple.com> + + * JavaScriptCore.xcodeproj/project.pbxproj: Let a newer Xcode update this file. + If an older Xcode downgrades this file and we have a risk of some kind of + oscillating commit situation, please contact me so I know not to do this again. + +2011-11-11 Mark Hahnenberg <mhahnenberg@apple.com> + + Add jsCast to replace static_cast + https://bugs.webkit.org/show_bug.cgi?id=72071 + + Reviewed by Geoffrey Garen. + + Added new jsCast and changed all of the static_cast sites in functions that + are in the MethodTable to use jsCast instead. + + * API/JSCallbackFunction.cpp: + (JSC::JSCallbackFunction::toStringCallback): + (JSC::JSCallbackFunction::valueOfCallback): + * API/JSCallbackObject.h: + (JSC::JSCallbackObject::visitChildren): + * API/JSCallbackObjectFunctions.h: + (JSC::::className): + (JSC::::getOwnPropertySlot): + (JSC::::getOwnPropertyDescriptor): + (JSC::::put): + (JSC::::deleteProperty): + (JSC::::deletePropertyByIndex): + (JSC::::getConstructData): + (JSC::::hasInstance): + (JSC::::getCallData): + (JSC::::getOwnPropertyNames): + * debugger/DebuggerActivation.cpp: + (JSC::DebuggerActivation::visitChildren): + (JSC::DebuggerActivation::className): + (JSC::DebuggerActivation::getOwnPropertySlot): + (JSC::DebuggerActivation::put): + (JSC::DebuggerActivation::putWithAttributes): + (JSC::DebuggerActivation::deleteProperty): + (JSC::DebuggerActivation::getOwnPropertyNames): + (JSC::DebuggerActivation::getOwnPropertyDescriptor): + (JSC::DebuggerActivation::defineGetter): + (JSC::DebuggerActivation::defineSetter): + * runtime/Arguments.cpp: + (JSC::Arguments::visitChildren): + (JSC::Arguments::getOwnPropertySlotByIndex): + (JSC::Arguments::getOwnPropertySlot): + (JSC::Arguments::getOwnPropertyDescriptor): + (JSC::Arguments::getOwnPropertyNames): + (JSC::Arguments::putByIndex): + (JSC::Arguments::put): + (JSC::Arguments::deletePropertyByIndex): + (JSC::Arguments::deleteProperty): + * runtime/ArrayConstructor.cpp: + (JSC::ArrayConstructor::getOwnPropertySlot): + (JSC::ArrayConstructor::getOwnPropertyDescriptor): + * runtime/ArrayPrototype.cpp: + (JSC::ArrayPrototype::getOwnPropertySlot): + (JSC::ArrayPrototype::getOwnPropertyDescriptor): + * runtime/BooleanPrototype.cpp: + (JSC::BooleanPrototype::getOwnPropertySlot): + (JSC::BooleanPrototype::getOwnPropertyDescriptor): + * runtime/DateConstructor.cpp: + (JSC::DateConstructor::getOwnPropertySlot): + (JSC::DateConstructor::getOwnPropertyDescriptor): + * runtime/DatePrototype.cpp: + (JSC::DatePrototype::getOwnPropertySlot): + (JSC::DatePrototype::getOwnPropertyDescriptor): + * runtime/ErrorPrototype.cpp: + (JSC::ErrorPrototype::getOwnPropertySlot): + (JSC::ErrorPrototype::getOwnPropertyDescriptor): + * runtime/Executable.cpp: + (JSC::ExecutableBase::clearCode): + (JSC::EvalExecutable::visitChildren): + (JSC::ProgramExecutable::visitChildren): + (JSC::FunctionExecutable::visitChildren): + * runtime/GetterSetter.cpp: + (JSC::GetterSetter::visitChildren): + * runtime/JSActivation.cpp: + (JSC::JSActivation::visitChildren): + (JSC::JSActivation::getOwnPropertyNames): + (JSC::JSActivation::getOwnPropertySlot): + (JSC::JSActivation::put): + (JSC::JSActivation::putWithAttributes): + * runtime/JSArray.cpp: + (JSC::JSArray::getOwnPropertySlotByIndex): + (JSC::JSArray::getOwnPropertySlot): + (JSC::JSArray::getOwnPropertyDescriptor): + (JSC::JSArray::put): + (JSC::JSArray::putByIndex): + (JSC::JSArray::deleteProperty): + (JSC::JSArray::deletePropertyByIndex): + (JSC::JSArray::getOwnPropertyNames): + (JSC::JSArray::visitChildren): + * runtime/JSBoundFunction.cpp: + (JSC::JSBoundFunction::hasInstance): + (JSC::JSBoundFunction::visitChildren): + * runtime/JSByteArray.cpp: + (JSC::JSByteArray::getOwnPropertySlot): + (JSC::JSByteArray::getOwnPropertyDescriptor): + (JSC::JSByteArray::getOwnPropertySlotByIndex): + (JSC::JSByteArray::put): + (JSC::JSByteArray::putByIndex): + (JSC::JSByteArray::getOwnPropertyNames): + * runtime/JSCell.h: + (JSC::JSCell::visitChildren): + (JSC::jsCast): + * runtime/JSFunction.cpp: + (JSC::JSFunction::visitChildren): + (JSC::JSFunction::getCallData): + (JSC::JSFunction::getOwnPropertySlot): + (JSC::JSFunction::getOwnPropertyDescriptor): + (JSC::JSFunction::getOwnPropertyNames): + (JSC::JSFunction::put): + (JSC::JSFunction::deleteProperty): + (JSC::JSFunction::getConstructData): + * runtime/JSGlobalData.cpp: + (JSC::StackPreservingRecompiler::operator()): + * runtime/JSGlobalObject.cpp: + (JSC::JSGlobalObject::put): + (JSC::JSGlobalObject::putWithAttributes): + (JSC::JSGlobalObject::defineGetter): + (JSC::JSGlobalObject::defineSetter): + (JSC::JSGlobalObject::visitChildren): + (JSC::JSGlobalObject::getOwnPropertySlot): + (JSC::JSGlobalObject::getOwnPropertyDescriptor): + (JSC::JSGlobalObject::clearRareData): + * runtime/JSGlobalThis.cpp: + (JSC::JSGlobalThis::visitChildren): + * runtime/JSONObject.cpp: + (JSC::JSONObject::getOwnPropertySlot): + (JSC::JSONObject::getOwnPropertyDescriptor): + * runtime/JSObject.cpp: + (JSC::JSObject::finalize): + (JSC::JSObject::visitChildren): + (JSC::JSObject::getOwnPropertySlotByIndex): + (JSC::JSObject::put): + (JSC::JSObject::putByIndex): + (JSC::JSObject::deleteProperty): + (JSC::JSObject::deletePropertyByIndex): + * runtime/JSObject.h: + (JSC::JSObject::getOwnPropertySlot): + * runtime/JSPropertyNameIterator.cpp: + (JSC::JSPropertyNameIterator::visitChildren): + * runtime/JSStaticScopeObject.cpp: + (JSC::JSStaticScopeObject::visitChildren): + (JSC::JSStaticScopeObject::put): + (JSC::JSStaticScopeObject::putWithAttributes): + (JSC::JSStaticScopeObject::getOwnPropertySlot): + * runtime/JSString.cpp: + (JSC::JSString::visitChildren): + (JSC::JSString::toThisObject): + (JSC::JSString::getOwnPropertySlot): + (JSC::JSString::getOwnPropertySlotByIndex): + * runtime/JSVariableObject.cpp: + (JSC::JSVariableObject::deleteProperty): + (JSC::JSVariableObject::getOwnPropertyNames): + * runtime/JSWrapperObject.cpp: + (JSC::JSWrapperObject::visitChildren): + * runtime/MathObject.cpp: + (JSC::MathObject::getOwnPropertySlot): + (JSC::MathObject::getOwnPropertyDescriptor): + * runtime/NativeErrorConstructor.cpp: + (JSC::NativeErrorConstructor::visitChildren): + * runtime/NumberConstructor.cpp: + (JSC::NumberConstructor::getOwnPropertySlot): + (JSC::NumberConstructor::getOwnPropertyDescriptor): + * runtime/NumberPrototype.cpp: + (JSC::NumberPrototype::getOwnPropertySlot): + (JSC::NumberPrototype::getOwnPropertyDescriptor): + * runtime/ObjectConstructor.cpp: + (JSC::ObjectConstructor::getOwnPropertySlot): + (JSC::ObjectConstructor::getOwnPropertyDescriptor): + * runtime/ObjectPrototype.cpp: + (JSC::ObjectPrototype::put): + (JSC::ObjectPrototype::getOwnPropertySlotByIndex): + (JSC::ObjectPrototype::getOwnPropertySlot): + (JSC::ObjectPrototype::getOwnPropertyDescriptor): + * runtime/RegExpConstructor.cpp: + (JSC::RegExpConstructor::getOwnPropertySlot): + (JSC::RegExpConstructor::getOwnPropertyDescriptor): + (JSC::RegExpConstructor::put): + * runtime/RegExpMatchesArray.h: + (JSC::RegExpMatchesArray::getOwnPropertySlot): + (JSC::RegExpMatchesArray::getOwnPropertySlotByIndex): + (JSC::RegExpMatchesArray::getOwnPropertyDescriptor): + (JSC::RegExpMatchesArray::put): + (JSC::RegExpMatchesArray::putByIndex): + (JSC::RegExpMatchesArray::deleteProperty): + (JSC::RegExpMatchesArray::deletePropertyByIndex): + (JSC::RegExpMatchesArray::getOwnPropertyNames): + * runtime/RegExpObject.cpp: + (JSC::RegExpObject::visitChildren): + (JSC::RegExpObject::getOwnPropertySlot): + (JSC::RegExpObject::getOwnPropertyDescriptor): + (JSC::RegExpObject::put): + * runtime/RegExpPrototype.cpp: + (JSC::RegExpPrototype::getOwnPropertySlot): + (JSC::RegExpPrototype::getOwnPropertyDescriptor): + * runtime/ScopeChain.cpp: + (JSC::ScopeChainNode::visitChildren): + * runtime/StringConstructor.cpp: + (JSC::StringConstructor::getOwnPropertySlot): + (JSC::StringConstructor::getOwnPropertyDescriptor): + * runtime/StringObject.cpp: + (JSC::StringObject::getOwnPropertySlot): + (JSC::StringObject::getOwnPropertySlotByIndex): + (JSC::StringObject::getOwnPropertyDescriptor): + (JSC::StringObject::deleteProperty): + (JSC::StringObject::getOwnPropertyNames): + * runtime/StringPrototype.cpp: + (JSC::StringPrototype::getOwnPropertySlot): + (JSC::StringPrototype::getOwnPropertyDescriptor): + * runtime/Structure.cpp: + (JSC::Structure::visitChildren): + * runtime/StructureChain.cpp: + (JSC::StructureChain::visitChildren): + +2011-11-11 Gavin Barraclough <barraclough@apple.com> + + Enable DFG JIT for ARMv7/iOS. + + Rubber stamped by Oliver Hunt. + + * wtf/Platform.h: + - enable DFG JIT for ARMv7/iOS. + +2011-11-11 Mark Hahnenberg <mhahnenberg@apple.com> + + De-virtualize supportsProfiling, supportsRichSourceInfo, shouldInterruptScript in JSGlobalObject + https://bugs.webkit.org/show_bug.cgi?id=72035 + + Reviewed by Geoffrey Garen. + + De-virtualized the methods through the use of a new method table just for JSGlobalObject and subclasses. + + * JavaScriptCore.exp: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * bytecompiler/BytecodeGenerator.cpp: Changed call sites to use the new GlobalObjectMethodTable. + (JSC::BytecodeGenerator::BytecodeGenerator): + * interpreter/Interpreter.cpp: Ditto. + (JSC::Interpreter::execute): + * runtime/JSGlobalObject.cpp: Added a static const GlobalObjectMethodTable with the correct function pointers. + * runtime/JSGlobalObject.h: Added a field in JSGlobalObject to keep track of the current method table. + (JSC::JSGlobalObject::JSGlobalObject): + (JSC::JSGlobalObject::globalObjectMethodTable): The new struct to contain the function pointers. + (JSC::JSGlobalObject::supportsProfiling): Made static to put in the method table. + (JSC::JSGlobalObject::supportsRichSourceInfo): Ditto. + (JSC::JSGlobalObject::shouldInterruptScript): Ditto. + * runtime/TimeoutChecker.cpp: Changed call sites to use the new GlobalObjectMethodTable for lookup. + (JSC::TimeoutChecker::didTimeOut): + +2011-11-11 Mark Hahnenberg <mhahnenberg@apple.com> + + De-virtualize JSGlobalObject::allowsAccessFrom + https://bugs.webkit.org/show_bug.cgi?id=71969 + + Reviewed by Darin Adler. + + * runtime/JSGlobalObject.h: Removed allowsAccessFrom from JSGlobalObject since it is exclusive to + JSDOMWindowBase and WebScriptObject. + +2011-11-11 Sheriff Bot <webkit.review.bot@gmail.com> + + Unreviewed, rolling out r99950. + http://trac.webkit.org/changeset/99950 + https://bugs.webkit.org/show_bug.cgi?id=72117 + + "Landed wrong patch by mistake" (Requested by yurys on + #webkit). + + * JavaScriptCore.exp: + * runtime/JSFunction.cpp: + * runtime/JSFunction.h: + +2011-11-11 Patrick Gansterer <paroga@webkit.org> + + Unreviewed. Build fix for !ENABLE(JIT) after r99898. + + * bytecode/CodeBlock.cpp: + (JSC::CodeBlock::CodeBlock): + +2011-11-10 Dan Bernstein <mitz@apple.com> + + Disabling assertions breaks the debug build + https://bugs.webkit.org/show_bug.cgi?id=72091 + + Reviewed by Geoff Garen. + + * dfg/DFGNode.h: Made hasIdentifier() available when assertions are + disabled. It is used in Graph::dump(). + * runtime/JSObject.cpp: + (JSC::JSObject::visitChildren): Update m_isCheckingForDefaultMarkViolation + only if assertions are enabled. + * wtf/Deque.h: + (WTF::::checkIndexValidity): Changed ASSERT to ASSERT_UNUSED. + * wtf/ThreadRestrictionVerifier.h: + (WTF::ThreadRestrictionVerifier::setShared): Guarded the definition of + a local variable that is only used in an assertion. + +2011-11-10 Filip Pizlo <fpizlo@apple.com> + + JSString forgets to clear m_fibers when resolving ropes + https://bugs.webkit.org/show_bug.cgi?id=72089 + + Reviewed by Geoff Garen. + + * runtime/JSString.cpp: + (JSC::JSString::resolveRopeSlowCase): + +2011-11-09 Filip Pizlo <fpizlo@apple.com> + + DFG byte array support sometimes clamps values incorrectly + https://bugs.webkit.org/show_bug.cgi?id=71975 + + Reviewed by Oliver Hunt. + + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::compilePutByValForByteArray): + +2011-11-10 Filip Pizlo <fpizlo@apple.com> + + ValueProfile/PredictedType contains dead code, and doesn't recognize functions + https://bugs.webkit.org/show_bug.cgi?id=72065 + + Reviewed by Gavin Barraclough and Geoff Garen. + + Added PredictFunction support, and did some cleaning up along the way. + ValueProfile no longer has statistics machinery, because we never used + it. Rearranged some bits in PredictedType to more easily make room for + one more object type. Changed some debug code to use more consistent + conventions (ByteArray becomes Bytearray so that if we ever have a + "Byte" prediction we don't get confused between a prediction that is + the union of Byte and Array and a prediction that indicates precisely + a ByteArray). + + * bytecode/PredictedType.cpp: + (JSC::predictionToString): + (JSC::predictionFromClassInfo): + * bytecode/PredictedType.h: + (JSC::isFunctionPrediction): + * bytecode/ValueProfile.cpp: + * bytecode/ValueProfile.h: + (JSC::ValueProfile::dump): + * dfg/DFGAbstractState.cpp: + (JSC::DFG::AbstractState::execute): + * dfg/DFGPropagator.cpp: + (JSC::DFG::Propagator::propagateNodePredictions): + +2011-11-10 David Kilzer <ddkilzer@apple.com> + + <http://webkit.org/b/72049> Specify testapi.js install path using JAVASCRIPTCORE_FRAMEWORKS_DIR + + Reviewed by Joseph Pecoraro. + + * JavaScriptCore.xcodeproj/project.pbxproj: The testapi.js + script should use JAVASCRIPTCORE_FRAMEWORKS_DIR in its dstPath + for installation. Also removed "Versions/A/" from the path + since this is unneeded due the default symlinks present in the + framework. + +2011-11-10 Gavin Barraclough <barraclough@apple.com> + + Add ARMv7 support to the DFG JIT + https://bugs.webkit.org/show_bug.cgi?id=72061 + + Reviewed by Geoff Garen. + + * dfg/DFGAssemblyHelpers.h: + (JSC::DFG::AssemblyHelpers::preserveReturnAddressAfterCall): + (JSC::DFG::AssemblyHelpers::restoreReturnAddressBeforeReturn): + (JSC::DFG::AssemblyHelpers::emitPutImmediateToCallFrameHeader): + (JSC::DFG::AssemblyHelpers::boxDouble): + (JSC::DFG::AssemblyHelpers::unboxDouble): + - Add CPU(ARM) copies of these functions. + * dfg/DFGJITCodeGenerator.h: + (JSC::DFG::JITCodeGenerator::spill): + - Fix matching of '}' re #if blocks, makes some tools happy. + (JSC::DFG::JITCodeGenerator::setupArguments): + (JSC::DFG::JITCodeGenerator::setupArgumentsWithExecState): + (JSC::DFG::JITCodeGenerator::appendCallWithExceptionCheckSetResult): + (JSC::DFG::JITCodeGenerator::appendCallSetResult): + - Add CPU(ARM) / 4 argument register copies of these functions. + * dfg/DFGJITCodeGenerator32_64.cpp: + (JSC::DFG::JITCodeGenerator::nonSpeculativeValueToInt32): + - Should use callOperation to plant a call to a DFG_OPERATION. + (JSC::DFG::JITCodeGenerator::cachedGetById): + (JSC::DFG::JITCodeGenerator::cachedPutById): + - These methods need to plant a relinkable jump; we currently do so + using beginUninterruptedSequence() / endUninterruptedSequence(). + * dfg/DFGJITCodeGenerator64.cpp: + (JSC::DFG::JITCodeGenerator::nonSpeculativeValueToInt32): + - Should use callOperation to plant a call to a DFG_OPERATION. + * dfg/DFGJITCompiler.cpp: + (JSC::DFG::JITCompiler::linkOSRExits): + - This method needs to plant a relinkable jump; we currently do so + using beginUninterruptedSequence() / endUninterruptedSequence(). + (JSC::DFG::JITCompiler::compileBody): + - Add abstraction to retrieve the pc after a call. + * dfg/DFGOSRExitCompiler.cpp: + - Fix a bug - CodeLocationLabel needs a data address rather than an + executable one, but can just take a MacroAssemblerCodePtr instead! + * dfg/DFGOperations.cpp: + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::compileClampDoubleToByte): + - Add FIXME comment to come back to! - bug#72054. + * dfg/DFGSpeculativeJIT.h: + (JSC::DFG::SpeculativeJIT::speculationCheck): + - Add missing method (ooops, required by bug#72047) + * dfg/DFGSpeculativeJIT32_64.cpp: + - Need to wrap fmod on ARMv7. + + +2011-11-10 Filip Pizlo <fpizlo@apple.com> + + DFG should not reparse code that was just parsed + https://bugs.webkit.org/show_bug.cgi?id=71977 + + Reviewed by Geoff Garen. + + The instruction stream of a code block is now kept around until + the next GC. When doing either an optimizing compilation of an + executable, or inlining of an executable, we now try to find the + already preexisting bytecode. If we find it, we don't have to parse. + If we don't find it, we parse as before. Inlining takes the extra + step of caching code blocks, so if the same executable gets inlined + multiple times into the same caller, then we parse it at most once + even if prior to inlining that executable did not have any code + blocks with an instruction stream. + + Also fixed a silly bug where the strict mode for various operations + was being determined by looking at the machine code block rather + than the inlinee. + + To enable the delete-on-next-GC policy, I introduced the notion + of an ultra weak finalizer, which anyone can register during + tracing. This is thread-safe (for parallel GC) and + stop-the-world-safe (so calls to free() are postponed until the + world is resumed). This required reusing some facilities previously + created for WeakReferenceHarvester, so I created a common utility + class. I also retweaked the handling of WeakReferenceHarvesters, + since they should be executed during stop-the-world since in the + future we may want to allow them to call drain(). + + 2% win on SunSpider. 2% win on V8, when run in my harness. Neutral + elsewhere. + + * JavaScriptCore.xcodeproj/project.pbxproj: + * bytecode/CodeBlock.cpp: + (JSC::CodeBlock::CodeBlock): + (JSC::CodeBlock::visitAggregate): + (JSC::CodeBlock::copyPostParseDataFrom): + (JSC::CodeBlock::copyPostParseDataFromAlternative): + (JSC::CodeBlock::finalizeUnconditionally): + * bytecode/CodeBlock.h: + (JSC::CodeBlock::canProduceCopyWithBytecode): + (JSC::CodeBlock::discardBytecodeLater): + (JSC::CodeBlock::handleBytecodeDiscardingOpportunity): + (JSC::GlobalCodeBlock::GlobalCodeBlock): + (JSC::ProgramCodeBlock::ProgramCodeBlock): + (JSC::EvalCodeBlock::EvalCodeBlock): + (JSC::FunctionCodeBlock::FunctionCodeBlock): + (JSC::BytecodeDestructionBlocker::BytecodeDestructionBlocker): + (JSC::BytecodeDestructionBlocker::~BytecodeDestructionBlocker): + * dfg/DFGAssemblyHelpers.h: + (JSC::DFG::AssemblyHelpers::strictModeFor): + * dfg/DFGByteCodeCache.h: Added. + (JSC::DFG::CodeBlockKey::CodeBlockKey): + (JSC::DFG::CodeBlockKey::operator==): + (JSC::DFG::CodeBlockKey::hash): + (JSC::DFG::CodeBlockKey::executable): + (JSC::DFG::CodeBlockKey::kind): + (JSC::DFG::CodeBlockKey::isHashTableDeletedValue): + (JSC::DFG::CodeBlockKeyHash::hash): + (JSC::DFG::CodeBlockKeyHash::equal): + (JSC::DFG::ByteCodeCache::ByteCodeCache): + (JSC::DFG::ByteCodeCache::~ByteCodeCache): + (JSC::DFG::ByteCodeCache::get): + * dfg/DFGByteCodeParser.cpp: + (JSC::DFG::ByteCodeParser::handleInlining): + * dfg/DFGJITCodeGenerator32_64.cpp: + (JSC::DFG::JITCodeGenerator::cachedPutById): + * dfg/DFGJITCodeGenerator64.cpp: + (JSC::DFG::JITCodeGenerator::cachedPutById): + * dfg/DFGSpeculativeJIT64.cpp: + (JSC::DFG::SpeculativeJIT::compile): + * heap/Heap.cpp: + (JSC::Heap::finalizeUnconditionally): + (JSC::Heap::markRoots): + (JSC::Heap::collect): + * heap/Heap.h: + * heap/ListableHandler.h: Added. + (JSC::ListableHandler::ListableHandler): + (JSC::ListableHandler::~ListableHandler): + (JSC::ListableHandler::List::List): + (JSC::ListableHandler::List::addNotThreadSafe): + (JSC::ListableHandler::List::addThreadSafe): + (JSC::ListableHandler::List::hasNext): + (JSC::ListableHandler::List::removeNext): + * heap/MarkStack.cpp: + (JSC::MarkStackThreadSharedData::MarkStackThreadSharedData): + (JSC::SlotVisitor::harvestWeakReferences): + (JSC::SlotVisitor::finalizeUnconditionally): + * heap/MarkStack.h: + (JSC::MarkStack::addWeakReferenceHarvester): + (JSC::MarkStack::addUnconditionalFinalizer): + * heap/SlotVisitor.h: + * heap/UnconditionalFinalizer.h: Added. + (JSC::UnconditionalFinalizer::~UnconditionalFinalizer): + * heap/WeakReferenceHarvester.h: + (JSC::WeakReferenceHarvester::WeakReferenceHarvester): + (JSC::WeakReferenceHarvester::~WeakReferenceHarvester): + * runtime/Executable.cpp: + (JSC::EvalExecutable::compileInternal): + (JSC::ProgramExecutable::compileInternal): + (JSC::FunctionExecutable::baselineCodeBlockFor): + (JSC::FunctionExecutable::codeBlockWithBytecodeFor): + (JSC::FunctionExecutable::produceCodeBlockFor): + (JSC::FunctionExecutable::compileForCallInternal): + (JSC::FunctionExecutable::compileForConstructInternal): + * runtime/Executable.h: + (JSC::FunctionExecutable::profiledCodeBlockFor): + +2011-11-10 Gavin Barraclough <barraclough@apple.com> + + Add ARMv7 register info for the DFG JIT + https://bugs.webkit.org/show_bug.cgi?id=72050 + + Reviewed by Geoff Garen. + + * dfg/DFGFPRInfo.h: + (JSC::DFG::FPRInfo::toRegister): + (JSC::DFG::FPRInfo::toIndex): + (JSC::DFG::FPRInfo::debugName): + * dfg/DFGGPRInfo.h: + (JSC::DFG::GPRInfo::toRegister): + (JSC::DFG::GPRInfo::toIndex): + (JSC::DFG::GPRInfo::debugName): + +2011-11-10 Gavin Barraclough <barraclough@apple.com> + + #ifdef CPU(X86) specific div/mod code in DFGSpeculativeJIT32_64 + https://bugs.webkit.org/show_bug.cgi?id=72047 + + Reviewed by Geoff Garen. + + We currently don't attempt to abstract divide through the macro assembler, + due to these instructions commonly having specific requirements. This means + there is architecture specific code in the JIT - #ifdef it, and provide a + common implementation. + + * dfg/DFGSpeculativeJIT32_64.cpp: + (JSC::DFG::fmodAsDFGOperation): + (JSC::DFG::SpeculativeJIT::compile): + +2011-11-10 Gavin Barraclough <barraclough@apple.com> + + Add ENABLE_VALUE_PROFILER support for ARMv7 + https://bugs.webkit.org/show_bug.cgi?id=72043 + + Reviewed by Geoff Garen. + + This requires us to make a bucketCounterRegister available; to do so we'll need to spill more registers on entry to JIT code. + + * jit/JITArithmetic32_64.cpp: + (JSC::JIT::emitSlow_op_mod): + - cleanup location of UNUSED_PARAM + * jit/JITStubs.cpp: + (JSC::ctiTrampoline): + (JSC::ctiVMThrowTrampoline): + (JSC::ctiOpThrowNotCaught): + (JSC::JITThunks::JITThunks): + * jit/JITStubs.h: + - Update JITStackFrame structure & asm code to spill more registers. + * jit/JSInterfaceJIT.h: + - Assign a bucketCounterRegister. + +2011-11-10 Gavin Barraclough <barraclough@apple.com> + + Fix sampling counters on ARMv7, move add64 functionality to macro assembler + https://bugs.webkit.org/show_bug.cgi?id=72040 + + Reviewed by Geoff Garen. + + The ability to add an integer to a uint64_t in memory is poorly copied in + multiple places & ifdef'ed on architecture, addWithCarry32 is also a badly + designed interface since add32 is not required to set flags (we have no + concept of flags in the macro assembler interface). + + * assembler/MacroAssemblerARMv7.h: + (JSC::MacroAssemblerARMv7::add64): + * assembler/MacroAssemblerX86.h: + (JSC::MacroAssemblerX86::add64): + * assembler/MacroAssemblerX86_64.h: + (JSC::MacroAssemblerX86_64::add64): + * dfg/DFGAssemblyHelpers.cpp: + * dfg/DFGAssemblyHelpers.h: + (JSC::DFG::AssemblyHelpers::emitCount): + * dfg/DFGJITCodeGenerator.cpp: + (JSC::DFG::JITCodeGenerator::writeBarrier): + * jit/JIT.h: + * jit/JITInlineMethods.h: + (JSC::JIT::emitCount): + +011-11-10 Ryuan Choi <ryuan.choi@samsung.com> + + [CMAKE] Refactoring CMakeLists${PORT}.txt to Platform${PORT}.cmake + https://bugs.webkit.org/show_bug.cgi?id=56705 + + Reviewed by Adam Roben. + + * CMakeLists.txt: + * PlatformEfl.cmake: Renamed from Source/JavaScriptCore/CMakeListsEfl.txt. + * PlatformWinCE.cmake: Renamed from Source/JavaScriptCore/CMakeListsWinCE.txt. + * shell/CMakeLists.txt: + * shell/PlatformEfl.cmake: Renamed from Source/JavaScriptCore/shell/CMakeListsEfl.txt. + * shell/PlatformWinCE.cmake: Renamed from Source/JavaScriptCore/shell/CMakeListsWinCE.txt. + * wtf/CMakeLists.txt: + * wtf/PlatformEfl.cmake: Renamed from Source/JavaScriptCore/wtf/CMakeListsEfl.txt. + * wtf/PlatformWinCE.cmake: Renamed from Source/JavaScriptCore/wtf/CMakeListsWinCE.txt. + +2011-11-10 Carlos Garcia Campos <cgarcia@igalia.com> + + Unreviewed. Fix make distcheck build. + + * GNUmakefile.list.am: Add missing files. + +2011-11-09 Michael Saboff <msaboff@apple.com> + + Towards 8 Bit Strings: Templatize JSC::LiteralParser class by character type + https://bugs.webkit.org/show_bug.cgi?id=71862 + + Changed LiteralParser to be templatized of character type. + + Moved five enums out of class definition to work around a clang compiler defect. + + Added lexIdentifier templated method to break out character specific versions. + Added static setParserTokenString templated method to handle setting approriately + sized string pointer. + + To keep code in LiteralParser.cpp and keep LiteralParser.h small, the two + flavors of LiteralParser are explicitly instantiated at the end of + LiteralParser.cpp. + + Reviewed by Oliver Hunt. + + * API/JSValueRef.cpp: + (JSValueMakeFromJSONString): + * JavaScriptCore.exp: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * interpreter/Interpreter.cpp: + (JSC::Interpreter::callEval): + (JSC::Interpreter::execute): + * runtime/JSGlobalObjectFunctions.cpp: + (JSC::globalFuncEval): + * runtime/JSONObject.cpp: + (JSC::JSONProtoFuncParse): + * runtime/LiteralParser.cpp: + (JSC::isJSONWhiteSpace): + (JSC::::tryJSONPParse): + (JSC::::makeIdentifier): + (JSC::::Lexer::lex): + (JSC::::Lexer::lexIdentifier): + (JSC::::Lexer::next): + (JSC::LChar): + (JSC::UChar): + (JSC::isSafeStringCharacter): + (JSC::::Lexer::lexString): + (JSC::::Lexer::lexNumber): + (JSC::::parse): + * runtime/LiteralParser.h: + (JSC::LiteralParser::LiteralParser): + (JSC::LiteralParser::getErrorMessage): + (JSC::LiteralParser::tryLiteralParse): + (JSC::LiteralParser::Lexer::Lexer): + (JSC::LiteralParser::Lexer::currentToken): + (JSC::LiteralParser::Lexer::getErrorMessage): + * runtime/UString.h: + (JSC::LChar): + (JSC::UChar): + * wtf/text/StringBuilder.cpp: + (WTF::StringBuilder::append): + * wtf/text/StringBuilder.h: + (WTF::StringBuilder::append): + +2011-11-09 Filip Pizlo <fpizlo@apple.com> + + Multiple CodeBlock should be able to share the same instruction + stream without copying + https://bugs.webkit.org/show_bug.cgi?id=71978 + + Reviewed by Oliver Hunt. + + This refactors CodeBlock::m_instructions to be a Vector boxed in a + ref-counted object, but otherwise does not take advantage of this. + + This is performance neutral. + + * bytecode/CodeBlock.cpp: + (JSC::CodeBlock::printStructure): + (JSC::CodeBlock::printStructures): + (JSC::CodeBlock::dump): + (JSC::CodeBlock::CodeBlock): + (JSC::CodeBlock::visitAggregate): + (JSC::CodeBlock::shrinkToFit): + * bytecode/CodeBlock.h: + (JSC::CodeBlock::hasInstructions): + (JSC::CodeBlock::numberOfInstructions): + (JSC::CodeBlock::instructions): + * jit/JIT.cpp: + (JSC::JIT::JIT): + +2011-11-09 Gavin Barraclough <barraclough@apple.com> + + Renovate ARMv7 assembler/macro-assembler + https://bugs.webkit.org/show_bug.cgi?id=71982 + + Reviewed by Geoff Garen. + + ARMv7Assembler: + * add support for strb (byte stores) + * rename the VMOV_CtoS opcodes (there are currently backwards!) + * add support for adc (add with carry) + * add support for vsqrt, vabs + * add support for vmov (between FPRs, and to/from GPR pairs). + * remove '_F64' postfixes from instructions (these aren't helpful, functions can already be distinguished by their signatures). + * rename vcvt_F64_S32 to vcvt_signedToFloatingPoint, the prior postfix was unhelpful in failing to distinguish the types (S32 indicates a single precision register, but the type could be float, int32, or uint32). + * rename vcvtr_S32_F64 to vcvt_floatingPointToSigned, as for previous, also vcvtr was the incorrect name for the operation (the emitted instruction truncates). + + MacroAssemblerARMv7: + * add 3-operand versions of and32, lshift32, or32, rshift32, urshift32, sub32, xor32, + * add store8, and store32 imm to base-index. + * fix load32WithCompactAddressOffsetPatch to work for all gprs (the fix is a little kludgy but functional; to do better we'll have to also fix the repatching code). + * Update supportsFloating* flags (all features now supported). + * add moveDouble, storeDouble to absolute address, addDouble to absolute address + * add 3-operand double operations. + * implement sqrtDouble/absDouble + * add branchTruncateDoubleToInt32, implement truncateDoubleToInt32 + * move should do nothing if src == dest + * branchTest8-on-memory can be implemented in terms of branchTest32-on-register (branchTest8-on-register has been removed). + * add 3-operand branchAdd32, branchSub32, also branchAdd32 absolute address. + +2011-11-09 Gavin Barraclough <barraclough@apple.com> + + https://bugs.webkit.org/show_bug.cgi?id=71873 + + Reviewed by Geoff Garen. + + Incrementally re-landing these changes, trying to determine what went wrong. + (The whole patch failed tests on the build bot but worked locally. + + * dfg/DFGByteCodeParser.cpp: + (JSC::DFG::ByteCodeParser::handleIntrinsic): + +2011-11-09 Filip Pizlo <fpizlo@apple.com> + + DFG OSR exit code should be lazily generated + https://bugs.webkit.org/show_bug.cgi?id=71744 + + Reviewed by Gavin Barraclough. + + The OSR exit code is now generated the first time it is executed, + rather than right after speculative compilation. Because most OSR + exits are never taken, this should greatly reduce both code size + and compilation time. + + This is a 1% win on SunSpider, and a 1% win on V8 when running in + my harness. No change in V8 in V8's harness (due to the long runs, + so compile time is not an issue) and no change in Kraken (again, + long runs of small code so compile time has no measurable effect). + + * CMakeListsEfl.txt: + * GNUmakefile.list.am: + * JavaScriptCore.xcodeproj/project.pbxproj: + * Target.pri: + * assembler/AbstractMacroAssembler.h: + * assembler/MacroAssemblerX86.h: + (JSC::MacroAssemblerX86::jump): + * assembler/MacroAssemblerX86_64.h: + (JSC::MacroAssemblerX86_64::jump): + * assembler/X86Assembler.h: + (JSC::X86Assembler::jmp_m): + * bytecode/CodeBlock.h: + (JSC::CodeBlock::createDFGDataIfNecessary): + (JSC::CodeBlock::appendDFGOSREntryData): + (JSC::CodeBlock::numberOfDFGOSREntries): + (JSC::CodeBlock::dfgOSREntryData): + (JSC::CodeBlock::dfgOSREntryDataForBytecodeIndex): + (JSC::CodeBlock::appendOSRExit): + (JSC::CodeBlock::appendSpeculationRecovery): + (JSC::CodeBlock::numberOfOSRExits): + (JSC::CodeBlock::numberOfSpeculationRecoveries): + (JSC::CodeBlock::osrExit): + (JSC::CodeBlock::speculationRecovery): + * dfg/DFGAssemblyHelpers.h: + (JSC::DFG::AssemblyHelpers::debugCall): + * dfg/DFGCorrectableJumpPoint.cpp: Added. + (JSC::DFG::CorrectableJumpPoint::codeLocationForRepatch): + * dfg/DFGCorrectableJumpPoint.h: Added. + (JSC::DFG::CorrectableJumpPoint::CorrectableJumpPoint): + (JSC::DFG::CorrectableJumpPoint::switchToLateJump): + (JSC::DFG::CorrectableJumpPoint::correctInitialJump): + (JSC::DFG::CorrectableJumpPoint::correctLateJump): + (JSC::DFG::CorrectableJumpPoint::initialJump): + (JSC::DFG::CorrectableJumpPoint::lateJump): + (JSC::DFG::CorrectableJumpPoint::correctJump): + (JSC::DFG::CorrectableJumpPoint::getJump): + * dfg/DFGJITCompiler.cpp: + (JSC::DFG::JITCompiler::linkOSRExits): + (JSC::DFG::JITCompiler::compileBody): + (JSC::DFG::JITCompiler::link): + * dfg/DFGJITCompiler.h: + * dfg/DFGOSRExit.cpp: Added. + (JSC::DFG::OSRExit::OSRExit): + (JSC::DFG::OSRExit::dump): + * dfg/DFGOSRExit.h: + * dfg/DFGOSRExitCompiler.cpp: Added. + * dfg/DFGOSRExitCompiler.h: + * dfg/DFGOSRExitCompiler32_64.cpp: + (JSC::DFG::OSRExitCompiler::compileExit): + * dfg/DFGOSRExitCompiler64.cpp: + (JSC::DFG::OSRExitCompiler::compileExit): + * dfg/DFGOperations.cpp: + * dfg/DFGSpeculativeJIT.cpp: + * dfg/DFGSpeculativeJIT.h: + (JSC::DFG::SpeculativeJIT::speculationCheck): + * dfg/DFGThunks.cpp: Added. + (JSC::DFG::osrExitGenerationThunkGenerator): + * dfg/DFGThunks.h: Added. + * jit/JITCode.h: + (JSC::JITCode::dataAddressAtOffset): + * runtime/JSGlobalData.h: + +2011-11-09 Mark Hahnenberg <mhahnenberg@apple.com> + + Fixing build breakage + + Unreviewed build fix + + * JavaScriptCore.exp: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + +2011-11-09 Mark Hahnenberg <mhahnenberg@apple.com> + + De-virtualize JSVariableObject::isDynamicScope + https://bugs.webkit.org/show_bug.cgi?id=71933 + + Reviewed by Geoffrey Garen. + + * runtime/JSActivation.cpp: + * runtime/JSActivation.h: Inlined and de-virtualized isDynamicScope + (JSC::JSActivation::isDynamicScope): + * runtime/JSGlobalObject.cpp: + * runtime/JSGlobalObject.h: Inlined and de-virtualized isDynamicScope + (JSC::JSGlobalObject::isDynamicScope): + * runtime/JSStaticScopeObject.cpp: + * runtime/JSStaticScopeObject.h: Inlined and de-virtualized isDynamicScope + (JSC::JSStaticScopeObject::createStructure): Changed createStructure to use new JSType + (JSC::JSStaticScopeObject::isDynamicScope): + * runtime/JSType.h: Added new type for JSStaticScopeObject + * runtime/JSVariableObject.cpp: De-virtualized and added an implementation that checks the + object's type and calls the corresponding implementation. + (JSC::JSVariableObject::isDynamicScope): + * runtime/JSVariableObject.h: + +2011-11-09 Mark Hahnenberg <mhahnenberg@apple.com> + + De-virtualize JSGlobalObject::hasOwnPropertyForWrite + https://bugs.webkit.org/show_bug.cgi?id=71934 + + Reviewed by Geoffrey Garen. + + * runtime/JSGlobalObject.h: Removed the virtual-ness of hasOwnPropertyForWrite since nobody overrides it. + +2011-11-09 Gavin Barraclough <barraclough@apple.com> + + https://bugs.webkit.org/show_bug.cgi?id=71873 + + Reviewed by Geoff Garen. + + Incrementally re-landing these changes, trying to determine what went wrong. + (The whole patch failed tests on the build bot but worked locally. + + * assembler/MacroAssemblerARM.h: + (JSC::MacroAssemblerARM::absDouble): + * assembler/MacroAssemblerARMv7.h: + * assembler/MacroAssemblerMIPS.h: + (JSC::MacroAssemblerMIPS::absDouble): + * assembler/MacroAssemblerSH4.h: + (JSC::MacroAssemblerSH4::absDouble): + * assembler/MacroAssemblerX86.h: + (JSC::MacroAssemblerX86::absDouble): + * assembler/MacroAssemblerX86Common.h: + * assembler/MacroAssemblerX86_64.h: + (JSC::MacroAssemblerX86_64::absDouble): + * dfg/DFGSpeculativeJIT32_64.cpp: + (JSC::DFG::SpeculativeJIT::compile): + * dfg/DFGSpeculativeJIT64.cpp: + (JSC::DFG::SpeculativeJIT::compile): + * jit/ThunkGenerators.cpp: + (JSC::absThunkGenerator): + +2011-11-09 Mark Hahnenberg <mhahnenberg@apple.com> + + De-virtualize JSObject::getOwnPropertyDescriptor + https://bugs.webkit.org/show_bug.cgi?id=71523 + + Reviewed by Sam Weinig. + + Added getOwnPropertyDescriptor to the MethodTable, changed all of the + virtual versions of getOwnPropertyDescriptor to static ones, and + changed all of the call sites to the corresponding lookup in the MethodTable. + + * API/JSCallbackObject.h: + * API/JSCallbackObjectFunctions.h: + (JSC::::getOwnPropertyDescriptor): + * JavaScriptCore.exp: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * debugger/DebuggerActivation.cpp: + (JSC::DebuggerActivation::getOwnPropertyDescriptor): + * debugger/DebuggerActivation.h: + * runtime/Arguments.cpp: + (JSC::Arguments::getOwnPropertyDescriptor): + * runtime/Arguments.h: + * runtime/ArrayConstructor.cpp: + (JSC::ArrayConstructor::getOwnPropertyDescriptor): + * runtime/ArrayConstructor.h: + * runtime/ArrayPrototype.cpp: + (JSC::ArrayPrototype::getOwnPropertyDescriptor): + * runtime/ArrayPrototype.h: + * runtime/BooleanPrototype.cpp: + (JSC::BooleanPrototype::getOwnPropertyDescriptor): + * runtime/BooleanPrototype.h: + * runtime/ClassInfo.h: + * runtime/DateConstructor.cpp: + (JSC::DateConstructor::getOwnPropertyDescriptor): + * runtime/DateConstructor.h: + * runtime/DatePrototype.cpp: + (JSC::DatePrototype::getOwnPropertyDescriptor): + * runtime/DatePrototype.h: + * runtime/ErrorPrototype.cpp: + (JSC::ErrorPrototype::getOwnPropertyDescriptor): + * runtime/ErrorPrototype.h: + * runtime/JSArray.cpp: + (JSC::JSArray::getOwnPropertyDescriptor): + * runtime/JSArray.h: + * runtime/JSByteArray.cpp: + (JSC::JSByteArray::getOwnPropertyDescriptor): + * runtime/JSByteArray.h: + * runtime/JSCell.cpp: + (JSC::JSCell::getOwnPropertyDescriptor): + * runtime/JSCell.h: + * runtime/JSFunction.cpp: + (JSC::JSFunction::getOwnPropertyDescriptor): + * runtime/JSFunction.h: + * runtime/JSGlobalObject.cpp: + (JSC::JSGlobalObject::getOwnPropertyDescriptor): + * runtime/JSGlobalObject.h: + * runtime/JSNotAnObject.cpp: + (JSC::JSNotAnObject::getOwnPropertyDescriptor): + * runtime/JSNotAnObject.h: + * runtime/JSONObject.cpp: + (JSC::JSONObject::getOwnPropertyDescriptor): + * runtime/JSONObject.h: + * runtime/JSObject.cpp: + (JSC::JSObject::vtableAnchor): + (JSC::JSObject::propertyIsEnumerable): + (JSC::JSObject::getOwnPropertyDescriptor): + (JSC::JSObject::getPropertyDescriptor): + (JSC::JSObject::defineOwnProperty): + * runtime/JSObject.h: + * runtime/JSString.cpp: Removed getOwnPropertyDescriptor, since this seems to be a relic from a + bygone era when getOwnPropertyDescriptor was rooted in JSCell rather than JSObject. There were + no call sites for this version of getOwnPropertyDescriptor in the entire project. + * runtime/JSString.h: + * runtime/Lookup.h: + (JSC::getStaticPropertyDescriptor): + (JSC::getStaticFunctionDescriptor): + (JSC::getStaticValueDescriptor): + * runtime/MathObject.cpp: + (JSC::MathObject::getOwnPropertyDescriptor): + * runtime/MathObject.h: + * runtime/NumberConstructor.cpp: + (JSC::NumberConstructor::getOwnPropertyDescriptor): + * runtime/NumberConstructor.h: + * runtime/NumberPrototype.cpp: + (JSC::NumberPrototype::getOwnPropertyDescriptor): + * runtime/NumberPrototype.h: + * runtime/ObjectConstructor.cpp: + (JSC::ObjectConstructor::getOwnPropertyDescriptor): + (JSC::objectConstructorGetOwnPropertyDescriptor): + * runtime/ObjectConstructor.h: + * runtime/ObjectPrototype.cpp: + (JSC::ObjectPrototype::getOwnPropertyDescriptor): + * runtime/ObjectPrototype.h: + * runtime/RegExpConstructor.cpp: + (JSC::RegExpConstructor::getOwnPropertyDescriptor): + * runtime/RegExpConstructor.h: + * runtime/RegExpMatchesArray.h: + (JSC::RegExpMatchesArray::getOwnPropertyDescriptor): + * runtime/RegExpObject.cpp: + (JSC::RegExpObject::getOwnPropertyDescriptor): + * runtime/RegExpObject.h: + * runtime/RegExpPrototype.cpp: + (JSC::RegExpPrototype::getOwnPropertyDescriptor): + * runtime/RegExpPrototype.h: + * runtime/StringConstructor.cpp: + (JSC::StringConstructor::getOwnPropertyDescriptor): + * runtime/StringConstructor.h: + * runtime/StringObject.cpp: + (JSC::StringObject::vtableAnchor): Added to prevent a weak vtable. + (JSC::StringObject::getOwnPropertyDescriptor): + * runtime/StringObject.h: + * runtime/StringPrototype.cpp: + (JSC::StringPrototype::getOwnPropertyDescriptor): + * runtime/StringPrototype.h: + +2011-11-09 Gavin Barraclough <barraclough@apple.com> + + https://bugs.webkit.org/show_bug.cgi?id=71873 + + Reviewed by Geoff Garen. + + Incrementally re-landing these changes, trying to determine what went wrong. + (The whole patch failed tests on the build bot but worked locally. + + * assembler/MacroAssemblerARM.h: + (JSC::MacroAssemblerARM::supportsFloatingPoint): + (JSC::MacroAssemblerARM::supportsFloatingPointTruncate): + (JSC::MacroAssemblerARM::supportsFloatingPointSqrt): + (JSC::MacroAssemblerARM::supportsFloatingPointAbs): + * assembler/MacroAssemblerARMv7.h: + (JSC::MacroAssemblerARMv7::supportsFloatingPoint): + (JSC::MacroAssemblerARMv7::supportsFloatingPointTruncate): + (JSC::MacroAssemblerARMv7::supportsFloatingPointSqrt): + (JSC::MacroAssemblerARMv7::supportsFloatingPointAbs): + * assembler/MacroAssemblerMIPS.h: + (JSC::MacroAssemblerMIPS::supportsFloatingPoint): + (JSC::MacroAssemblerMIPS::supportsFloatingPointTruncate): + (JSC::MacroAssemblerMIPS::supportsFloatingPointSqrt): + (JSC::MacroAssemblerMIPS::supportsFloatingPointAbs): + * assembler/MacroAssemblerSH4.h: + (JSC::MacroAssemblerSH4::supportsFloatingPoint): + (JSC::MacroAssemblerSH4::supportsFloatingPointTruncate): + (JSC::MacroAssemblerSH4::supportsFloatingPointSqrt): + (JSC::MacroAssemblerSH4::supportsFloatingPointAbs): + * assembler/MacroAssemblerX86.h: + (JSC::MacroAssemblerX86::supportsFloatingPoint): + (JSC::MacroAssemblerX86::supportsFloatingPointTruncate): + (JSC::MacroAssemblerX86::supportsFloatingPointSqrt): + (JSC::MacroAssemblerX86::supportsFloatingPointAbs): + * assembler/MacroAssemblerX86_64.h: + (JSC::MacroAssemblerX86_64::supportsFloatingPoint): + (JSC::MacroAssemblerX86_64::supportsFloatingPointTruncate): + (JSC::MacroAssemblerX86_64::supportsFloatingPointSqrt): + (JSC::MacroAssemblerX86_64::supportsFloatingPointAbs): + * jit/ThunkGenerators.cpp: + (JSC::absThunkGenerator): + +2011-11-08 Darin Adler <darin@apple.com> + + Add code path in HashTable for emptyValueIsZero that does not require copying the empty value + https://bugs.webkit.org/show_bug.cgi?id=71875 + + Reviewed by Anders Carlsson. + + This is a step along the path of making OwnPtr work as HashMap value types. + + * wtf/Alignment.h: Moved the AlignedBufferChar and AlignedBuffer types from Vector.h here. + Also fixed include style. To include other WTF headers inside WTF, we use "" includes. + I did not change the code to fix style checker complaints. + + * wtf/HashTable.h: Added includes as needed and fixed include style. + (WTF::doubleHash): Removed the uneeeded and inappropriate "static" in this function, which + gave it internal linkage for no good reason. + (WTF::HashTable::checkKey): Made this use AlignedBuffer for the deleted value check to avoid + construction/destruction problems instead of doing the trick where we construct and destroy + an empty value twice. It's cleaner and simpler and avoids copying the empty value. + (WTF::HashTable::initializeBucket): Specialized initializeBucket to use memset when the + empty value is zero rather than copying an empty value. + + * wtf/Vector.h: Moved the AlignedBufferChar and AlignedBuffer types into Alignment.h. + +2011-11-09 Gabor Rapcsanyi <rgabor@webkit.org> + + Buildfix for 32bit debug mode. + + Reviewed by Csaba Osztrogonác. + + * dfg/DFGAbstractState.cpp: + (JSC::DFG::AbstractState::dump): + * dfg/DFGGraph.cpp: + (JSC::DFG::Graph::dump): + +2011-11-09 Andy Wingo <wingo@igalia.com> + + Enable the DFG JIT on X86-64 Linux platforms + https://bugs.webkit.org/show_bug.cgi?id=71373 + + Reviewed by Csaba Osztrogonác. + + * wtf/Platform.h (ENABLE_DFG_JIT): Enable the DFG JIT on the + x86-64 GNU/Linux platform. + * CMakeListsEfl.txt: Add JSValue64 implementations to EFL build. + +2011-11-09 Csaba Osztrogonác <ossy@webkit.org> + + Enable the DFG JIT on x86-64 Linux platforms + https://bugs.webkit.org/show_bug.cgi?id=71373 + + Enable DFG JIT by default on X86 Linux and Mac platforms + https://bugs.webkit.org/show_bug.cgi?id=71686 + + Buildfix for stricter compilers: -Werror=unused-but-set-variable + + Reviewed by Zoltan Herczeg. + + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::compilePutByValForByteArray): + * dfg/DFGSpeculativeJIT32_64.cpp: + (JSC::DFG::SpeculativeJIT::compile): + * dfg/DFGSpeculativeJIT64.cpp: + (JSC::DFG::SpeculativeJIT::compile): + +2011-11-09 Sheriff Bot <webkit.review.bot@gmail.com> + + Unreviewed, rolling out r99678. + http://trac.webkit.org/changeset/99678 + https://bugs.webkit.org/show_bug.cgi?id=71882 + + broke the build with -Werror=unused-but-set-variable + (Requested by tronical_ on #webkit). + + * CMakeListsEfl.txt: + * wtf/Platform.h: + +2011-11-09 Andy Wingo <wingo@igalia.com> + + Enable the DFG JIT on X86-64 Linux platforms + https://bugs.webkit.org/show_bug.cgi?id=71373 + + Reviewed by Filip Pizlo. + + * wtf/Platform.h (ENABLE_DFG_JIT): Enable the DFG JIT on the + x86-64 GNU/Linux platform. + * CMakeListsEfl.txt: Add JSValue64 implementations to EFL build. + +2011-11-09 Mark Hahnenberg <mhahnenberg@apple.com> + + De-virtualize JSObject::defineOwnProperty + https://bugs.webkit.org/show_bug.cgi?id=71429 + + Reviewed by Geoffrey Garen. + + Added defineOwnProperty to the MethodTable, changed all the virtual + implementations of defineOwnProperty to static ones, and replaced + all call sites with corresponding lookups in the MethodTable. + + * JavaScriptCore.exp: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * runtime/Arguments.cpp: + (JSC::Arguments::createStrictModeCallerIfNecessary): + (JSC::Arguments::createStrictModeCalleeIfNecessary): + * runtime/ClassInfo.h: + * runtime/JSCell.cpp: + (JSC::JSCell::defineOwnProperty): + * runtime/JSCell.h: + * runtime/JSObject.cpp: + (JSC::JSObject::defineOwnProperty): + * runtime/JSObject.h: + * runtime/ObjectConstructor.cpp: + (JSC::objectConstructorDefineProperty): + (JSC::defineProperties): + +2011-11-09 Simon Hausmann <simon.hausmann@nokia.com> + + [Qt] Build system cleanup + https://bugs.webkit.org/show_bug.cgi?id=71815 + + Reviewed by Kenneth Rohde Christiansen. + + * wtf/wtf.pri: Moved the glib dependency to javascriptcore.prf. + +2011-11-08 Simon Hausmann <simon.hausmann@nokia.com> + + [Qt] Replace use of QApplication with QGuiApplication + https://bugs.webkit.org/show_bug.cgi?id=71794 + + Reviewed by Andreas Kling. + + Add compat headers for use when building with Qt 4: QGuiApplication + is typedef'ed to QApplication. + + * wtf/qt/compat/QGuiApplication: Added. + * wtf/qt/compat/qguiapplication.h: Added. + +2011-11-08 Sheriff Bot <webkit.review.bot@gmail.com> + + Unreviewed, rolling out r99647. + http://trac.webkit.org/changeset/99647 + https://bugs.webkit.org/show_bug.cgi?id=71876 + + It broke jsc and layout tests on all bot (Requested by + Ossy_night on #webkit). + + * assembler/MacroAssemblerARM.h: + (JSC::MacroAssemblerARM::supportsFloatingPoint): + (JSC::MacroAssemblerARM::supportsFloatingPointTruncate): + (JSC::MacroAssemblerARM::supportsFloatingPointSqrt): + (JSC::MacroAssemblerARM::supportsDoubleBitops): + (JSC::MacroAssemblerARM::andnotDouble): + * assembler/MacroAssemblerARMv7.h: + (JSC::MacroAssemblerARMv7::supportsFloatingPoint): + (JSC::MacroAssemblerARMv7::supportsFloatingPointTruncate): + (JSC::MacroAssemblerARMv7::supportsFloatingPointSqrt): + (JSC::MacroAssemblerARMv7::supportsDoubleBitops): + * assembler/MacroAssemblerMIPS.h: + (JSC::MacroAssemblerMIPS::andnotDouble): + (JSC::MacroAssemblerMIPS::supportsFloatingPoint): + (JSC::MacroAssemblerMIPS::supportsFloatingPointTruncate): + (JSC::MacroAssemblerMIPS::supportsFloatingPointSqrt): + (JSC::MacroAssemblerMIPS::supportsDoubleBitops): + * assembler/MacroAssemblerSH4.h: + (JSC::MacroAssemblerSH4::supportsFloatingPoint): + (JSC::MacroAssemblerSH4::supportsFloatingPointTruncate): + (JSC::MacroAssemblerSH4::supportsFloatingPointSqrt): + (JSC::MacroAssemblerSH4::supportsDoubleBitops): + (JSC::MacroAssemblerSH4::andnotDouble): + * assembler/MacroAssemblerX86.h: + (JSC::MacroAssemblerX86::MacroAssemblerX86): + (JSC::MacroAssemblerX86::supportsFloatingPoint): + (JSC::MacroAssemblerX86::supportsFloatingPointTruncate): + (JSC::MacroAssemblerX86::supportsFloatingPointSqrt): + (JSC::MacroAssemblerX86::supportsDoubleBitops): + * assembler/MacroAssemblerX86Common.h: + (JSC::MacroAssemblerX86Common::andnotDouble): + * assembler/MacroAssemblerX86_64.h: + (JSC::MacroAssemblerX86_64::supportsFloatingPoint): + (JSC::MacroAssemblerX86_64::supportsFloatingPointTruncate): + (JSC::MacroAssemblerX86_64::supportsFloatingPointSqrt): + (JSC::MacroAssemblerX86_64::supportsDoubleBitops): + * assembler/X86Assembler.h: + * dfg/DFGByteCodeParser.cpp: + (JSC::DFG::ByteCodeParser::handleIntrinsic): + * dfg/DFGSpeculativeJIT32_64.cpp: + (JSC::DFG::SpeculativeJIT::compile): + * dfg/DFGSpeculativeJIT64.cpp: + (JSC::DFG::SpeculativeJIT::compile): + * jit/ThunkGenerators.cpp: + (JSC::absThunkGenerator): + * runtime/JSGlobalData.cpp: + +2011-11-08 Gavin Barraclough <barraclough@apple.com> + + Better abstract 'abs' operation through the MacroAssembler. + https://bugs.webkit.org/show_bug.cgi?id=71873 + + Reviewed by Geoff Garen. + + Currently the x86 specific instruction sequence to perform a double abs + is duplicated throughout the JITs / thunk generators. + + * assembler/MacroAssemblerARM.h: + (JSC::MacroAssemblerARM::supportsFloatingPoint): + (JSC::MacroAssemblerARM::supportsFloatingPointTruncate): + (JSC::MacroAssemblerARM::supportsFloatingPointSqrt): + (JSC::MacroAssemblerARM::supportsFloatingPointAbs): + (JSC::MacroAssemblerARM::absDouble): + - Renamed supportsFloatingPointAbs, make these methods static so that + we can check the JIT's capabilites before we begin compilation. + * assembler/MacroAssemblerARMv7.h: + (JSC::MacroAssemblerARMv7::supportsFloatingPoint): + (JSC::MacroAssemblerARMv7::supportsFloatingPointTruncate): + (JSC::MacroAssemblerARMv7::supportsFloatingPointSqrt): + (JSC::MacroAssemblerARMv7::supportsFloatingPointAbs): + - Renamed supportsFloatingPointAbs, make these methods static so that + we can check the JIT's capabilites before we begin compilation. + * assembler/MacroAssemblerMIPS.h: + (JSC::MacroAssemblerMIPS::absDouble): + (JSC::MacroAssemblerMIPS::supportsFloatingPoint): + (JSC::MacroAssemblerMIPS::supportsFloatingPointTruncate): + (JSC::MacroAssemblerMIPS::supportsFloatingPointSqrt): + (JSC::MacroAssemblerMIPS::supportsFloatingPointAbs): + - Renamed supportsFloatingPointAbs, make these methods static so that + we can check the JIT's capabilites before we begin compilation. + * assembler/MacroAssemblerSH4.h: + (JSC::MacroAssemblerSH4::supportsFloatingPoint): + (JSC::MacroAssemblerSH4::supportsFloatingPointTruncate): + (JSC::MacroAssemblerSH4::supportsFloatingPointSqrt): + (JSC::MacroAssemblerSH4::supportsFloatingPointAbs): + (JSC::MacroAssemblerSH4::absDouble): + - Renamed supportsFloatingPointAbs, make these methods static so that + we can check the JIT's capabilites before we begin compilation. + * assembler/MacroAssemblerX86.h: + (JSC::MacroAssemblerX86::absDouble): + (JSC::MacroAssemblerX86::supportsFloatingPoint): + (JSC::MacroAssemblerX86::supportsFloatingPointTruncate): + (JSC::MacroAssemblerX86::supportsFloatingPointSqrt): + (JSC::MacroAssemblerX86::supportsFloatingPointAbs): + - Made supports* methods static so that we can check the JIT's + capabilites before we begin compilation. Added absDouble. + * assembler/MacroAssemblerX86Common.h: + - Removed andnotDouble, added s_maskSignBit. + * assembler/MacroAssemblerX86_64.h: + (JSC::MacroAssemblerX86_64::absDouble): + (JSC::MacroAssemblerX86_64::supportsFloatingPoint): + (JSC::MacroAssemblerX86_64::supportsFloatingPointTruncate): + (JSC::MacroAssemblerX86_64::supportsFloatingPointSqrt): + (JSC::MacroAssemblerX86_64::supportsFloatingPointAbs): + - Made supports* methods static so that we can check the JIT's + capabilites before we begin compilation. Added absDouble. + * assembler/X86Assembler.h: + (JSC::X86Assembler::andpd_rr): + (JSC::X86Assembler::andpd_mr): + - Added support for andpd instruction. + * dfg/DFGByteCodeParser.cpp: + (JSC::DFG::ByteCodeParser::handleIntrinsic): + - Added checks for supportsFloatingPointAbs, supportsFloatingPointSqrt. + * dfg/DFGSpeculativeJIT32_64.cpp: + (JSC::DFG::SpeculativeJIT::compile): + - Switched to use doubleAbs, we can now also reuse the operand register for the result. + * dfg/DFGSpeculativeJIT64.cpp: + (JSC::DFG::SpeculativeJIT::compile): + - Switched to use doubleAbs, we can now also reuse the operand register for the result. + * jit/ThunkGenerators.cpp: + - Switched to use doubleAbs. + (JSC::absThunkGenerator): + * runtime/JSGlobalData.cpp: + - Declared MacroAssemblerX86Common::s_maskSignBit here. + This is a little ugly, but it doesn't seem worth adding a whole extra .cpp + to the compile for just one constant. + +2011-11-08 Gavin Barraclough <barraclough@apple.com> + + Move duplicates of SYMBOL_STRING* macros to the single location + https://bugs.webkit.org/show_bug.cgi?id=71456 + + Reviewed by Sam Weinig. + + * JavaScriptCore.xcodeproj/project.pbxproj: + * dfg/DFGOperations.cpp: + * jit/JITStubs.cpp: + * wtf/InlineASM.h: Added. + - Moved asm related macros. + +2011-11-08 Gavin Barraclough <barraclough@apple.com> + + Move code to handle 8bit regs from X86Assembler to MacroAssembler + https://bugs.webkit.org/show_bug.cgi?id=71867 + + Reviewed by Oliver Hunt. + + This code is fine, but is in the wrong place really. X86 assembler should + basically just format up exactly the instruction you request - not expand + out to a set of instructions (that is what the macro assembler layer is + for!). For other 8-bit ops, on X86 we don't guard against clients accessing + the XH registers. + + * assembler/MacroAssemblerX86Common.h: + (JSC::MacroAssemblerX86Common::store8): + * assembler/X86Assembler.h: + (JSC::X86Assembler::movb_rm): + - moved some code. + +2011-11-08 Filip Pizlo <fpizlo@apple.com> + + Unreviewed build fix for GTK. + + * GNUmakefile.list.am: + +2011-11-08 Gavin Barraclough <barraclough@apple.com> + + Build fix. + + * assembler/X86Assembler.h: + +2011-11-08 Gavin Barraclough <barraclough@apple.com> + + Errrk, failed to commit this in last change. + + * assembler/X86Assembler.h: + +2011-11-08 Gavin Barraclough <barraclough@apple.com> + + Remove an unused method. + + Rubber stamped by Geoff Garen. + + * assembler/AbstractMacroAssembler.h: + * assembler/AssemblerBuffer.h: + - removed rewindToLabel. + +2011-11-08 Gavin Barraclough <barraclough@apple.com> + + Fix OSR entry points to calculate offsets correctly WRT to branch compaction. + https://bugs.webkit.org/show_bug.cgi?id=71864 + + Reviewed by Filip Pizlo. + + * assembler/LinkBuffer.h: + (JSC::LinkBuffer::offsetOf): + - We use this to return the offsets into the code of the entry points. + * dfg/DFGJITCompiler.cpp: + (JSC::DFG::JITCompiler::compileEntry): + (JSC::DFG::JITCompiler::compileBody): + (JSC::DFG::JITCompiler::compile): + (JSC::DFG::JITCompiler::compileFunction): + - Move the construction of the speculative JIT outside of + compileBody, such that it is still available to link the + OSR entry points at the point we are linking. + * dfg/DFGJITCompiler.h: + (JSC::DFG::JITCompiler::noticeOSREntry): + - Pass the label of the block & linkbuffer into noticeOSREntry. + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::compile): + (JSC::DFG::SpeculativeJIT::linkOSREntries): + - Moved call to noticeOSREntry until we we linking. + * dfg/DFGSpeculativeJIT.h: + * jit/JIT.cpp: + (JSC::JIT::privateCompileMainPass): + (JSC::JIT::privateCompileSlowCases): + (JSC::JIT::privateCompile): + - Moved calculation of entries until we we linking. + * jit/JIT.h: + - Removed some members. + +2011-11-08 Filip Pizlo <fpizlo@apple.com> + + DFG OSR exit code should be generated by a separate compiler, not + related to DFG::JITCompiler + https://bugs.webkit.org/show_bug.cgi?id=71787 + + Reviewed by Gavin Barraclough. + + Moves the exitSpeculativeWithOSR() method from JITCompiler to + OSRExitCompiler::compileExit(). + + * CMakeListsEfl.txt: + * JavaScriptCore.xcodeproj/project.pbxproj: + * Target.pri: + * dfg/DFGJITCompiler.cpp: + (JSC::DFG::JITCompiler::linkOSRExits): + * dfg/DFGJITCompiler32_64.cpp: Removed. + * dfg/DFGOSRExitCompiler.h: Added. + (JSC::DFG::OSRExitCompiler::OSRExitCompiler): + * dfg/DFGOSRExitCompiler32_64.cpp: Added. + (JSC::DFG::OSRExitCompiler::compileExit): + * dfg/DFGOSRExitCompiler64.cpp: Added. + (JSC::DFG::OSRExitCompiler::compileExit): + * runtime/JSValue.h: + +2011-11-08 Filip Pizlo <fpizlo@apple.com> + + Basic DFG definitions should be moved out of DFGNode.h + https://bugs.webkit.org/show_bug.cgi?id=71861 + + Rubber-stamped by Gavin Barraclough. + + * JavaScriptCore.xcodeproj/project.pbxproj: + * dfg/DFGCommon.h: Added. + (JSC::DFG::NodeIndexTraits::defaultValue): + * dfg/DFGNode.h: + * dfg/DFGOSRExit.h: + * dfg/DFGRegisterBank.h: + +2011-11-08 Michael Saboff <msaboff@apple.com> + + Towards 8 Bit Strings: Templatize JSC::Parser class by Lexer type + https://bugs.webkit.org/show_bug.cgi?id=71761 + + Templatized Parser based on Lexer<T>. Moved two enums, + SourceElementsMode and FunctionRequirements out of Parser definition + to work around a clang compiler defect. + + Cleaned up SourceCode data() to return StringImpl* and eliminated + the recently added stringData() virtual method. + + To keep code in Parser.cpp and keep Parser.h small, the two flavors + of Parser are explicitly instantiated at the end of Parser.cpp. + + Reviewed by Gavin Barraclough. + + * interpreter/Interpreter.cpp: + (JSC::appendSourceToError): + * parser/Lexer.cpp: + (JSC::::setCode): + (JSC::::sourceCode): + * parser/Parser.cpp: + (JSC::::Parser): + (JSC::::~Parser): + (JSC::::parseInner): + (JSC::::didFinishParsing): + (JSC::::allowAutomaticSemicolon): + (JSC::::parseSourceElements): + (JSC::::parseVarDeclaration): + (JSC::::parseConstDeclaration): + (JSC::::parseDoWhileStatement): + (JSC::::parseWhileStatement): + (JSC::::parseVarDeclarationList): + (JSC::::parseConstDeclarationList): + (JSC::::parseForStatement): + (JSC::::parseBreakStatement): + (JSC::::parseContinueStatement): + (JSC::::parseReturnStatement): + (JSC::::parseThrowStatement): + (JSC::::parseWithStatement): + (JSC::::parseSwitchStatement): + (JSC::::parseSwitchClauses): + (JSC::::parseSwitchDefaultClause): + (JSC::::parseTryStatement): + (JSC::::parseDebuggerStatement): + (JSC::::parseBlockStatement): + (JSC::::parseStatement): + (JSC::::parseFormalParameters): + (JSC::::parseFunctionBody): + (JSC::::parseFunctionInfo): + (JSC::::parseFunctionDeclaration): + (JSC::::parseExpressionOrLabelStatement): + (JSC::::parseExpressionStatement): + (JSC::::parseIfStatement): + (JSC::::parseExpression): + (JSC::::parseAssignmentExpression): + (JSC::::parseConditionalExpression): + (JSC::::isBinaryOperator): + (JSC::::parseBinaryExpression): + (JSC::::parseProperty): + (JSC::::parseObjectLiteral): + (JSC::::parseStrictObjectLiteral): + (JSC::::parseArrayLiteral): + (JSC::::parsePrimaryExpression): + (JSC::::parseArguments): + (JSC::::parseMemberExpression): + (JSC::::parseUnaryExpression): + * parser/Parser.h: + (JSC::::parse): + (JSC::parse): + * parser/SourceCode.h: + (JSC::SourceCode::data): + (JSC::SourceCode::subExpression): + * parser/SourceProvider.h: + (JSC::UStringSourceProvider::data): + +2011-11-08 Gavin Barraclough <barraclough@apple.com> + + Fix PropertyAccessRecords in DFG JIT to take account of branch compaction. + https://bugs.webkit.org/show_bug.cgi?id=71855 + + Reviewed by Filip Pizlo. + + The DFG JIT presently calculates a set of offsets early, before branches have been compacted. + This won't work on ARMv7. + + * assembler/AbstractMacroAssembler.h: + (JSC::AbstractMacroAssembler::differenceBetweenCodePtr): + * assembler/LinkBuffer.h: + (JSC::LinkBuffer::locationOf): + * dfg/DFGJITCodeGenerator32_64.cpp: + (JSC::DFG::JITCodeGenerator::cachedGetById): + (JSC::DFG::JITCodeGenerator::cachedPutById): + * dfg/DFGJITCodeGenerator64.cpp: + (JSC::DFG::JITCodeGenerator::cachedGetById): + (JSC::DFG::JITCodeGenerator::cachedPutById): + * dfg/DFGJITCompiler.cpp: + (JSC::DFG::JITCompiler::link): + * dfg/DFGJITCompiler.h: + (JSC::DFG::PropertyAccessRecord::PropertyAccessRecord): + (JSC::DFG::JITCompiler::addPropertyAccess): + +2011-11-08 Gavin Barraclough <barraclough@apple.com> + + DFG JIT calculation of OSR entry points is not THUMB2 safe + https://bugs.webkit.org/show_bug.cgi?id=71852 + + Reviewed by Oliver Hunt. + + Executable addresses are tagged with a low bit set to distinguish + between THUMB2 and traditional ARM. + + * dfg/DFGJITCompiler.cpp: + (JSC::DFG::JITCompiler::exitSpeculativeWithOSR): + * dfg/DFGJITCompiler32_64.cpp: + (JSC::DFG::JITCompiler::exitSpeculativeWithOSR): + * dfg/DFGOSREntry.cpp: + (JSC::DFG::prepareOSREntry): + * jit/JITCode.h: + (JSC::JITCode::executableAddressAtOffset): + (JSC::JITCode::start): + (JSC::JITCode::size): + +2011-11-08 Michael Saboff <msaboff@apple.com> + + JSC::Parser::Parser leaks Lexer member + https://bugs.webkit.org/show_bug.cgi?id=71847 + + Changed m_lexer member of Parser to be OwnPtr to fix a memory leak. + + Reviewed by Oliver Hunt. + + * parser/Parser.cpp: + (JSC::Parser::Parser): + (JSC::Parser::parseFunctionBody): + * parser/Parser.h: + +2011-11-08 Yuqiang Xian <yuqiang.xian@intel.com> + + Enable DFG JIT by default on X86 Linux and Mac platforms + https://bugs.webkit.org/show_bug.cgi?id=71686 + + Reviewed by Filip Pizlo. + + We can get 9% on SunSpider, 89% on Kraken and 37% on V8, on Linux X86. + + * wtf/Platform.h: + +2011-11-08 Yuqiang Xian <yuqiang.xian@intel.com> + + DFG 32_64 - update make lists for efl, gtk, and Qt ports with DFG change r99519 + https://bugs.webkit.org/show_bug.cgi?id=71768 + + Reviewed by Geoffrey Garen. + + Also includes a fix to make the newly introduced AssemblyHelpers + friend of JSValue as we need the Tag definitions. + + * CMakeListsEfl.txt: + * GNUmakefile.list.am: + * Target.pri: + * runtime/JSValue.h: + +2011-11-07 Yuqiang Xian <yuqiang.xian@intel.com> + + Fix gcc 4.4 compilation warnings in DFG 32_64 + https://bugs.webkit.org/show_bug.cgi?id=71762 + + Reviewed by Filip Pizlo. + + * dfg/DFGJITCodeGenerator.h: + (JSC::DFG::JITCodeGenerator::registersMatched): + +2011-11-07 Filip Pizlo <fpizlo@apple.com> + + DFG code base should allow for classes not related to DFG::JITCompiler + to use DFG idioms + https://bugs.webkit.org/show_bug.cgi?id=71746 + + Reviewed by Gavin Barraclough. + + * JavaScriptCore.xcodeproj/project.pbxproj: + * dfg/DFGAssemblyHelpers.cpp: Added. + (JSC::DFG::AssemblyHelpers::decodedCodeMapFor): + (JSC::DFG::AssemblyHelpers::emitCount): + (JSC::DFG::AssemblyHelpers::setSamplingFlag): + (JSC::DFG::AssemblyHelpers::clearSamplingFlag): + (JSC::DFG::AssemblyHelpers::jitAssertIsInt32): + (JSC::DFG::AssemblyHelpers::jitAssertIsJSInt32): + (JSC::DFG::AssemblyHelpers::jitAssertIsJSNumber): + (JSC::DFG::AssemblyHelpers::jitAssertIsJSDouble): + (JSC::DFG::AssemblyHelpers::jitAssertIsCell): + * dfg/DFGAssemblyHelpers.h: Added. + * dfg/DFGJITCompiler.cpp: + * dfg/DFGJITCompiler.h: + (JSC::DFG::JITCompiler::JITCompiler): + (JSC::DFG::JITCompiler::graph): + * dfg/DFGJITCompiler32_64.cpp: + * dfg/DFGOSRExit.h: Added. + (JSC::DFG::SpeculationRecovery::SpeculationRecovery): + (JSC::DFG::SpeculationRecovery::type): + (JSC::DFG::SpeculationRecovery::dest): + (JSC::DFG::SpeculationRecovery::src): + (JSC::DFG::OSRExit::numberOfRecoveries): + (JSC::DFG::OSRExit::valueRecovery): + (JSC::DFG::OSRExit::isArgument): + (JSC::DFG::OSRExit::isVariable): + (JSC::DFG::OSRExit::argumentForIndex): + (JSC::DFG::OSRExit::variableForIndex): + (JSC::DFG::OSRExit::operandForArgument): + (JSC::DFG::OSRExit::operandForIndex): + * dfg/DFGSpeculativeJIT.h: + +2011-11-07 Filip Pizlo <fpizlo@apple.com> + + Switch back to 1+1 value profiling buckets, since it didn't help on arewefastyet, + but it appears to help on other benchmarks. + + Rubber stamped by Oliver Hunt. + + * bytecode/ValueProfile.h: + +2011-11-07 Ariya Hidayat <ariya@sencha.com> + + "use strict" can not contain escape sequences or line continuation + https://bugs.webkit.org/show_bug.cgi?id=71532 + + Reviewed by Darin Adler. + + Store the actual literal length (before the escapes and line + continuation are encoded) while parsing the directive and use it + for the directive comparison. + + * parser/Parser.cpp: + (JSC::Parser::parseSourceElements): + (JSC::Parser::parseStatement): + * parser/Parser.h: + +2011-11-06 Filip Pizlo <fpizlo@apple.com> + + DFG operationCreateThis slow path may get the wrong callee in case of inlining + https://bugs.webkit.org/show_bug.cgi?id=71647 + + Reviewed by Oliver Hunt. + + No new tests because I only saw this manifest itself when I had other bugs + leading to spurious slow path executions. + + * dfg/DFGJITCodeGenerator.h: + (JSC::DFG::callOperation): + * dfg/DFGOperations.cpp: + * dfg/DFGOperations.h: + * dfg/DFGSpeculativeJIT32_64.cpp: + (JSC::DFG::SpeculativeJIT::compile): + * dfg/DFGSpeculativeJIT64.cpp: + (JSC::DFG::SpeculativeJIT::compile): + +2011-11-07 Mark Hahnenberg <mhahnenberg@apple.com> + + De-virtualize JSObject::putWithAttributes + https://bugs.webkit.org/show_bug.cgi?id=71716 + + Reviewed by Darin Adler. + + Added putWithAttributes to the MethodTable, changed all the virtual + implementations of putWithAttributes to static ones, and replaced + all call sites with corresponding lookups in the MethodTable. + + * API/JSObjectRef.cpp: + (JSObjectSetProperty): + * JavaScriptCore.exp: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * debugger/DebuggerActivation.cpp: + (JSC::DebuggerActivation::putWithAttributes): + * debugger/DebuggerActivation.h: + * interpreter/Interpreter.cpp: + (JSC::Interpreter::execute): + * runtime/ClassInfo.h: + * runtime/JSActivation.cpp: + (JSC::JSActivation::putWithAttributes): + * runtime/JSActivation.h: + * runtime/JSCell.cpp: + (JSC::JSCell::putWithAttributes): + * runtime/JSCell.h: + * runtime/JSGlobalObject.cpp: + (JSC::JSGlobalObject::putWithAttributes): + * runtime/JSGlobalObject.h: + * runtime/JSObject.cpp: + (JSC::JSObject::putWithAttributes): + (JSC::putDescriptor): + * runtime/JSObject.h: + * runtime/JSStaticScopeObject.cpp: + (JSC::JSStaticScopeObject::putWithAttributes): + * runtime/JSStaticScopeObject.h: + * runtime/JSVariableObject.cpp: + (JSC::JSVariableObject::putWithAttributes): + * runtime/JSVariableObject.h: + +2011-11-07 Dmitry Lomov <dslomov@google.com> + + Unreviewed. Release build fix. + + * parser/Lexer.cpp: + (JSC::assertCharIsIn8BitRange): + +2011-11-07 Filip Pizlo <fpizlo@apple.com> + + Switch the value profiler back to 8 buckets, because we suspect that while this + is more expensive it's also more stable. + + Rubber stamped by Geoff Garen. + + * bytecode/ValueProfile.h: + +2011-11-07 Andrew Wason <rectalogic@rectalogic.com> + + Uninitialized Heap member var + https://bugs.webkit.org/show_bug.cgi?id=71722 + + Reviewed by Filip Pizlo. + + * heap/Heap.cpp: + (JSC::Heap::Heap): Initialize m_blockFreeingThreadShouldQuit + +2011-11-07 Yuqiang Xian <yuqiang.xian@intel.com> + + DFG 32_64 - registers cannot be reused arbitrarily if speculation failures are possible + https://bugs.webkit.org/show_bug.cgi?id=71684 + + Reviewed by Filip Pizlo. + + Currently in DFG JIT, we try to reuse the physical register of an + operand for temporary usage if the current use of the operand is the + last use. But sometimes this can be wrong, for example if there are + possible speculation failures and we need to fallback to baseline JIT, + the value of the operand which is supposed to be hold in the physical + register can be modified by register reusing. The fixes the last + inspector failures in layout test on Mac 32-bit if switching on DFG. + + * dfg/DFGSpeculativeJIT32_64.cpp: + (JSC::DFG::SpeculativeJIT::emitObjectOrOtherBranch): + (JSC::DFG::SpeculativeJIT::compile): + +2011-11-07 Ryosuke Niwa <rniwa@webkit.org> + + REGRESSION(r99436): Broke Snow Leopard debug build + https://bugs.webkit.org/show_bug.cgi?id=71713 + + Reviewed by Darin Adler. + + Put the assertion in a template and use template specialization + to avoid warning when instantiated with UChar or LChar. + + In the long term, we should have traits for unsigned integral types + and use that to specialize template instead of specializing it for UChar and LChar. + + * parser/Lexer.cpp: + (JSC::assertCharIsIn8BitRange): + (JSC::::append8): + +2011-11-07 ChangSeok Oh <shivamidow@gmail.com> + + [EFL] Support requestAnimationFrame API + https://bugs.webkit.org/show_bug.cgi?id=67112 + + Reviewed by Andreas Kling. + + Let EFL port use REQUEST_ANIMATION_FRAME_TIMER. + + * wtf/Platform.h: + +2011-11-07 Michael Saboff <msaboff@apple.com> + + Towards 8 Bit Strings: Templatize JSC::Lexer class by character type + https://bugs.webkit.org/show_bug.cgi?id=71331 + + Change the Lexer class to be a template class based on the character + type of the source. In the process updated the parseIdentifier() + and parseString() methods to create 8 bit strings where possible. + Also added some helper methods for accumulating temporary string + data in the 8 and 16 bit vectors. + + Changed the SourceProvider::data() virtual method to return a + StringImpl* instead of a UChar*. + + Updated the KeywordLookup generator to create code to match keywords + for both 8 and 16 bit source strings. + + Due to a compiler bug (<rdar://problem/10194295>) moved enum + definition outside of Lexer class declaration. Remove second enum + no longer needed. + + Reviewed by Darin Adler. + + * KeywordLookupGenerator.py: + * interpreter/Interpreter.cpp: + (JSC::Interpreter::callEval): + * parser/Lexer.cpp: + (JSC::::Lexer): + (JSC::::~Lexer): + (JSC::::getInvalidCharMessage): + (JSC::::currentCharacter): + (JSC::::setCode): + (JSC::::internalShift): + (JSC::::shift): + (JSC::::peek): + (JSC::::getUnicodeCharacter): + (JSC::::shiftLineTerminator): + (JSC::::lastTokenWasRestrKeyword): + (JSC::::record8): + (JSC::::append8): + (JSC::::append16): + (JSC::::record16): + (JSC::::parseIdentifier): + (JSC::::parseIdentifierSlowCase): + (JSC::::parseString): + (JSC::::parseStringSlowCase): + (JSC::::parseHex): + (JSC::::parseOctal): + (JSC::::parseDecimal): + (JSC::::parseNumberAfterDecimalPoint): + (JSC::::parseNumberAfterExponentIndicator): + (JSC::::parseMultilineComment): + (JSC::::nextTokenIsColon): + (JSC::::lex): + (JSC::::scanRegExp): + (JSC::::skipRegExp): + (JSC::::clear): + (JSC::::sourceCode): + * parser/Lexer.h: + (JSC::Lexer::append16): + (JSC::Lexer::currentOffset): + (JSC::Lexer::setOffsetFromCharOffset): + (JSC::::isWhiteSpace): + (JSC::::isLineTerminator): + (JSC::::convertHex): + (JSC::::convertUnicode): + (JSC::::makeIdentifier): + (JSC::::setCodeStart): + (JSC::::makeIdentifierLCharFromUChar): + (JSC::::lexExpectIdentifier): + * parser/Parser.cpp: + (JSC::Parser::Parser): + (JSC::Parser::parseProperty): + (JSC::Parser::parseMemberExpression): + * parser/Parser.h: + (JSC::Parser::next): + (JSC::Parser::nextExpectIdentifier): + * parser/ParserArena.h: + (JSC::IdentifierArena::makeIdentifier): + (JSC::IdentifierArena::makeIdentifierLCharFromUChar): + * parser/SourceCode.h: + (JSC::SourceCode::subExpression): + * parser/SourceProvider.h: + (JSC::UStringSourceProvider::stringData): + * parser/SourceProviderCache.h: + * parser/SyntaxChecker.h: + * runtime/FunctionPrototype.cpp: + (JSC::insertSemicolonIfNeeded): + * runtime/Identifier.cpp: + (JSC::IdentifierTable::add): + (JSC::IdentifierLCharFromUCharTranslator::hash): + (JSC::IdentifierLCharFromUCharTranslator::equal): + (JSC::IdentifierLCharFromUCharTranslator::translate): + (JSC::Identifier::add8): + * runtime/Identifier.h: + (JSC::Identifier::Identifier): + (JSC::Identifier::createLCharFromUChar): + (JSC::Identifier::canUseSingleCharacterString): + (JSC::IdentifierCharBufferTranslator::hash): + (JSC::IdentifierCharBufferTranslator::equal): + (JSC::IdentifierCharBufferTranslator::translate): + (JSC::Identifier::add): + (JSC::Identifier::equal): + (JSC::IdentifierTable::add): + * runtime/JSGlobalObjectFunctions.cpp: + (JSC::decode): + (JSC::parseIntOverflow): + (JSC::globalFuncUnescape): + * runtime/JSGlobalObjectFunctions.h: + (JSC::parseIntOverflow): + * runtime/LiteralParser.cpp: + (JSC::LiteralParser::tryJSONPParse): + (JSC::LiteralParser::Lexer::lexString): + * wtf/text/StringImpl.h: + +2011-11-07 Tor Arne Vestbø <tor.arne.vestbo@nokia.com> + + [Qt] Put the jsc binary in 'bin' instead of leaving it deep in the build tree + + Allows us to not package up the whole Source/JavaScriptCore directory for the + buildbots. + + Reviewed-by Simon Hausmann. + + * jsc.pro: + +2011-11-06 Filip Pizlo <fpizlo@apple.com> + + REGRESSION(r99374): GTK+ build of the jsc binary doesn't like the call + to initializeMainThread, and crashes + https://bugs.webkit.org/show_bug.cgi?id=71643 + + Reviewed by Sam Weinig. + + * jsc.cpp: + (main): + +2011-11-06 Sam Weinig <sam@webkit.org> + + Add space missing from some class declarations + https://bugs.webkit.org/show_bug.cgi?id=71632 + + Reviewed by Anders Carlsson. + + * assembler/AssemblerBufferWithConstantPool.h: + * bytecode/CodeBlock.h: + * dfg/DFGVariableAccessData.h: + * heap/VTableSpectrum.h: + * jit/ExecutableAllocator.cpp: + * jit/ExecutableAllocatorFixedVMPool.cpp: + * wtf/MetaAllocatorHandle.h: + * wtf/UnionFind.h: + +2011-11-06 Sam Weinig <sam@webkit.org> + + Allow use of FINAL in JavaScriptCore + https://bugs.webkit.org/show_bug.cgi?id=71630 + + Reviewed by Anders Carlsson. + + * Configurations/Base.xcconfig: + Don't warn about C++11 extensions used in C++98 mode. + +2011-11-05 Filip Pizlo <fpizlo@apple.com> + + Value profiling should just use two buckets + https://bugs.webkit.org/show_bug.cgi?id=71619 + + Reviewed by Gavin Barraclough. + + Added one more configuration options (like Heuristics::minimumOptimizationDelay), + improved debugging in JIT optimization support, changed the number of buckets + in the value profile from 9 to 2, and wrote a more optimal value profiling path + in the old JIT to take advantage of this. It's still possible to play around with + larger numbers of buckets, and we should probably keep this for a little while + until we convince ourselves that using just two buckets is the right call. + + * bytecode/CodeBlock.cpp: + (JSC::CodeBlock::shouldOptimizeNow): + * bytecode/ValueProfile.h: + * jit/JITInlineMethods.h: + (JSC::JIT::emitValueProfilingSite): + * jit/JITStubs.cpp: + (JSC::DEFINE_STUB_FUNCTION): + * runtime/Heuristics.cpp: + (JSC::Heuristics::initializeHeuristics): + * runtime/Heuristics.h: + +2011-11-03 Filip Pizlo <fpizlo@apple.com> + + JSC should be able to sample itself in a more flexible way than just sampling flags + https://bugs.webkit.org/show_bug.cgi?id=71522 + + Reviewed by Gavin Barraclough. + + Added a construct that looks like SamplingRegion samplingRegion("name"). + + * JavaScriptCore.exp: + * JavaScriptCore.xcodeproj/project.pbxproj: + * bytecode/SamplingTool.cpp: + (JSC::SamplingRegion::Locker::Locker): + (JSC::SamplingRegion::Locker::~Locker): + (JSC::SamplingRegion::sample): + (JSC::SamplingRegion::dump): + (JSC::SamplingRegion::dumpInternal): + (JSC::SamplingThread::threadStartFunc): + * bytecode/SamplingTool.h: + (JSC::SamplingRegion::SamplingRegion): + (JSC::SamplingRegion::~SamplingRegion): + (JSC::SamplingRegion::exchangeCurrent): + * bytecompiler/BytecodeGenerator.cpp: + (JSC::BytecodeGenerator::generate): + * dfg/DFGDriver.cpp: + (JSC::DFG::compile): + * heap/Heap.cpp: + (JSC::Heap::markRoots): + (JSC::Heap::collect): + * heap/VTableSpectrum.cpp: + (JSC::VTableSpectrum::countVPtr): + (JSC::VTableSpectrum::dump): + * heap/VTableSpectrum.h: + * jsc.cpp: + (main): + (runWithScripts): + * parser/Parser.h: + (JSC::parse): + * runtime/Executable.cpp: + (JSC::EvalExecutable::compileInternal): + (JSC::ProgramExecutable::compileInternal): + (JSC::FunctionExecutable::compileForCallInternal): + (JSC::FunctionExecutable::compileForConstructInternal): + * wtf/Atomics.h: + (WTF::weakCompareAndSwap): + * wtf/Platform.h: + * wtf/Spectrum.h: Added. + (WTF::Spectrum::Spectrum): + (WTF::Spectrum::add): + (WTF::Spectrum::get): + (WTF::Spectrum::begin): + (WTF::Spectrum::end): + (WTF::Spectrum::KeyAndCount::KeyAndCount): + (WTF::Spectrum::KeyAndCount::operator<): + (WTF::Spectrum::buildList): + * wtf/wtf.pri: + +2011-11-05 Sam Weinig <sam@webkit.org> + + Fix windows build. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + +2011-11-04 Sam Weinig <sam@webkit.org> + + Reduce the number of putWithAttributes + https://bugs.webkit.org/show_bug.cgi?id=71597 + + Reviewed by Adam Roben. + + * JavaScriptCore.exp: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + Remove exports of removed functions. + + * runtime/JSActivation.cpp: + (JSC::JSActivation::putWithAttributes): + Calling the overload without the extra parameters does the same thing. + + * runtime/JSObject.cpp: + (JSC::JSObject::putWithAttributes): + * runtime/JSObject.h: + Remove four unused JSObject::putWithAttributes overloads and make one of the remaining + two overloads not virtual, since no one overrides it. + +2011-11-04 Pratik Solanki <psolanki@apple.com> + + sqrtDouble and andnotDouble should be declared noreturn + https://bugs.webkit.org/show_bug.cgi?id=71592 + + Reviewed by Sam Weinig. + + * assembler/MacroAssemblerARMv7.h: + +2011-11-04 Mark Hahnenberg <mhahnenberg@apple.com> + + De-virtualize JSObject::hasInstance + https://bugs.webkit.org/show_bug.cgi?id=71430 + + Reviewed by Darin Adler. + + Added hasInstance to the MethodTable, changed all the virtual + implementations of hasInstance to static ones, and replaced + all call sites with corresponding lookups in the MethodTable. + + * API/JSCallbackObject.h: + * API/JSCallbackObjectFunctions.h: + (JSC::::hasInstance): + * API/JSValueRef.cpp: + (JSValueIsInstanceOfConstructor): + * JavaScriptCore.exp: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * interpreter/Interpreter.cpp: + (JSC::Interpreter::privateExecute): + * jit/JITStubs.cpp: + (JSC::DEFINE_STUB_FUNCTION): + * runtime/ClassInfo.h: + * runtime/JSBoundFunction.cpp: + (JSC::JSBoundFunction::hasInstance): + * runtime/JSBoundFunction.h: + * runtime/JSCell.cpp: + (JSC::JSCell::hasInstance): + * runtime/JSCell.h: + * runtime/JSObject.cpp: + (JSC::JSObject::hasInstance): + * runtime/JSObject.h: + +2011-11-04 Tor Arne Vestbø <tor.arne.vestbo@nokia.com> + + [Qt] Refactor and clean up the qmake build system + + The qmake build system has accumulated a bit of cruft and redundancy + over time. There's also a fairly tight coupling between how to build + the various targets, and _what_ to build, making it harder to add new + rules or sources. This patch aims to elevate these issues somewhat. + + This is a short-list of the changes: + + * The rules for how to build targets are now mostly contained as + prf-files in Tools/qmake/mkspecs/features. Using mkspecs also + allows us to do pre- and post-processing of each project file, + which helps to clean up the actual project files. + + * Derived sources are no longer generated as a separate make-step + but is part of each target's project file as a subdir. Makefile + rules are used to ensure that we run make on the derived sources + before running qmake on the actual target makefile. This makes + it easier to keep a proper dependency between derived sources + and the target. + + * We use GNU make and the compiler to generate dependencies on + UNIX-based systems running Qt 5. This allows us to lessen the + need to run qmake, which should reduce compile time. + + * WebKit2 is now build by default if building with Qt 5. It can + be disabled by passing --no-webkit2 to build-webkit. + + The result of these changes are hopefully a cleaner and easier + build system to modify, and faster build times due to no longer + running qmake on every single build. It's also a first step + towards possibly generating the list of sources using another + build system. + + https://bugs.webkit.org/show_bug.cgi?id=71222 + + Reviewed by Simon Hausmann. + + * DerivedSources.pri: Added. + * DerivedSources.pro: Removed. + * JavaScriptCore.pro: + * Target.pri: Copied from Source/JavaScriptCore/JavaScriptCore.pro. + * headers.pri: Removed. + * jsc.pro: + * wtf/wtf.pri: + * yarr/yarr.pri: + +2011-11-04 Yuqiang Xian <yuqiang.xian@intel.com> + + More code clean-up in DFG 32_64 + https://bugs.webkit.org/show_bug.cgi?id=71540 + + Remove unnecessary code duplications, and fix compilation warnings. + + Reviewed by Gavin Barraclough. + + * dfg/DFGJITCompiler.cpp: + (JSC::DFG::JITCompiler::emitCount): + (JSC::DFG::JITCompiler::setSamplingFlag): + (JSC::DFG::JITCompiler::clearSamplingFlag): + (JSC::DFG::JITCompiler::jitAssertIsCell): + * dfg/DFGJITCompiler32_64.cpp: + * dfg/DFGSpeculativeJIT32_64.cpp: + (JSC::DFG::SpeculativeJIT::compile): + +2011-11-04 Csaba Osztrogonác <ossy@webkit.org> + + De-virtualize JSObject::hasInstance + https://bugs.webkit.org/show_bug.cgi?id=71430 + + Unreviewed rolling out r99238, because it made a test crash on all platform. + + * API/JSCallbackObject.h: + * API/JSCallbackObjectFunctions.h: + (JSC::::hasInstance): + * API/JSValueRef.cpp: + (JSValueIsInstanceOfConstructor): + * JavaScriptCore.exp: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * interpreter/Interpreter.cpp: + (JSC::Interpreter::privateExecute): + * jit/JITStubs.cpp: + (JSC::DEFINE_STUB_FUNCTION): + * runtime/ClassInfo.h: + * runtime/JSBoundFunction.cpp: + (JSC::JSBoundFunction::hasInstance): + * runtime/JSBoundFunction.h: + * runtime/JSCell.cpp: + * runtime/JSCell.h: + * runtime/JSObject.cpp: + (JSC::JSObject::hasInstance): + * runtime/JSObject.h: + +2011-11-03 Mark Hahnenberg <mhahnenberg@apple.com> + + De-virtualize JSObject::getPropertyNames + https://bugs.webkit.org/show_bug.cgi?id=71306 + + Reviewed by Darin Adler. + + Added getPropertyNames to the MethodTable, changed all the virtual + implementations of getPropertyNames to static ones, and replaced + all call sites with corresponding lookups in the MethodTable. + + * API/JSObjectRef.cpp: + (JSObjectCopyPropertyNames): + * JavaScriptCore.exp: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * debugger/DebuggerActivation.cpp: + (JSC::DebuggerActivation::getOwnPropertyNames): + * runtime/ClassInfo.h: + * runtime/JSCell.cpp: + (JSC::JSCell::getPropertyNames): + * runtime/JSCell.h: + * runtime/JSObject.cpp: + (JSC::JSObject::getPropertyNames): + (JSC::JSObject::getOwnPropertyNames): + * runtime/JSObject.h: + * runtime/JSPropertyNameIterator.cpp: + (JSC::JSPropertyNameIterator::create): + * runtime/ScopeChain.cpp: + (JSC::ScopeChainNode::print): + * runtime/Structure.cpp: + (JSC::Structure::getPropertyNamesFromStructure): + * runtime/Structure.h: + +2011-11-03 Darin Adler <darin@apple.com> + + Change remaining callers of releaseRef to call leakRef + https://bugs.webkit.org/show_bug.cgi?id=71422 + + * wtf/text/AtomicString.cpp: + (WTF::HashAndUTF8CharactersTranslator::translate): Use leakRef. + +2011-11-02 Darin Adler <darin@apple.com> + + Change remaining callers of releaseRef to call leakRef + https://bugs.webkit.org/show_bug.cgi?id=71422 + + * wtf/text/AtomicString.cpp: + (WTF::HashAndUTF8CharactersTranslator::translate): Use leakRef. + +2011-11-03 Mark Hahnenberg <mhahnenberg@apple.com> + + De-virtualize JSObject::hasInstance + https://bugs.webkit.org/show_bug.cgi?id=71430 + + Reviewed by Darin Adler. + + Added hasInstance to the MethodTable, changed all the virtual + implementations of hasInstance to static ones, and replaced + all call sites with corresponding lookups in the MethodTable. + + * API/JSCallbackObject.h: + * API/JSCallbackObjectFunctions.h: + (JSC::::hasInstance): + * API/JSValueRef.cpp: + (JSValueIsInstanceOfConstructor): + * JavaScriptCore.exp: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * interpreter/Interpreter.cpp: + (JSC::Interpreter::privateExecute): + * jit/JITStubs.cpp: + (JSC::DEFINE_STUB_FUNCTION): + * runtime/ClassInfo.h: + * runtime/JSBoundFunction.cpp: + (JSC::JSBoundFunction::hasInstance): + * runtime/JSBoundFunction.h: + * runtime/JSCell.cpp: + (JSC::JSCell::hasInstance): + * runtime/JSCell.h: + * runtime/JSObject.cpp: + (JSC::JSObject::hasInstance): + * runtime/JSObject.h: + +2011-11-03 Filip Pizlo <fpizlo@apple.com> + + JIT-specific code should be able to refer to register types even on JIT-disabled builds + https://bugs.webkit.org/show_bug.cgi?id=71498 + + Reviewed by Gavin Barraclough. + + * assembler/MacroAssembler.h: + (MacroAssembler::MacroAssembler): + +2011-11-03 Mark Hahnenberg <mhahnenberg@apple.com> + + De-virtualize JSObject::className + https://bugs.webkit.org/show_bug.cgi?id=71428 + + Reviewed by Sam Weinig. + + Added className to the MethodTable, changed all the virtual + implementations of className to static ones, and replaced + all call sites with corresponding lookups in the MethodTable. + + * API/JSCallbackObject.h: + * API/JSCallbackObjectFunctions.h: + (JSC::::className): + * JavaScriptCore.exp: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * debugger/DebuggerActivation.cpp: + (JSC::DebuggerActivation::className): + * debugger/DebuggerActivation.h: + * jsc.cpp: + (GlobalObject::createStructure): + * profiler/Profiler.cpp: + (JSC::Profiler::createCallIdentifier): + * runtime/ClassInfo.h: + * runtime/JSCell.cpp: + (JSC::JSCell::className): + * runtime/JSCell.h: + * runtime/JSObject.cpp: + (JSC::JSObject::className): + * runtime/JSObject.h: + * runtime/ObjectPrototype.cpp: + (JSC::objectProtoFuncToString): + * testRegExp.cpp: + (GlobalObject::createStructure): + +2011-11-02 Jer Noble <jer.noble@apple.com> + + Add Clock class and platform-specific implementations. + https://bugs.webkit.org/show_bug.cgi?id=71341 + + Reviewed by Sam Weinig. + + Add WTF_USE_COREAUDIO macro for use by PlatformClockCA. + + * wtf/Platform.h: + +2011-11-03 Pavel Feldman <pfeldman@chromium.org> + + Not reviewed: fixing win build. step2. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + +2011-11-03 Pavel Feldman <pfeldman@chromium.org> + + Not reviewed: fix windows build, step1 + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + +2011-11-03 Pavel Feldman <pfeldman@google.com> + + Web Inspector: preserve script location for inline handlers. + https://bugs.webkit.org/show_bug.cgi?id=71367 + + Makes SourceCode factories receive TextPosition instead of the line number; + Stores consistent position values in SourceCode and SourceProvider; + + Reviewed by Yury Semikhatsky. + + * API/JSBase.cpp: + (JSEvaluateScript): + (JSCheckScriptSyntax): + * API/JSObjectRef.cpp: + (JSObjectMakeFunction): + * parser/SourceCode.h: + (JSC::makeSource): + * parser/SourceProvider.h: + (JSC::SourceProvider::SourceProvider): + (JSC::SourceProvider::startPosition): + (JSC::UStringSourceProvider::create): + (JSC::UStringSourceProvider::UStringSourceProvider): + * runtime/FunctionConstructor.cpp: + (JSC::constructFunction): + (JSC::constructFunctionSkippingEvalEnabledCheck): + * runtime/FunctionConstructor.h: + +2011-11-03 Kentaro Hara <haraken@chromium.org> + + Fixed wrong implementation of doubleValue % 2^{64}. + https://bugs.webkit.org/show_bug.cgi?id=67980 + + Reviewed by Hajime Morita. + + fast/events/constructors/progress-event-constructor.html was failing + because of the wrong implementation of conversion from an ECMAScript value + to an IDL unsigned long long value (Spec: http://www.w3.org/TR/WebIDL/#es-unsigned-long-long). + In particular, the calculation of doubleValue % 2^{64} was wrong. + This patch implemented it correctly in doubleToInteger() in wtf/MathExtras.h. + + * wtf/MathExtras.h: + (doubleToInteger): Implemented the spec correctly. + +2011-11-03 Sheriff Bot <webkit.review.bot@gmail.com> + + Unreviewed, rolling out r99089. + http://trac.webkit.org/changeset/99089 + https://bugs.webkit.org/show_bug.cgi?id=71448 + + @plt postfix for math functions cause crash on Linux 32 (the + symbol is defined but it points to NULL) (Requested by + zherczeg on #webkit). + + * dfg/DFGOperations.cpp: + * jit/JITStubs.cpp: + * jit/ThunkGenerators.cpp: + +2011-11-02 Filip Pizlo <fpizlo@apple.com> + + DFG inlining breaks function.arguments[something] if the argument being + retrieved was subjected to DFG's unboxing optimizations + https://bugs.webkit.org/show_bug.cgi?id=71436 + + Reviewed by Oliver Hunt. + + This makes inlined arguments retrieval use some of the same machinery as + OSR to determine where from, and how, to retrieve a value that the DFG + might have somehow squirreled away while the old JIT would put it in its + obvious location, using an obvious format. + + To that end, previously DFG-internal notions such as DataFormat, + VirtualRegister, and ValueRecovery are now in bytecode/ since they are + stored as part of InlineCallFrames. + + * bytecode/CodeOrigin.h: + * dfg/DFGAbstractState.cpp: + (JSC::DFG::AbstractState::execute): + * dfg/DFGByteCodeParser.cpp: + (JSC::DFG::ByteCodeParser::handleInlining): + (JSC::DFG::ByteCodeParser::InlineStackEntry::InlineStackEntry): + * dfg/DFGJITCompiler.cpp: + (JSC::DFG::JITCompiler::exitSpeculativeWithOSR): + * dfg/DFGJITCompiler32_64.cpp: + (JSC::DFG::JITCompiler::exitSpeculativeWithOSR): + * dfg/DFGNode.h: + * dfg/DFGPropagator.cpp: + (JSC::DFG::Propagator::propagateNodePredictions): + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::compile): + * dfg/DFGSpeculativeJIT64.cpp: + (JSC::DFG::SpeculativeJIT::compile): + * interpreter/CallFrame.cpp: + (JSC::CallFrame::trueCallerFrame): + * interpreter/CallFrame.h: + (JSC::ExecState::inlineCallFrame): + * interpreter/Register.h: + (JSC::Register::asInlineCallFrame): + (JSC::Register::unboxedInt32): + (JSC::Register::unboxedBoolean): + (JSC::Register::unboxedCell): + * runtime/Arguments.h: + (JSC::Arguments::finishCreationAndCopyRegisters): + +2011-11-02 Filip Pizlo <fpizlo@apple.com> + + ValueRecovery should be moved out of the DFG JIT + https://bugs.webkit.org/show_bug.cgi?id=71439 + + Reviewed by Oliver Hunt. + + * JavaScriptCore.xcodeproj/project.pbxproj: + * bytecode/DataFormat.h: Added. + (JSC::dataFormatToString): + (JSC::needDataFormatConversion): + (JSC::isJSFormat): + (JSC::isJSInteger): + (JSC::isJSDouble): + (JSC::isJSCell): + (JSC::isJSBoolean): + * bytecode/ValueRecovery.h: Added. + (JSC::ValueRecovery::ValueRecovery): + (JSC::ValueRecovery::alreadyInRegisterFile): + (JSC::ValueRecovery::alreadyInRegisterFileAsUnboxedInt32): + (JSC::ValueRecovery::alreadyInRegisterFileAsUnboxedCell): + (JSC::ValueRecovery::alreadyInRegisterFileAsUnboxedBoolean): + (JSC::ValueRecovery::inGPR): + (JSC::ValueRecovery::inPair): + (JSC::ValueRecovery::inFPR): + (JSC::ValueRecovery::displacedInRegisterFile): + (JSC::ValueRecovery::constant): + (JSC::ValueRecovery::technique): + (JSC::ValueRecovery::isInRegisters): + (JSC::ValueRecovery::gpr): + (JSC::ValueRecovery::tagGPR): + (JSC::ValueRecovery::payloadGPR): + (JSC::ValueRecovery::fpr): + (JSC::ValueRecovery::virtualRegister): + (JSC::ValueRecovery::dump): + * bytecode/VirtualRegister.h: Added. + * dfg/DFGGenerationInfo.h: + (JSC::DFG::GenerationInfo::isJSFormat): + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::ValueSource::dump): + * dfg/DFGSpeculativeJIT.h: + * dfg/DFGVariableAccessData.h: + +2011-11-02 Sam Weinig <sam@webkit.org> + + Object.getOwnPropertyDescriptor() does not retrieve the getter/setter from a property on the window that has been overridden with a getter/setter + https://bugs.webkit.org/show_bug.cgi?id=71333 + + Reviewed by Gavin Barraclough. + + Tested by fast/dom/getter-on-window-object2.html + + * runtime/PropertyDescriptor.cpp: + (JSC::PropertyDescriptor::setDescriptor): + The attributes returned from Structure::get do not include Getter or Setter, so + instead check if the value is a GetterSetter like we do elsewhere. If it is, update + the descriptor's attributes accordingly. + +2011-11-02 Yuqiang Xian <yuqiang.xian@intel.com> + + FunctionPtr should accept FASTCALL functions on X86 + https://bugs.webkit.org/show_bug.cgi?id=71434 + + Reviewed by Filip Pizlo. + + On X86 we sometimes use FASTCALL convention functions, for example the + cti functions, and we may need the pointers to such functions, e.g., + in current DFG register file check and arity check, though long term + we may avoid such usage of cti calls in DFG. + + * assembler/MacroAssemblerCodeRef.h: + (JSC::FunctionPtr::FunctionPtr): + +2011-11-02 Filip Pizlo <fpizlo@apple.com> + + Inlined uses of the global object should use the right global object + https://bugs.webkit.org/show_bug.cgi?id=71427 + + Reviewed by Oliver Hunt. + + * dfg/DFGJITCompiler.h: + (JSC::DFG::JITCompiler::globalObjectFor): + * dfg/DFGSpeculativeJIT64.cpp: + (JSC::DFG::SpeculativeJIT::compile): + +2011-11-02 Yuqiang Xian <yuqiang.xian@intel.com> + + Remove some unnecessary loads/stores in DFG JIT 32_64 + https://bugs.webkit.org/show_bug.cgi?id=71090 + + Reviewed by Filip Pizlo. + + In fillSpeculateCell and OSR exit, some unnecessary loads/stores can + be eliminated. + + * dfg/DFGJITCompiler32_64.cpp: + (JSC::DFG::JITCompiler::exitSpeculativeWithOSR): + * dfg/DFGSpeculativeJIT32_64.cpp: + (JSC::DFG::SpeculativeJIT::fillSpeculateCell): + +2011-11-02 Adam Klein <adamk@chromium.org> + + Replace usage of StringImpl with String where possible in CharacterData and Text + https://bugs.webkit.org/show_bug.cgi?id=71383 + + Reviewed by Darin Adler. + + * wtf/text/WTFString.h: + (WTF::String::containsOnlyWhitespace): Added new method. + +2011-11-02 Mark Hahnenberg <mhahnenberg@apple.com> + + De-virtualize JSObject::getOwnPropertyNames + https://bugs.webkit.org/show_bug.cgi?id=71307 + + Reviewed by Darin Adler. + + Added getOwnPropertyNames to the MethodTable, changed all the virtual + implementations of getOwnPropertyNames to static ones, and replaced + all call sites with corresponding lookups in the MethodTable. + + * API/JSCallbackObject.h: + * API/JSCallbackObjectFunctions.h: + (JSC::::getOwnPropertyNames): + * JavaScriptCore.exp: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * debugger/DebuggerActivation.cpp: + (JSC::DebuggerActivation::getOwnPropertyNames): + * debugger/DebuggerActivation.h: + * runtime/Arguments.cpp: + (JSC::Arguments::getOwnPropertyNames): + * runtime/Arguments.h: + * runtime/ClassInfo.h: + * runtime/JSActivation.cpp: + (JSC::JSActivation::getOwnPropertyNames): + * runtime/JSActivation.h: + * runtime/JSArray.cpp: + (JSC::JSArray::getOwnPropertyNames): + * runtime/JSArray.h: + * runtime/JSByteArray.cpp: + (JSC::JSByteArray::getOwnPropertyNames): + * runtime/JSByteArray.h: + * runtime/JSCell.cpp: + (JSC::JSCell::getOwnPropertyNames): + * runtime/JSCell.h: + * runtime/JSFunction.cpp: + (JSC::JSFunction::getOwnPropertyNames): + * runtime/JSFunction.h: + * runtime/JSNotAnObject.cpp: + (JSC::JSNotAnObject::getOwnPropertyNames): + * runtime/JSNotAnObject.h: + * runtime/JSONObject.cpp: + (JSC::Stringifier::Holder::appendNextProperty): + (JSC::Walker::walk): + * runtime/JSObject.cpp: + (JSC::JSObject::getPropertyNames): + (JSC::JSObject::getOwnPropertyNames): + * runtime/JSObject.h: + * runtime/JSVariableObject.cpp: + (JSC::JSVariableObject::~JSVariableObject): + (JSC::JSVariableObject::getOwnPropertyNames): + * runtime/JSVariableObject.h: + * runtime/ObjectConstructor.cpp: + (JSC::objectConstructorGetOwnPropertyNames): + (JSC::objectConstructorKeys): + (JSC::defineProperties): + * runtime/RegExpMatchesArray.h: + (JSC::RegExpMatchesArray::getOwnPropertyNames): + * runtime/StringObject.cpp: + (JSC::StringObject::getOwnPropertyNames): + * runtime/StringObject.h: + * runtime/Structure.h: + +2011-11-02 Dean Jackson <dino@apple.com> + + Add ENABLE_CSS_SHADERS flag + https://bugs.webkit.org/show_bug.cgi?id=71394 + + Reviewed by Sam Weinig. + + * Configurations/FeatureDefines.xcconfig: + +2011-11-02 Alexey Shabalin <a.shabalin@gmail.com> + + TEXTREL in libjavascriptcoregtk-1.0.so.0.11.0 on x86 (or i586) + https://bugs.webkit.org/show_bug.cgi?id=70610 + + Reviewed by Martin Robinson. + + Properly annotate ASM on BSD and Linux x86 systems. + + * dfg/DFGOperations.cpp: Add annotation for X86. + * jit/JITStubs.cpp: Ditto. + * jit/ThunkGenerators.cpp: Ditto. + +2011-11-02 Xianzhu Wang <wangxianzhu@chromium.org> + + Missing Force8BitConstructor in 8-bit version of StringImpl::reallocate() + https://bugs.webkit.org/show_bug.cgi?id=71347 + + Reviewed by Geoffrey Garen. + + * wtf/text/StringImpl.cpp: + (WTF::StringImpl::reallocate): + +2011-11-01 Darin Adler <darin@apple.com> + + Cut down on malloc/free a bit in the parser arena + https://bugs.webkit.org/show_bug.cgi?id=71343 + + Reviewed by Oliver Hunt. + + * parser/ParserArena.cpp: + (JSC::ParserArena::deallocateObjects): Call the destructors of + the deletable objects before freeing the pools. Don't call + fastFree on the deletable objects any more. + + * parser/ParserArena.h: + (JSC::ParserArena::allocateDeletable): Use allocateFreeable + instead of fastMalloc here. + +2011-11-01 Sam Weinig <sam@webkit.org> + + Implement __lookupGetter__/__lookupSetter__ in terms of getPropertyDescriptor + https://bugs.webkit.org/show_bug.cgi?id=71336 + + Reviewed by Darin Adler. + + * debugger/DebuggerActivation.cpp: + * debugger/DebuggerActivation.h: + Remove overrides of lookupGetter/lookupSetter, which are no longer needed + due to implementing getPropertyDescriptor. + + * runtime/JSObject.cpp: + (JSC::JSObject::lookupGetter): + (JSC::JSObject::lookupSetter): + * runtime/JSObject.h: + De-virtualize lookupGetter/lookupSetter, and implement them in terms of + getPropertyDescriptor. + +2011-11-01 Mark Hahnenberg <mhahnenberg@apple.com> + + De-virtualize JSObject::defineSetter + https://bugs.webkit.org/show_bug.cgi?id=71303 + + Reviewed by Darin Adler. + + Added defineSetter to the MethodTable, changed all the virtual + implementations of defineSetter to static ones, and replaced + all call sites with corresponding lookups in the MethodTable. + + * JavaScriptCore.exp: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * debugger/DebuggerActivation.cpp: + (JSC::DebuggerActivation::defineSetter): + * debugger/DebuggerActivation.h: + * interpreter/Interpreter.cpp: + (JSC::Interpreter::privateExecute): + * jit/JITStubs.cpp: + (JSC::DEFINE_STUB_FUNCTION): + * runtime/ClassInfo.h: + * runtime/JSCell.cpp: + (JSC::JSCell::defineSetter): + * runtime/JSCell.h: + * runtime/JSGlobalObject.cpp: + (JSC::JSGlobalObject::defineSetter): + * runtime/JSGlobalObject.h: + * runtime/JSObject.cpp: + (JSC::JSObject::defineSetter): + (JSC::putDescriptor): + * runtime/JSObject.h: + * runtime/ObjectPrototype.cpp: + (JSC::objectProtoFuncDefineSetter): + +2011-11-01 Filip Pizlo <fpizlo@apple.com> + + DFG inlining breaks function.arguments + https://bugs.webkit.org/show_bug.cgi?id=71329 + + Reviewed by Oliver Hunt. + + The DFG was forgetting to store code origin mappings for inlined + call sites. Some of the fast-path optimizations for + CallFrame::trueCallerFrame() were wrong. An assertion in Arguments + was wrong. + + I also took the opportunity to decrease code duplication between + DFG64 and DFG32_64, because I didn't feel like writing the same + code twice. + + * bytecode/CodeBlock.h: + (JSC::ExecState::isInlineCallFrame): + * dfg/DFGJITCompiler.cpp: + (JSC::DFG::JITCompiler::compileEntry): + (JSC::DFG::JITCompiler::compileBody): + (JSC::DFG::JITCompiler::link): + (JSC::DFG::JITCompiler::compile): + (JSC::DFG::JITCompiler::compileFunction): + * dfg/DFGJITCompiler32_64.cpp: + * dfg/DFGNode.h: + * interpreter/CallFrame.cpp: + (JSC::CallFrame::trueCallerFrame): + * interpreter/CallFrame.h: + * runtime/Arguments.h: + (JSC::Arguments::getArgumentsData): + +2011-11-01 Xianzhu Wang <wangxianzhu@chromium.org> + + StringImpl::reallocate() should have a 8-bit version + https://bugs.webkit.org/show_bug.cgi?id=71210 + + Reviewed by Geoffrey Garen. + + * wtf/text/StringImpl.cpp: + (WTF::StringImpl::reallocate): + * wtf/text/StringImpl.h: + +2011-10-31 Filip Pizlo <fpizlo@apple.com> + + The GC should be parallel + https://bugs.webkit.org/show_bug.cgi?id=70995 + + Reviewed by Geoff Garen. + + Added parallel tracing to the GC. This works by having local mark + stacks per thread, and a global shared one. Threads sometimes + donate cells from the mark stack to the global one if the heuristics + tell them that it's affordable to do so. Threads that have depleted + their local mark stacks try to steal some from the shared one. + + Marking is now done using an atomic weak relaxed CAS (compare-and-swap). + + This is a 23% speed-up on V8-splay when I use 4 marking threads, + leading to a 3.5% speed-up on V8. + + It also appears that this reduces GC pause times on real websites by + more than half. + + * JavaScriptCore.exp: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * heap/Heap.cpp: + (JSC::Heap::Heap): + (JSC::Heap::~Heap): + (JSC::Heap::markRoots): + * heap/Heap.h: + * heap/MarkStack.cpp: + (JSC::MarkStackSegmentAllocator::MarkStackSegmentAllocator): + (JSC::MarkStackSegmentAllocator::~MarkStackSegmentAllocator): + (JSC::MarkStackSegmentAllocator::allocate): + (JSC::MarkStackSegmentAllocator::release): + (JSC::MarkStackSegmentAllocator::shrinkReserve): + (JSC::MarkStackArray::MarkStackArray): + (JSC::MarkStackArray::~MarkStackArray): + (JSC::MarkStackArray::expand): + (JSC::MarkStackArray::refill): + (JSC::MarkStackArray::donateSomeCellsTo): + (JSC::MarkStackArray::stealSomeCellsFrom): + (JSC::MarkStackThreadSharedData::markingThreadMain): + (JSC::MarkStackThreadSharedData::markingThreadStartFunc): + (JSC::MarkStackThreadSharedData::MarkStackThreadSharedData): + (JSC::MarkStackThreadSharedData::~MarkStackThreadSharedData): + (JSC::MarkStackThreadSharedData::reset): + (JSC::MarkStack::reset): + (JSC::SlotVisitor::donateSlow): + (JSC::SlotVisitor::drain): + (JSC::SlotVisitor::drainFromShared): + (JSC::MarkStack::mergeOpaqueRoots): + (JSC::SlotVisitor::harvestWeakReferences): + * heap/MarkStack.h: + (JSC::MarkStackSegment::data): + (JSC::MarkStackSegment::capacityFromSize): + (JSC::MarkStackSegment::sizeFromCapacity): + (JSC::MarkStackArray::postIncTop): + (JSC::MarkStackArray::preDecTop): + (JSC::MarkStackArray::setTopForFullSegment): + (JSC::MarkStackArray::setTopForEmptySegment): + (JSC::MarkStackArray::top): + (JSC::MarkStackArray::validatePrevious): + (JSC::MarkStack::addWeakReferenceHarvester): + (JSC::MarkStack::mergeOpaqueRootsIfNecessary): + (JSC::MarkStack::mergeOpaqueRootsIfProfitable): + (JSC::MarkStack::MarkStack): + (JSC::MarkStack::addOpaqueRoot): + (JSC::MarkStack::containsOpaqueRoot): + (JSC::MarkStack::opaqueRootCount): + (JSC::MarkStackArray::append): + (JSC::MarkStackArray::canRemoveLast): + (JSC::MarkStackArray::removeLast): + (JSC::MarkStackArray::isEmpty): + (JSC::MarkStackArray::canDonateSomeCells): + (JSC::MarkStackArray::size): + (JSC::ParallelModeEnabler::ParallelModeEnabler): + (JSC::ParallelModeEnabler::~ParallelModeEnabler): + * heap/MarkedBlock.h: + (JSC::MarkedBlock::testAndSetMarked): + * heap/SlotVisitor.h: + (JSC::SlotVisitor::donate): + (JSC::SlotVisitor::donateAndDrain): + (JSC::SlotVisitor::donateKnownParallel): + (JSC::SlotVisitor::SlotVisitor): + * heap/WeakReferenceHarvester.h: + * runtime/Heuristics.cpp: + (JSC::Heuristics::initializeHeuristics): + * runtime/Heuristics.h: + * wtf/Atomics.h: + (WTF::weakCompareAndSwap): + * wtf/Bitmap.h: + (WTF::::Bitmap): + (WTF::::get): + (WTF::::set): + (WTF::::testAndSet): + (WTF::::testAndClear): + (WTF::::concurrentTestAndSet): + (WTF::::concurrentTestAndClear): + (WTF::::clear): + (WTF::::clearAll): + (WTF::::nextPossiblyUnset): + (WTF::::findRunOfZeros): + (WTF::::count): + (WTF::::isEmpty): + (WTF::::isFull): + * wtf/MainThread.h: + (WTF::isMainThreadOrGCThread): + * wtf/Platform.h: + * wtf/ThreadSpecific.h: + (WTF::::isSet): + * wtf/mac/MainThreadMac.mm: + (WTF::initializeGCThreads): + (WTF::initializeMainThreadPlatform): + (WTF::initializeMainThreadToProcessMainThreadPlatform): + (WTF::registerGCThread): + (WTF::isMainThreadOrGCThread): + +2011-10-31 Mark Hahnenberg <mhahnenberg@apple.com> + + De-virtualize JSObject::defaultValue + https://bugs.webkit.org/show_bug.cgi?id=71146 + + Reviewed by Sam Weinig. + + Added defaultValue to the MethodTable. Replaced all virtual versions of + defaultValue with static versions. Replaced all call sites with lookups in the + MethodTable. + + * JavaScriptCore.exp: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * runtime/ClassInfo.h: + * runtime/ExceptionHelpers.cpp: + (JSC::InterruptedExecutionError::defaultValue): + (JSC::TerminatedExecutionError::defaultValue): + * runtime/ExceptionHelpers.h: + * runtime/JSCell.cpp: + (JSC::JSCell::defaultValue): + * runtime/JSCell.h: + * runtime/JSNotAnObject.cpp: + (JSC::JSNotAnObject::defaultValue): + * runtime/JSNotAnObject.h: + * runtime/JSObject.cpp: + (JSC::JSObject::getPrimitiveNumber): + (JSC::JSObject::defaultValue): + * runtime/JSObject.h: + (JSC::JSObject::toPrimitive): + +2011-10-31 Mark Hahnenberg <mhahnenberg@apple.com> + + Interpreter build fix + + Unreviewed build fix + + * interpreter/Interpreter.cpp: + (JSC::Interpreter::privateExecute): + * runtime/Executable.cpp: + (JSC::FunctionExecutable::compileForCallInternal): + (JSC::FunctionExecutable::compileForConstructInternal): + +2011-10-31 Filip Pizlo <fpizlo@apple.com> + + DFG OSR exits should add to value profiles + https://bugs.webkit.org/show_bug.cgi?id=71202 + + Reviewed by Oliver Hunt. + + Value profiles now have an extra special slot not used by the old JIT's + profiling, which is reserved for OSR exits. + + The DFG's OSR exit code now knows which register, node index, and value + profiling site was responsible for the (possibly flawed) information that + led to the OSR failure. This is somewhat opportunistic and imperfect; + if there's a lot of control flow between the value profiling site and the + OSR failure point, then this mechanism simply gives up. It also gives up + if the OSR failure is caused by either known deficiencies in the DFG + (like that we always assume that the index in a strict charCodeAt access + is within bounds) or where the OSR failure would be catalogues and + profiled through other means (like slow case counters). + + This patch also adds the notion of a JSValueRegs, which is either a + single register in JSVALUE64 or a pair in JSVALUE32_64. We should + probably move the 32_64 DFG towards using this, since it often makes it + easier to share code between 64 and 32_64. + + Also fixed a number of pathologies that this uncovered. op_method_check + didn't have a value profiling site on the slow path. GetById should not + always force OSR exit if it never executed in the old JIT; we may be + able to infer its type if it's a array or string length get. Finally, + these changes benefit from a slight tweak to optimization delay + heuristics (profile fullness is now 0.35 instead of 0.25). + + 3.8% speed-up on Kraken, mostly due to ~35% on both stanford-crypto-aes + and imaging-darkroom. + + * bytecode/ValueProfile.cpp: + (JSC::ValueProfile::computeStatistics): + (JSC::ValueProfile::computeUpdatedPrediction): + * bytecode/ValueProfile.h: + (JSC::ValueProfile::ValueProfile): + (JSC::ValueProfile::specFailBucket): + (JSC::ValueProfile::numberOfSamples): + (JSC::ValueProfile::isLive): + (JSC::ValueProfile::numberOfInt32s): + (JSC::ValueProfile::numberOfDoubles): + (JSC::ValueProfile::numberOfCells): + (JSC::ValueProfile::numberOfObjects): + (JSC::ValueProfile::numberOfFinalObjects): + (JSC::ValueProfile::numberOfStrings): + (JSC::ValueProfile::numberOfArrays): + (JSC::ValueProfile::numberOfBooleans): + (JSC::ValueProfile::dump): + * dfg/DFGAbstractState.cpp: + (JSC::DFG::AbstractState::execute): + * dfg/DFGByteCodeParser.cpp: + (JSC::DFG::ByteCodeParser::getPredictionWithoutOSRExit): + (JSC::DFG::ByteCodeParser::getPrediction): + (JSC::DFG::ByteCodeParser::parseBlock): + * dfg/DFGGPRInfo.h: + (JSC::DFG::JSValueRegs::JSValueRegs): + (JSC::DFG::JSValueRegs::operator!): + (JSC::DFG::JSValueRegs::gpr): + (JSC::DFG::JSValueSource::JSValueSource): + (JSC::DFG::JSValueSource::unboxedCell): + (JSC::DFG::JSValueSource::operator!): + (JSC::DFG::JSValueSource::isAddress): + (JSC::DFG::JSValueSource::offset): + (JSC::DFG::JSValueSource::base): + (JSC::DFG::JSValueSource::gpr): + (JSC::DFG::JSValueSource::asAddress): + (JSC::DFG::JSValueSource::notAddress): + (JSC::DFG::JSValueRegs::tagGPR): + (JSC::DFG::JSValueRegs::payloadGPR): + (JSC::DFG::JSValueSource::tagGPR): + (JSC::DFG::JSValueSource::payloadGPR): + (JSC::DFG::JSValueSource::hasKnownTag): + (JSC::DFG::JSValueSource::tag): + * dfg/DFGGenerationInfo.h: + (JSC::DFG::GenerationInfo::jsValueRegs): + * dfg/DFGGraph.h: + (JSC::DFG::Graph::valueProfileFor): + * dfg/DFGJITCodeGenerator.h: + (JSC::JSValueOperand::jsValueRegs): + * dfg/DFGJITCompiler.cpp: + (JSC::DFG::JITCompiler::exitSpeculativeWithOSR): + * dfg/DFGJITCompiler.h: + (JSC::DFG::JITCompiler::valueProfileFor): + * dfg/DFGJITCompiler32_64.cpp: + (JSC::DFG::JITCompiler::exitSpeculativeWithOSR): + * dfg/DFGPropagator.cpp: + (JSC::DFG::Propagator::propagateNodePredictions): + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::OSRExit::OSRExit): + (JSC::DFG::SpeculativeJIT::compilePeepHoleObjectEquality): + (JSC::DFG::SpeculativeJIT::checkArgumentTypes): + (JSC::DFG::SpeculativeJIT::compileGetCharCodeAt): + (JSC::DFG::SpeculativeJIT::compileGetByValOnString): + (JSC::DFG::SpeculativeJIT::compilePutByValForByteArray): + (JSC::DFG::SpeculativeJIT::compileGetByValOnByteArray): + * dfg/DFGSpeculativeJIT.h: + (JSC::DFG::SpeculativeJIT::speculationCheck): + (JSC::DFG::SpeculativeJIT::terminateSpeculativeExecution): + * dfg/DFGSpeculativeJIT32_64.cpp: + (JSC::DFG::SpeculativeJIT::fillSpeculateIntInternal): + (JSC::DFG::SpeculativeJIT::fillSpeculateDouble): + (JSC::DFG::SpeculativeJIT::fillSpeculateCell): + (JSC::DFG::SpeculativeJIT::fillSpeculateBoolean): + (JSC::DFG::SpeculativeJIT::compileObjectEquality): + (JSC::DFG::SpeculativeJIT::compileObjectOrOtherLogicalNot): + (JSC::DFG::SpeculativeJIT::compileLogicalNot): + (JSC::DFG::SpeculativeJIT::emitObjectOrOtherBranch): + (JSC::DFG::SpeculativeJIT::compile): + * dfg/DFGSpeculativeJIT64.cpp: + (JSC::DFG::SpeculativeJIT::fillSpeculateIntInternal): + (JSC::DFG::SpeculativeJIT::fillSpeculateDouble): + (JSC::DFG::SpeculativeJIT::fillSpeculateCell): + (JSC::DFG::SpeculativeJIT::fillSpeculateBoolean): + (JSC::DFG::SpeculativeJIT::compileObjectEquality): + (JSC::DFG::SpeculativeJIT::compileObjectOrOtherLogicalNot): + (JSC::DFG::SpeculativeJIT::compileLogicalNot): + (JSC::DFG::SpeculativeJIT::emitObjectOrOtherBranch): + (JSC::DFG::SpeculativeJIT::emitBranch): + (JSC::DFG::SpeculativeJIT::compile): + * jit/JITPropertyAccess.cpp: + (JSC::JIT::emitSlow_op_method_check): + * jit/JITPropertyAccess32_64.cpp: + (JSC::JIT::emitSlow_op_method_check): + * runtime/Heuristics.cpp: + (JSC::Heuristics::initializeHeuristics): + * runtime/JSValue.h: + +2011-10-31 Sam Weinig <sam@webkit.org> + + Remove need for virtual JSObject::unwrappedObject + https://bugs.webkit.org/show_bug.cgi?id=71034 + + Reviewed by Geoffrey Garen. + + * JavaScriptCore.exp: + Update exports. + + * CMakeLists.txt: + * GNUmakefile.list.am: + * JavaScriptCore.exp: + * JavaScriptCore.gypi: + * JavaScriptCore.pro: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + Add JSGlobalThis.cpp. + + * runtime/JSGlobalThis.cpp: Added. + (JSC::JSGlobalThis::visitChildren): + (JSC::JSGlobalThis::unwrappedObject): + * runtime/JSGlobalThis.h: + (JSC::JSGlobalThis::createStructure): + Move underlying object from JSDOMWindowShell down to JSGlobalThis + and corresponding visitChildren method. + + * runtime/JSObject.cpp: + (JSC::JSObject::unwrappedObject): + Change unwrappedObject from virtual, to just needing an if check. + + * runtime/JSObject.h: + (JSC::JSObject::isGlobalThis): + * runtime/JSType.h: + Add isGlobalThis predicate and type. + +2011-10-31 Xianzhu Wang <wangxianzhu@chromium.org> + + WTF::StringImpl::create(const char*, unsigned) calls itself + https://bugs.webkit.org/show_bug.cgi?id=71206 + + The original implementation just calls itself, causing infinite recursion. + Cast the first parameter to const LChar* to fix that. + + Reviewed by Ryosuke Niwa. + + * wtf/text/StringImpl.h: + (WTF::StringImpl::create): + +2011-10-31 Andy Wingo <wingo@igalia.com> + + Fix DFG JIT compilation on Linux targets. + https://bugs.webkit.org/show_bug.cgi?id=70904 + + Reviewed by Darin Adler. + + * jit/JITStubs.cpp (SYMBOL_STRING_RELOCATION): Simplify this + macro. + + * dfg/DFGOperations.cpp (SYMBOL_STRING_RELOCATION): Copy the + simplified definition from jit/JITStubs.cpp. + (FUNCTION_WRAPPER_WITH_RETURN_ADDRESS, getHostCallReturnValue): + Use the macro to access trampoline targets through the PLT on PIC + systems, instead of introducing a text relocation. Otherwise, the + library fails to link. + +2011-10-31 Mark Hahnenberg <mhahnenberg@apple.com> + + De-virtualize JSObject::defineGetter + https://bugs.webkit.org/show_bug.cgi?id=71134 + + Reviewed by Darin Adler. + + Added defineGetter to the MethodTable. Replaced all virtual versions of defineGetter + with static versions. Replaced all call sites with lookups in the MethodTable. + + * JavaScriptCore.exp: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * debugger/DebuggerActivation.cpp: + (JSC::DebuggerActivation::defineGetter): + * debugger/DebuggerActivation.h: + * interpreter/Interpreter.cpp: + (JSC::Interpreter::privateExecute): + * jit/JITStubs.cpp: + (JSC::DEFINE_STUB_FUNCTION): + * runtime/ClassInfo.h: + * runtime/JSCell.cpp: + (JSC::JSCell::defineGetter): + * runtime/JSCell.h: + * runtime/JSGlobalObject.cpp: + (JSC::JSGlobalObject::defineGetter): + * runtime/JSGlobalObject.h: + * runtime/JSObject.cpp: + (JSC::JSObject::defineGetter): + (JSC::putDescriptor): + * runtime/JSObject.h: + * runtime/ObjectPrototype.cpp: + (JSC::objectProtoFuncDefineGetter): + +2011-10-31 Michael Saboff <msaboff@apple.com> + + Towards 8-bit Strings: Move Lexer and Parser Objects out of JSGlobalData + https://bugs.webkit.org/show_bug.cgi?id=71138 + + Restructure and movement of Lexer and Parser code. + Moved Lexer and Parser objects out of JSGlobalData. + Added a new ParserTokens class and instance to JSGlobalData that + have JavaScript token related definitions. + Replaced JSGlobalData arguments to Node classes with lineNumber, + as that was the only use of the JSGlobalData. + Combined JSParser and Parser classes into one class, + eliminating JSParser.h and .cpp. + Various supporting #include changes. + + These mostly mechanical changes are done in preparation to + making the Lexer and Parser template classes. + + Reviewed by Darin Adler. + + * CMakeLists.txt: + * GNUmakefile.list.am: + * JavaScriptCore.gypi: + * JavaScriptCore.pro: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * bytecompiler/NodesCodegen.cpp: + (JSC::ArrayNode::toArgumentList): + (JSC::ApplyFunctionCallDotNode::emitBytecode): + * parser/ASTBuilder.h: + (JSC::ASTBuilder::ASTBuilder): + (JSC::ASTBuilder::createSourceElements): + (JSC::ASTBuilder::createCommaExpr): + (JSC::ASTBuilder::createLogicalNot): + (JSC::ASTBuilder::createUnaryPlus): + (JSC::ASTBuilder::createVoid): + (JSC::ASTBuilder::thisExpr): + (JSC::ASTBuilder::createResolve): + (JSC::ASTBuilder::createObjectLiteral): + (JSC::ASTBuilder::createArray): + (JSC::ASTBuilder::createNumberExpr): + (JSC::ASTBuilder::createString): + (JSC::ASTBuilder::createBoolean): + (JSC::ASTBuilder::createNull): + (JSC::ASTBuilder::createBracketAccess): + (JSC::ASTBuilder::createDotAccess): + (JSC::ASTBuilder::createRegExp): + (JSC::ASTBuilder::createNewExpr): + (JSC::ASTBuilder::createConditionalExpr): + (JSC::ASTBuilder::createAssignResolve): + (JSC::ASTBuilder::createFunctionExpr): + (JSC::ASTBuilder::createFunctionBody): + (JSC::ASTBuilder::createGetterOrSetterProperty): + (JSC::ASTBuilder::createArguments): + (JSC::ASTBuilder::createArgumentsList): + (JSC::ASTBuilder::createPropertyList): + (JSC::ASTBuilder::createElementList): + (JSC::ASTBuilder::createFormalParameterList): + (JSC::ASTBuilder::createClause): + (JSC::ASTBuilder::createClauseList): + (JSC::ASTBuilder::createFuncDeclStatement): + (JSC::ASTBuilder::createBlockStatement): + (JSC::ASTBuilder::createExprStatement): + (JSC::ASTBuilder::createIfStatement): + (JSC::ASTBuilder::createForLoop): + (JSC::ASTBuilder::createForInLoop): + (JSC::ASTBuilder::createEmptyStatement): + (JSC::ASTBuilder::createVarStatement): + (JSC::ASTBuilder::createReturnStatement): + (JSC::ASTBuilder::createBreakStatement): + (JSC::ASTBuilder::createContinueStatement): + (JSC::ASTBuilder::createTryStatement): + (JSC::ASTBuilder::createSwitchStatement): + (JSC::ASTBuilder::createWhileStatement): + (JSC::ASTBuilder::createDoWhileStatement): + (JSC::ASTBuilder::createLabelStatement): + (JSC::ASTBuilder::createWithStatement): + (JSC::ASTBuilder::createThrowStatement): + (JSC::ASTBuilder::createDebugger): + (JSC::ASTBuilder::createConstStatement): + (JSC::ASTBuilder::appendConstDecl): + (JSC::ASTBuilder::combineCommaNodes): + (JSC::ASTBuilder::appendBinaryOperation): + (JSC::ASTBuilder::createAssignment): + (JSC::ASTBuilder::createNumber): + (JSC::ASTBuilder::makeTypeOfNode): + (JSC::ASTBuilder::makeDeleteNode): + (JSC::ASTBuilder::makeNegateNode): + (JSC::ASTBuilder::makeBitwiseNotNode): + (JSC::ASTBuilder::makeMultNode): + (JSC::ASTBuilder::makeDivNode): + (JSC::ASTBuilder::makeModNode): + (JSC::ASTBuilder::makeAddNode): + (JSC::ASTBuilder::makeSubNode): + (JSC::ASTBuilder::makeLeftShiftNode): + (JSC::ASTBuilder::makeRightShiftNode): + (JSC::ASTBuilder::makeURightShiftNode): + (JSC::ASTBuilder::makeBitOrNode): + (JSC::ASTBuilder::makeBitAndNode): + (JSC::ASTBuilder::makeBitXOrNode): + (JSC::ASTBuilder::makeFunctionCallNode): + (JSC::ASTBuilder::makeBinaryNode): + (JSC::ASTBuilder::makeAssignNode): + (JSC::ASTBuilder::makePrefixNode): + (JSC::ASTBuilder::makePostfixNode): + * parser/JSParser.cpp: Removed. + * parser/JSParser.h: Removed. + * parser/Lexer.cpp: + (JSC::Keywords::Keywords): + (JSC::Lexer::Lexer): + (JSC::Lexer::~Lexer): + (JSC::Lexer::setCode): + (JSC::Lexer::parseIdentifier): + * parser/Lexer.h: + (JSC::Keywords::isKeyword): + (JSC::Keywords::getKeyword): + (JSC::Keywords::~Keywords): + (JSC::Lexer::setIsReparsing): + (JSC::Lexer::isReparsing): + (JSC::Lexer::lineNumber): + (JSC::Lexer::setLastLineNumber): + (JSC::Lexer::lastLineNumber): + (JSC::Lexer::prevTerminator): + (JSC::Lexer::sawError): + (JSC::Lexer::getErrorMessage): + (JSC::Lexer::currentOffset): + (JSC::Lexer::setOffset): + (JSC::Lexer::setLineNumber): + (JSC::Lexer::sourceProvider): + (JSC::Lexer::isWhiteSpace): + (JSC::Lexer::isLineTerminator): + (JSC::Lexer::convertHex): + (JSC::Lexer::convertUnicode): + (JSC::Lexer::makeIdentifier): + (JSC::Lexer::lexExpectIdentifier): + * parser/NodeConstructors.h: + (JSC::ParserArenaFreeable::operator new): + (JSC::ParserArenaDeletable::operator new): + (JSC::ParserArenaRefCounted::ParserArenaRefCounted): + (JSC::Node::Node): + (JSC::ExpressionNode::ExpressionNode): + (JSC::StatementNode::StatementNode): + (JSC::NullNode::NullNode): + (JSC::BooleanNode::BooleanNode): + (JSC::NumberNode::NumberNode): + (JSC::StringNode::StringNode): + (JSC::RegExpNode::RegExpNode): + (JSC::ThisNode::ThisNode): + (JSC::ResolveNode::ResolveNode): + (JSC::ElementNode::ElementNode): + (JSC::ArrayNode::ArrayNode): + (JSC::PropertyNode::PropertyNode): + (JSC::PropertyListNode::PropertyListNode): + (JSC::ObjectLiteralNode::ObjectLiteralNode): + (JSC::BracketAccessorNode::BracketAccessorNode): + (JSC::DotAccessorNode::DotAccessorNode): + (JSC::ArgumentListNode::ArgumentListNode): + (JSC::ArgumentsNode::ArgumentsNode): + (JSC::NewExprNode::NewExprNode): + (JSC::EvalFunctionCallNode::EvalFunctionCallNode): + (JSC::FunctionCallValueNode::FunctionCallValueNode): + (JSC::FunctionCallResolveNode::FunctionCallResolveNode): + (JSC::FunctionCallBracketNode::FunctionCallBracketNode): + (JSC::FunctionCallDotNode::FunctionCallDotNode): + (JSC::CallFunctionCallDotNode::CallFunctionCallDotNode): + (JSC::ApplyFunctionCallDotNode::ApplyFunctionCallDotNode): + (JSC::PrePostResolveNode::PrePostResolveNode): + (JSC::PostfixResolveNode::PostfixResolveNode): + (JSC::PostfixBracketNode::PostfixBracketNode): + (JSC::PostfixDotNode::PostfixDotNode): + (JSC::PostfixErrorNode::PostfixErrorNode): + (JSC::DeleteResolveNode::DeleteResolveNode): + (JSC::DeleteBracketNode::DeleteBracketNode): + (JSC::DeleteDotNode::DeleteDotNode): + (JSC::DeleteValueNode::DeleteValueNode): + (JSC::VoidNode::VoidNode): + (JSC::TypeOfResolveNode::TypeOfResolveNode): + (JSC::TypeOfValueNode::TypeOfValueNode): + (JSC::PrefixResolveNode::PrefixResolveNode): + (JSC::PrefixBracketNode::PrefixBracketNode): + (JSC::PrefixDotNode::PrefixDotNode): + (JSC::PrefixErrorNode::PrefixErrorNode): + (JSC::UnaryOpNode::UnaryOpNode): + (JSC::UnaryPlusNode::UnaryPlusNode): + (JSC::NegateNode::NegateNode): + (JSC::BitwiseNotNode::BitwiseNotNode): + (JSC::LogicalNotNode::LogicalNotNode): + (JSC::BinaryOpNode::BinaryOpNode): + (JSC::MultNode::MultNode): + (JSC::DivNode::DivNode): + (JSC::ModNode::ModNode): + (JSC::AddNode::AddNode): + (JSC::SubNode::SubNode): + (JSC::LeftShiftNode::LeftShiftNode): + (JSC::RightShiftNode::RightShiftNode): + (JSC::UnsignedRightShiftNode::UnsignedRightShiftNode): + (JSC::LessNode::LessNode): + (JSC::GreaterNode::GreaterNode): + (JSC::LessEqNode::LessEqNode): + (JSC::GreaterEqNode::GreaterEqNode): + (JSC::ThrowableBinaryOpNode::ThrowableBinaryOpNode): + (JSC::InstanceOfNode::InstanceOfNode): + (JSC::InNode::InNode): + (JSC::EqualNode::EqualNode): + (JSC::NotEqualNode::NotEqualNode): + (JSC::StrictEqualNode::StrictEqualNode): + (JSC::NotStrictEqualNode::NotStrictEqualNode): + (JSC::BitAndNode::BitAndNode): + (JSC::BitOrNode::BitOrNode): + (JSC::BitXOrNode::BitXOrNode): + (JSC::LogicalOpNode::LogicalOpNode): + (JSC::ConditionalNode::ConditionalNode): + (JSC::ReadModifyResolveNode::ReadModifyResolveNode): + (JSC::AssignResolveNode::AssignResolveNode): + (JSC::ReadModifyBracketNode::ReadModifyBracketNode): + (JSC::AssignBracketNode::AssignBracketNode): + (JSC::AssignDotNode::AssignDotNode): + (JSC::ReadModifyDotNode::ReadModifyDotNode): + (JSC::AssignErrorNode::AssignErrorNode): + (JSC::CommaNode::CommaNode): + (JSC::ConstStatementNode::ConstStatementNode): + (JSC::SourceElements::SourceElements): + (JSC::EmptyStatementNode::EmptyStatementNode): + (JSC::DebuggerStatementNode::DebuggerStatementNode): + (JSC::ExprStatementNode::ExprStatementNode): + (JSC::VarStatementNode::VarStatementNode): + (JSC::IfNode::IfNode): + (JSC::IfElseNode::IfElseNode): + (JSC::DoWhileNode::DoWhileNode): + (JSC::WhileNode::WhileNode): + (JSC::ForNode::ForNode): + (JSC::ContinueNode::ContinueNode): + (JSC::BreakNode::BreakNode): + (JSC::ReturnNode::ReturnNode): + (JSC::WithNode::WithNode): + (JSC::LabelNode::LabelNode): + (JSC::ThrowNode::ThrowNode): + (JSC::TryNode::TryNode): + (JSC::ParameterNode::ParameterNode): + (JSC::FuncExprNode::FuncExprNode): + (JSC::FuncDeclNode::FuncDeclNode): + (JSC::CaseClauseNode::CaseClauseNode): + (JSC::ClauseListNode::ClauseListNode): + (JSC::CaseBlockNode::CaseBlockNode): + (JSC::SwitchNode::SwitchNode): + (JSC::ConstDeclNode::ConstDeclNode): + (JSC::BlockNode::BlockNode): + (JSC::ForInNode::ForInNode): + * parser/NodeInfo.h: + * parser/Nodes.cpp: + (JSC::StatementNode::setLoc): + (JSC::ScopeNode::ScopeNode): + (JSC::ProgramNode::ProgramNode): + (JSC::ProgramNode::create): + (JSC::EvalNode::EvalNode): + (JSC::EvalNode::create): + (JSC::FunctionBodyNode::FunctionBodyNode): + (JSC::FunctionBodyNode::create): + * parser/Nodes.h: + (JSC::Node::lineNo): + * parser/Parser.cpp: + (JSC::Parser::Parser): + (JSC::Parser::~Parser): + (JSC::Parser::parseInner): + (JSC::Parser::allowAutomaticSemicolon): + (JSC::Parser::parseSourceElements): + (JSC::Parser::parseVarDeclaration): + (JSC::Parser::parseConstDeclaration): + (JSC::Parser::parseDoWhileStatement): + (JSC::Parser::parseWhileStatement): + (JSC::Parser::parseVarDeclarationList): + (JSC::Parser::parseConstDeclarationList): + (JSC::Parser::parseForStatement): + (JSC::Parser::parseBreakStatement): + (JSC::Parser::parseContinueStatement): + (JSC::Parser::parseReturnStatement): + (JSC::Parser::parseThrowStatement): + (JSC::Parser::parseWithStatement): + (JSC::Parser::parseSwitchStatement): + (JSC::Parser::parseSwitchClauses): + (JSC::Parser::parseSwitchDefaultClause): + (JSC::Parser::parseTryStatement): + (JSC::Parser::parseDebuggerStatement): + (JSC::Parser::parseBlockStatement): + (JSC::Parser::parseStatement): + (JSC::Parser::parseFormalParameters): + (JSC::Parser::parseFunctionBody): + (JSC::Parser::parseFunctionInfo): + (JSC::Parser::parseFunctionDeclaration): + (JSC::LabelInfo::LabelInfo): + (JSC::Parser::parseExpressionOrLabelStatement): + (JSC::Parser::parseExpressionStatement): + (JSC::Parser::parseIfStatement): + (JSC::Parser::parseExpression): + (JSC::Parser::parseAssignmentExpression): + (JSC::Parser::parseConditionalExpression): + (JSC::isUnaryOp): + (JSC::Parser::isBinaryOperator): + (JSC::Parser::parseBinaryExpression): + (JSC::Parser::parseProperty): + (JSC::Parser::parseObjectLiteral): + (JSC::Parser::parseStrictObjectLiteral): + (JSC::Parser::parseArrayLiteral): + (JSC::Parser::parsePrimaryExpression): + (JSC::Parser::parseArguments): + (JSC::Parser::parseMemberExpression): + (JSC::Parser::parseUnaryExpression): + * parser/Parser.h: + (JSC::isEvalNode): + (JSC::EvalNode): + (JSC::DepthManager::DepthManager): + (JSC::DepthManager::~DepthManager): + (JSC::ScopeLabelInfo::ScopeLabelInfo): + (JSC::Scope::Scope): + (JSC::Scope::startSwitch): + (JSC::Scope::endSwitch): + (JSC::Scope::startLoop): + (JSC::Scope::endLoop): + (JSC::Scope::inLoop): + (JSC::Scope::breakIsValid): + (JSC::Scope::continueIsValid): + (JSC::Scope::pushLabel): + (JSC::Scope::popLabel): + (JSC::Scope::getLabel): + (JSC::Scope::setIsFunction): + (JSC::Scope::isFunction): + (JSC::Scope::isFunctionBoundary): + (JSC::Scope::declareVariable): + (JSC::Scope::declareWrite): + (JSC::Scope::preventNewDecls): + (JSC::Scope::allowsNewDecls): + (JSC::Scope::declareParameter): + (JSC::Scope::useVariable): + (JSC::Scope::setNeedsFullActivation): + (JSC::Scope::collectFreeVariables): + (JSC::Scope::getUncapturedWrittenVariables): + (JSC::Scope::getCapturedVariables): + (JSC::Scope::setStrictMode): + (JSC::Scope::strictMode): + (JSC::Scope::isValidStrictMode): + (JSC::Scope::shadowsArguments): + (JSC::Scope::copyCapturedVariablesToVector): + (JSC::Scope::saveFunctionInfo): + (JSC::Scope::restoreFunctionInfo): + (JSC::ScopeRef::ScopeRef): + (JSC::ScopeRef::operator->): + (JSC::ScopeRef::index): + (JSC::ScopeRef::hasContainingScope): + (JSC::ScopeRef::containingScope): + (JSC::Parser::AllowInOverride::AllowInOverride): + (JSC::Parser::AllowInOverride::~AllowInOverride): + (JSC::Parser::AutoPopScopeRef::AutoPopScopeRef): + (JSC::Parser::AutoPopScopeRef::~AutoPopScopeRef): + (JSC::Parser::AutoPopScopeRef::setPopped): + (JSC::Parser::currentScope): + (JSC::Parser::pushScope): + (JSC::Parser::popScopeInternal): + (JSC::Parser::popScope): + (JSC::Parser::declareVariable): + (JSC::Parser::declareWrite): + (JSC::Parser::findCachedFunctionInfo): + (JSC::Parser::isFunctionBodyNode): + (JSC::Parser::next): + (JSC::Parser::nextExpectIdentifier): + (JSC::Parser::nextTokenIsColon): + (JSC::Parser::consume): + (JSC::Parser::getToken): + (JSC::Parser::match): + (JSC::Parser::tokenStart): + (JSC::Parser::tokenLine): + (JSC::Parser::tokenEnd): + (JSC::Parser::getTokenName): + (JSC::Parser::updateErrorMessageSpecialCase): + (JSC::Parser::updateErrorMessage): + (JSC::Parser::updateErrorWithNameAndMessage): + (JSC::Parser::startLoop): + (JSC::Parser::endLoop): + (JSC::Parser::startSwitch): + (JSC::Parser::endSwitch): + (JSC::Parser::setStrictMode): + (JSC::Parser::strictMode): + (JSC::Parser::isValidStrictMode): + (JSC::Parser::declareParameter): + (JSC::Parser::breakIsValid): + (JSC::Parser::continueIsValid): + (JSC::Parser::pushLabel): + (JSC::Parser::popLabel): + (JSC::Parser::getLabel): + (JSC::Parser::autoSemiColon): + (JSC::Parser::canRecurse): + (JSC::Parser::lastTokenEnd): + (JSC::Parser::DepthManager::DepthManager): + (JSC::Parser::DepthManager::~DepthManager): + (JSC::Parser::parse): + (JSC::parse): + * parser/ParserTokens.h: Added. + (JSC::JSTokenInfo::JSTokenInfo): + * parser/SourceCode.h: + (JSC::SourceCode::subExpression): + * parser/SourceProviderCacheItem.h: + * parser/SyntaxChecker.h: + (JSC::SyntaxChecker::SyntaxChecker): + (JSC::SyntaxChecker::makeFunctionCallNode): + (JSC::SyntaxChecker::createCommaExpr): + (JSC::SyntaxChecker::makeAssignNode): + (JSC::SyntaxChecker::makePrefixNode): + (JSC::SyntaxChecker::makePostfixNode): + (JSC::SyntaxChecker::makeTypeOfNode): + (JSC::SyntaxChecker::makeDeleteNode): + (JSC::SyntaxChecker::makeNegateNode): + (JSC::SyntaxChecker::makeBitwiseNotNode): + (JSC::SyntaxChecker::createLogicalNot): + (JSC::SyntaxChecker::createUnaryPlus): + (JSC::SyntaxChecker::createVoid): + (JSC::SyntaxChecker::thisExpr): + (JSC::SyntaxChecker::createResolve): + (JSC::SyntaxChecker::createObjectLiteral): + (JSC::SyntaxChecker::createArray): + (JSC::SyntaxChecker::createNumberExpr): + (JSC::SyntaxChecker::createString): + (JSC::SyntaxChecker::createBoolean): + (JSC::SyntaxChecker::createNull): + (JSC::SyntaxChecker::createBracketAccess): + (JSC::SyntaxChecker::createDotAccess): + (JSC::SyntaxChecker::createRegExp): + (JSC::SyntaxChecker::createNewExpr): + (JSC::SyntaxChecker::createConditionalExpr): + (JSC::SyntaxChecker::createAssignResolve): + (JSC::SyntaxChecker::createFunctionExpr): + (JSC::SyntaxChecker::createFunctionBody): + (JSC::SyntaxChecker::createArguments): + (JSC::SyntaxChecker::createArgumentsList): + (JSC::SyntaxChecker::createProperty): + (JSC::SyntaxChecker::createPropertyList): + (JSC::SyntaxChecker::createFuncDeclStatement): + (JSC::SyntaxChecker::createBlockStatement): + (JSC::SyntaxChecker::createExprStatement): + (JSC::SyntaxChecker::createIfStatement): + (JSC::SyntaxChecker::createForLoop): + (JSC::SyntaxChecker::createForInLoop): + (JSC::SyntaxChecker::createEmptyStatement): + (JSC::SyntaxChecker::createVarStatement): + (JSC::SyntaxChecker::createReturnStatement): + (JSC::SyntaxChecker::createBreakStatement): + (JSC::SyntaxChecker::createContinueStatement): + (JSC::SyntaxChecker::createTryStatement): + (JSC::SyntaxChecker::createSwitchStatement): + (JSC::SyntaxChecker::createWhileStatement): + (JSC::SyntaxChecker::createWithStatement): + (JSC::SyntaxChecker::createDoWhileStatement): + (JSC::SyntaxChecker::createLabelStatement): + (JSC::SyntaxChecker::createThrowStatement): + (JSC::SyntaxChecker::createDebugger): + (JSC::SyntaxChecker::createConstStatement): + (JSC::SyntaxChecker::appendConstDecl): + (JSC::SyntaxChecker::createGetterOrSetterProperty): + (JSC::SyntaxChecker::combineCommaNodes): + (JSC::SyntaxChecker::operatorStackPop): + * runtime/Executable.cpp: + (JSC::EvalExecutable::compileInternal): + (JSC::ProgramExecutable::checkSyntax): + (JSC::ProgramExecutable::compileInternal): + (JSC::FunctionExecutable::produceCodeBlockFor): + (JSC::FunctionExecutable::fromGlobalCode): + * runtime/JSGlobalData.cpp: + (JSC::JSGlobalData::JSGlobalData): + (JSC::JSGlobalData::~JSGlobalData): + * runtime/JSGlobalData.h: + * runtime/LiteralParser.cpp: + (JSC::LiteralParser::tryJSONPParse): + +2011-10-31 Filip Pizlo <fpizlo@apple.com> + + REGRESSION (r97118): Reproducible crash in JSCell::toPrimitive when adding + https://bugs.webkit.org/show_bug.cgi?id=71227 + + Reviewed by Oliver Hunt. + + No new tests, since while I can see exactly where the DFG went wrong on the + site in question from looking at the generated machine code, and while I can + certainly believe that such a scenario would happen, I cannot visualize how + to make it happen reproducibly. It requires an odd combination of double + values getting spilled and then refilled, but then reboxed at just the right + time so that the spilled value is an unboxed double while the in-register + value is a boxed double. + + * dfg/DFGJITCodeGenerator.h: + (JSC::DFG::JITCodeGenerator::silentFillGPR): + +2011-10-30 Filip Pizlo <fpizlo@apple.com> + + JSParser::parsePrimaryExpression should have an overflow check + https://bugs.webkit.org/show_bug.cgi?id=71197 + + Reviewed by Geoff Garen. + + * parser/JSParser.cpp: + (JSC::JSParser::parsePrimaryExpression): + +2011-10-30 Filip Pizlo <fpizlo@apple.com> + + DFG ValueAdd(string, int) should not fail speculation + https://bugs.webkit.org/show_bug.cgi?id=71195 + + Reviewed by Geoff Garen. + + 1% speed-up on V8. + + * dfg/DFGNode.h: + (JSC::DFG::Node::shouldNotSpeculateInteger): + (JSC::DFG::Node::shouldSpeculateInteger): + +2011-10-30 Filip Pizlo <fpizlo@apple.com> + + The DFG inliner should not flush the callee + https://bugs.webkit.org/show_bug.cgi?id=71191 + + Reviewed by Oliver Hunt. + + 0.6% speed-up on V8. + + * bytecode/CodeBlock.cpp: + (JSC::CodeBlock::visitAggregate): + * bytecode/CodeOrigin.h: + * dfg/DFGByteCodeParser.cpp: + (JSC::DFG::ByteCodeParser::flush): + (JSC::DFG::ByteCodeParser::handleInlining): + (JSC::DFG::ByteCodeParser::parseBlock): + (JSC::DFG::ByteCodeParser::InlineStackEntry::InlineStackEntry): + (JSC::DFG::ByteCodeParser::parse): + * dfg/DFGJITCompiler.cpp: + (JSC::DFG::JITCompiler::exitSpeculativeWithOSR): + * dfg/DFGJITCompiler32_64.cpp: + (JSC::DFG::JITCompiler::exitSpeculativeWithOSR): + * interpreter/CallFrame.cpp: + (JSC::CallFrame::trueCallerFrameSlow): + +2011-10-28 Mark Hahnenberg <mhahnenberg@apple.com> + + De-virtualize isGlobalObject, isVariableObject, isActivationObject, and isErrorInstance in JSObject + https://bugs.webkit.org/show_bug.cgi?id=70968 + + Reviewed by Geoffrey Garen. + + * API/JSCallbackObject.cpp: Added two specializations for createStructure that use different JSTypes in their + TypeInfo. Had to also create a specialization for JSNonFinalObject, even JSGlobalObject was the only that + needed it because Windows wouldn't build without it. + (JSC::::createStructure): + * API/JSCallbackObject.h: + * JavaScriptCore.exp: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * runtime/ErrorInstance.h: Removed virtual function and changed JSType provided to TypeInfo in createStructure. + (JSC::ErrorInstance::createStructure): + * runtime/ErrorPrototype.h: Ditto + (JSC::ErrorPrototype::createStructure): + * runtime/JSActivation.h: Ditto + (JSC::JSActivation::createStructure): + * runtime/JSGlobalObject.h: Ditto + (JSC::JSGlobalObject::createStructure): + * runtime/JSObject.h: De-virtualized functions. They now check the JSType of the object for the corresponding type. + (JSC::JSObject::isGlobalObject): + (JSC::JSObject::isVariableObject): + (JSC::JSObject::isActivationObject): + (JSC::JSObject::isErrorInstance): + * runtime/JSType.h: Added new types for GlobalObject, VariableObject, ActivationObject, and ErrorInstance. + * runtime/JSVariableObject.cpp: Removed virtual function. + * runtime/JSVariableObject.h: Changed JSType provided to TypeInfo in createStructure. + (JSC::JSVariableObject::createStructure): + +2011-10-28 Pavel Feldman <pfeldman@google.com> + + Reset line numbers for scripts generated with document.write. + https://bugs.webkit.org/show_bug.cgi?id=71099 + + Reviewed by Yury Semikhatsky. + + * wtf/text/TextPosition.h: + (WTF::OrdinalNumber::OrdinalNumber): + +2011-10-27 Daniel Bates <dbates@rim.com> + + CMake: Add support to optionally install the built JavaScript shell + https://bugs.webkit.org/show_bug.cgi?id=71062 + + Reviewed by Antonio Gomes. + + Generate an installation rule for installing the JavaScript shell in + /bin (with respect to the prefix path) when SHOULD_INSTALL_JS_SHELL + is defined. + + * shell/CMakeLists.txt: + +2011-10-27 Kentaro Hara <haraken@chromium.org> + + Generate WebKitCSSMatrix constructor for JSC by [Constructor] IDL + https://bugs.webkit.org/show_bug.cgi?id=70215 + + Reviewed by Adam Barth. + + Added a method that judges if a given JSValue is empty. + + Tests: transforms/svg-vs-css.xhtml + transforms/cssmatrix-2d-interface.xhtml + transforms/cssmatrix-3d-interface.xhtml + + * runtime/JSValue.h: + * runtime/JSValueInlineMethods.h: + (JSC::JSValue::isEmpty): + +2011-10-27 Michael Saboff <msaboff@apple.com> + + ENH: Add 8 bit string support to JSC JIT + https://bugs.webkit.org/show_bug.cgi?id=71073 + + Changed the JIT String character access generation to create code + to check the character size and load8() or load16() as approriate. + + Reviewed by Gavin Barraclough. + + * assembler/MacroAssemblerX86Common.h: + (JSC::MacroAssemblerX86Common::load8): + * assembler/X86Assembler.h: + (JSC::X86Assembler::movzbl_mr): + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::compileGetCharCodeAt): + (JSC::DFG::SpeculativeJIT::compileGetByValOnString): + * jit/JITInlineMethods.h: + (JSC::JIT::emitLoadCharacterString): + * jit/JITPropertyAccess.cpp: + (JSC::JIT::stringGetByValStubGenerator): + * jit/JITPropertyAccess32_64.cpp: + (JSC::JIT::stringGetByValStubGenerator): + * jit/JSInterfaceJIT.h: + (JSC::ThunkHelpers::stringImplFlagsOffset): + (JSC::ThunkHelpers::stringImpl8BitFlag): + * jit/ThunkGenerators.cpp: + (JSC::stringCharLoad): + +2011-10-27 Filip Pizlo <fpizlo@apple.com> + + If the bytecode generator emits code after the return in the first basic block, + DFG's inliner crashes + https://bugs.webkit.org/show_bug.cgi?id=71071 + + Reviewed by Gavin Barraclough. + + Removed some cruft dealing with parsing failures due to unsupported functionality + (that's never reached anymore due to it being caught in DFGCapabilities). This + allowed me to repurpose the bool return from parseBlock() to mean: true if we + should continue to parse, or false if we've already parsed all live code. + + * dfg/DFGByteCodeParser.cpp: + (JSC::DFG::ByteCodeParser::ByteCodeParser): + (JSC::DFG::ByteCodeParser::parseBlock): + (JSC::DFG::ByteCodeParser::parseCodeBlock): + +2011-10-27 Joseph Pecoraro <pecoraro@apple.com> + + Reviewed by David Kilzer. + + Make FeatureDefines Identical Across OS X Projects + https://bugs.webkit.org/show_bug.cgi?id=71051 + + * Configurations/FeatureDefines.xcconfig: + +2011-10-27 Filip Pizlo <fpizlo@apple.com> + + Crash in JSC::Structure::materializePropertyMap when viewing Garden-O-Matic + https://bugs.webkit.org/show_bug.cgi?id=71045 + + Reviewed by Geoff Garen. + + Make sure that if a structure is pinned, it also has a property map. + + * runtime/Structure.cpp: + (JSC::Structure::changePrototypeTransition): + (JSC::Structure::despecifyFunctionTransition): + (JSC::Structure::getterSetterTransition): + (JSC::Structure::toDictionaryTransition): + (JSC::Structure::preventExtensionsTransition): + (JSC::Structure::addPropertyWithoutTransition): + (JSC::Structure::removePropertyWithoutTransition): + (JSC::Structure::pin): + (JSC::Structure::copyPropertyTableForPinning): + * runtime/Structure.h: + (JSC::Structure::materializePropertyMapIfNecessaryForPinning): + +2011-10-27 Michael Saboff <msaboff@apple.com> + + 32bit build failure after r98624 + https://bugs.webkit.org/show_bug.cgi?id=71064 + + Disambiguated operator overload with unsigned index (0u). + + Reviewed by Sam Weinig. + + * runtime/UString.h: + (JSC::operator==): + +2011-10-27 Gustavo Noronha Silva <gns@gnome.org> + + Fix building on GNU/kFreeBSD + https://bugs.webkit.org/show_bug.cgi?id=71005 + + Reviewed by Darin Adler. + + * config.h: + * wtf/Platform.h: + +2011-10-27 Michael Saboff <msaboff@apple.com> + + Investigate storing strings in 8-bit buffers when possible + https://bugs.webkit.org/show_bug.cgi?id=66161 + + Investigate storing strings in 8-bit buffers when possible + https://bugs.webkit.org/show_bug.cgi?id=66161 + + Added support for 8 bit string data in StringImpl. Changed + (UChar*) m_data to m_data16. Added char* m_data8 as a union + with m_data16. Added UChar* m_copyData16 to the other union + to store a 16 bit copy of an 8 bit string when needed. + Added characters8() and characters16() accessor methods + that assume the caller has checked the underlying string type + via the new is8Bit() method. The characters() method will + return a UChar* of the string, materializing a 16 bit copy if the + string is an 8 bit string. Added two flags, one for 8 bit buffer + and a second for a 16 bit copy for an 8 bit string. + + Fixed method name typo (StringHasher::defaultCoverter()). + + Over time the goal is to eliminate calls to characters() and + us the character8() and characters16() accessors. + + This patch does not include changes that actually create 8 bit + strings. This is the first of at least 8 patches. Subsequent + patches will be submitted for JIT changes, making the JSC lexer, + parser and literal parser, JavaScript string changes and + then changes in webcore to take advantage of the 8 bit strings. + + This change is performance neutral for SunSpider and V8 when + run from the command line with "jsc". + + Reviewed by Geoffrey Garen. + + * JavaScriptCore.exp: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def + * interpreter/Interpreter.cpp: + (JSC::Interpreter::callEval): + * parser/SourceProvider.h: + (JSC::UStringSourceProvider::data): + (JSC::UStringSourceProvider::UStringSourceProvider): + * runtime/Identifier.cpp: + (JSC::IdentifierCStringTranslator::hash): + (JSC::IdentifierCStringTranslator::equal): + (JSC::IdentifierCStringTranslator::translate): + (JSC::Identifier::add): + (JSC::Identifier::toUInt32): + * runtime/Identifier.h: + (JSC::Identifier::equal): + (JSC::operator==): + (JSC::operator!=): + * runtime/JSString.cpp: + (JSC::JSString::resolveRope): + (JSC::JSString::resolveRopeSlowCase): + * runtime/RegExp.cpp: + (JSC::RegExp::match): + * runtime/StringPrototype.cpp: + (JSC::jsSpliceSubstringsWithSeparators): + * runtime/UString.cpp: + (JSC::UString::UString): + (JSC::equalSlowCase): + (JSC::UString::utf8): + * runtime/UString.h: + (JSC::UString::characters): + (JSC::UString::characters8): + (JSC::UString::characters16): + (JSC::UString::is8Bit): + (JSC::UString::operator[]): + (JSC::UString::find): + (JSC::operator==): + * wtf/StringHasher.h: + (WTF::StringHasher::computeHash): + (WTF::StringHasher::defaultConverter): + * wtf/text/AtomicString.cpp: + (WTF::CStringTranslator::hash): + (WTF::CStringTranslator::equal): + (WTF::CStringTranslator::translate): + (WTF::AtomicString::add): + * wtf/text/AtomicString.h: + (WTF::AtomicString::AtomicString): + (WTF::AtomicString::contains): + (WTF::AtomicString::find): + (WTF::AtomicString::add): + (WTF::operator==): + (WTF::operator!=): + (WTF::equalIgnoringCase): + * wtf/text/StringConcatenate.h: + * wtf/text/StringHash.h: + (WTF::StringHash::equal): + (WTF::CaseFoldingHash::hash): + * wtf/text/StringImpl.cpp: + (WTF::StringImpl::~StringImpl): + (WTF::StringImpl::createUninitialized): + (WTF::StringImpl::create): + (WTF::StringImpl::getData16SlowCase): + (WTF::StringImpl::containsOnlyWhitespace): + (WTF::StringImpl::substring): + (WTF::StringImpl::characterStartingAt): + (WTF::StringImpl::lower): + (WTF::StringImpl::upper): + (WTF::StringImpl::fill): + (WTF::StringImpl::foldCase): + (WTF::StringImpl::stripMatchedCharacters): + (WTF::StringImpl::removeCharacters): + (WTF::StringImpl::simplifyMatchedCharactersToSpace): + (WTF::StringImpl::toIntStrict): + (WTF::StringImpl::toUIntStrict): + (WTF::StringImpl::toInt64Strict): + (WTF::StringImpl::toUInt64Strict): + (WTF::StringImpl::toIntPtrStrict): + (WTF::StringImpl::toInt): + (WTF::StringImpl::toUInt): + (WTF::StringImpl::toInt64): + (WTF::StringImpl::toUInt64): + (WTF::StringImpl::toIntPtr): + (WTF::StringImpl::toDouble): + (WTF::StringImpl::toFloat): + (WTF::equal): + (WTF::equalIgnoringCase): + (WTF::StringImpl::find): + (WTF::StringImpl::findIgnoringCase): + (WTF::StringImpl::reverseFind): + (WTF::StringImpl::replace): + (WTF::StringImpl::defaultWritingDirection): + (WTF::StringImpl::adopt): + (WTF::StringImpl::createWithTerminatingNullCharacter): + * wtf/text/StringImpl.h: + (WTF::StringImpl::StringImpl): + (WTF::StringImpl::create): + (WTF::StringImpl::create8): + (WTF::StringImpl::tryCreateUninitialized): + (WTF::StringImpl::flagsOffset): + (WTF::StringImpl::flagIs8Bit): + (WTF::StringImpl::dataOffset): + (WTF::StringImpl::is8Bit): + (WTF::StringImpl::characters8): + (WTF::StringImpl::characters16): + (WTF::StringImpl::characters): + (WTF::StringImpl::has16BitShadow): + (WTF::StringImpl::setHash): + (WTF::StringImpl::hash): + (WTF::StringImpl::copyChars): + (WTF::StringImpl::operator[]): + (WTF::StringImpl::find): + (WTF::StringImpl::findIgnoringCase): + (WTF::equal): + (WTF::equalIgnoringCase): + (WTF::StringImpl::isolatedCopy): + * wtf/text/WTFString.cpp: + (WTF::String::String): + (WTF::String::append): + (WTF::String::format): + (WTF::String::fromUTF8): + (WTF::String::fromUTF8WithLatin1Fallback): + * wtf/text/WTFString.h: + (WTF::String::find): + (WTF::String::findIgnoringCase): + (WTF::String::contains): + (WTF::String::append): + (WTF::String::fromUTF8): + (WTF::String::fromUTF8WithLatin1Fallback): + (WTF::operator==): + (WTF::operator!=): + (WTF::equalIgnoringCase): + * wtf/unicode/Unicode.h: + * yarr/YarrJIT.cpp: + (JSC::Yarr::execute): + * yarr/YarrJIT.h: + (JSC::Yarr::YarrCodeBlock::execute): + * yarr/YarrParser.h: + (JSC::Yarr::Parser::Parser): + +2011-10-27 Mark Hahnenberg <mhahnenberg@apple.com> + + Fixing windows build + + Unreviewed build fix + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + +2011-10-27 Mark Hahnenberg <mhahnenberg@apple.com> + + Add ability to check for presence of static members at compile time + https://bugs.webkit.org/show_bug.cgi?id=70986 + + Reviewed by Geoffrey Garen. + + Added new CREATE_MEMBER_CHECKER macro to instantiate the template and the + HAS_MEMBER_NAMED macro to use that template to check if the specified class + does indeed have a method with that name. This mechanism is not currently + used anywhere, but will be in the future when adding virtual methods from + JSObject to the MethodTable. + + * runtime/ClassInfo.h: + +2011-10-27 Mark Hahnenberg <mhahnenberg@apple.com> + + De-virtualize JSCell::toThisObject + https://bugs.webkit.org/show_bug.cgi?id=70958 + + Reviewed by Geoffrey Garen. + + Converted all instances of toThisObject to static functions, + added toThisObject to the MethodTable, and replaced all call sites + with a corresponding lookup in the MethodTable. + + * API/JSContextRef.cpp: + * JavaScriptCore.exp: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * runtime/ClassInfo.h: + * runtime/JSActivation.cpp: + (JSC::JSActivation::toThisObject): + * runtime/JSActivation.h: + * runtime/JSCell.cpp: + (JSC::JSCell::toThisObject): + * runtime/JSCell.h: + * runtime/JSObject.cpp: + (JSC::JSObject::put): + (JSC::JSObject::toThisObject): + * runtime/JSObject.h: + (JSC::JSValue::toThisObject): + * runtime/JSStaticScopeObject.cpp: + (JSC::JSStaticScopeObject::toThisObject): + * runtime/JSStaticScopeObject.h: + * runtime/JSString.cpp: + (JSC::JSString::toThisObject): + * runtime/JSString.h: + * runtime/StrictEvalActivation.cpp: + (JSC::StrictEvalActivation::toThisObject): + * runtime/StrictEvalActivation.h: + +2011-10-27 Yuqiang Xian <yuqiang.xian@intel.com> + + Fix a small bug in callOperation after r98431 + https://bugs.webkit.org/show_bug.cgi?id=70984 + + Reviewed by Geoffrey Garen. + + TrustedImmPtr is not expecting "int" type parameters. + + * dfg/DFGJITCodeGenerator.h: + (JSC::DFG::callOperation): + +2011-10-26 Oliver Hunt <oliver@apple.com> + + Restore structure-clearing behaviour of allocateCell<> + https://bugs.webkit.org/show_bug.cgi?id=70976 + + Reviewed by Geoffrey Garen. + + This restores the logic that allows the markstack to filter + live objects that have not yet been initialised. + + * runtime/JSCell.h: + (JSC::JSCell::clearStructure): + Validation-safe method to clear a cell's structure. + (JSC::allocateCell): + Call the above method. + * runtime/Structure.h: + (JSC::MarkStack::internalAppend): + Don't visit cells that haven't been initialised. + +2011-10-26 Filip Pizlo <fpizlo@apple.com> + + REGRESSION (r97030): Cannot log in to progressive.com + https://bugs.webkit.org/show_bug.cgi?id=70094 + + Reviewed by Oliver Hunt. + + * dfg/DFGByteCodeParser.cpp: + (JSC::DFG::ByteCodeParser::handleCall): + +2011-10-26 Mark Hahnenberg <mhahnenberg@apple.com> + + Remove getOwnPropertySlotVirtual + https://bugs.webkit.org/show_bug.cgi?id=70741 + + Reviewed by Geoffrey Garen. + + Removed all declarations and definitions of getOwnPropertySlotVirtual. + Also replaced all call sites to getOwnPropertyVirtualVirtual with a + corresponding lookup in the MethodTable. + + * API/JSCallbackObject.h: + * API/JSCallbackObjectFunctions.h: + (JSC::::getOwnPropertyDescriptor): + * JavaScriptCore.exp: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * debugger/DebuggerActivation.cpp: + (JSC::DebuggerActivation::getOwnPropertySlot): + * debugger/DebuggerActivation.h: + * runtime/Arguments.cpp: + * runtime/Arguments.h: + * runtime/ArrayConstructor.cpp: + * runtime/ArrayConstructor.h: + * runtime/ArrayPrototype.cpp: + * runtime/ArrayPrototype.h: + * runtime/BooleanPrototype.cpp: + * runtime/BooleanPrototype.h: + * runtime/DateConstructor.cpp: + * runtime/DateConstructor.h: + * runtime/DatePrototype.cpp: + * runtime/DatePrototype.h: + (JSC::DatePrototype::create): + * runtime/ErrorPrototype.cpp: + * runtime/ErrorPrototype.h: + * runtime/JSActivation.cpp: + * runtime/JSActivation.h: + * runtime/JSArray.cpp: + (JSC::JSArray::getOwnPropertySlotByIndex): + * runtime/JSArray.h: + * runtime/JSByteArray.cpp: + * runtime/JSByteArray.h: + * runtime/JSCell.cpp: + * runtime/JSCell.h: + * runtime/JSFunction.cpp: + (JSC::JSFunction::getOwnPropertyDescriptor): + (JSC::JSFunction::getOwnPropertyNames): + (JSC::JSFunction::put): + * runtime/JSFunction.h: + * runtime/JSGlobalObject.cpp: + * runtime/JSGlobalObject.h: + * runtime/JSNotAnObject.cpp: + * runtime/JSNotAnObject.h: + * runtime/JSONObject.cpp: + (JSC::Stringifier::Holder::appendNextProperty): + (JSC::Walker::walk): + * runtime/JSONObject.h: + * runtime/JSObject.cpp: + (JSC::JSObject::getOwnPropertySlotByIndex): + (JSC::JSObject::hasOwnProperty): + * runtime/JSObject.h: + (JSC::JSCell::fastGetOwnPropertySlot): + (JSC::JSObject::getPropertySlot): + (JSC::JSValue::get): + * runtime/JSStaticScopeObject.cpp: + * runtime/JSStaticScopeObject.h: + * runtime/JSString.cpp: + (JSC::JSString::getOwnPropertySlot): + * runtime/JSString.h: + * runtime/MathObject.cpp: + * runtime/MathObject.h: + (JSC::MathObject::create): + * runtime/NumberConstructor.cpp: + * runtime/NumberConstructor.h: + * runtime/NumberPrototype.cpp: + * runtime/NumberPrototype.h: + * runtime/ObjectConstructor.cpp: + * runtime/ObjectConstructor.h: + * runtime/ObjectPrototype.cpp: + * runtime/ObjectPrototype.h: + * runtime/RegExpConstructor.cpp: + * runtime/RegExpConstructor.h: + * runtime/RegExpMatchesArray.h: + (JSC::RegExpMatchesArray::createStructure): + * runtime/RegExpObject.cpp: + * runtime/RegExpObject.h: + * runtime/RegExpPrototype.cpp: + * runtime/RegExpPrototype.h: + * runtime/StringConstructor.cpp: + * runtime/StringConstructor.h: + * runtime/StringObject.cpp: + * runtime/StringObject.h: + * runtime/StringPrototype.cpp: + * runtime/StringPrototype.h: + +2011-10-26 Alejandro G. Castro <alex@igalia.com> + + [GTK] [WK2] Add WebKit2 distcheck support + https://bugs.webkit.org/show_bug.cgi?id=70933 + + Reviewed by Martin Robinson. + + * GNUmakefile.list.am: Add MemoryStatistics.h to the sources list. + +2011-10-26 Michael Saboff <msaboff@apple.com> + + Increase StringImpl Flag Bits for 8 bit Strings + https://bugs.webkit.org/show_bug.cgi?id=70937 + + Increased the number of bits used for flags in StringImpl + from 6 to 8 bits. This frees up 2 flag bits that will be + used for 8-bit string support. Updated hash methods accordingly. + Changed hash value masking from the low bits to the high + bits. + + Reviewed by Darin Adler. + + * create_hash_table: + * wtf/StringHasher.h: + (WTF::StringHasher::hash): + * wtf/text/StringImpl.h: + +2011-10-26 Dan Bernstein <mitz@apple.com> + + Build fix. + + Reverted r98488, which caused the scripts’ status messages to be included in the generated + files. + + * create_hash_table: + * create_jit_stubs: + +2011-10-26 Tor Arne Vestbø <tor.arne.vestbo@nokia.com> + + Don't print regular output to STDERR when generating hashtables and JIT stubs + + Reviewed by Simon Hausmann. + + * create_hash_table: + * create_jit_stubs: + +2011-10-25 Gavin Barraclough <barraclough@apple.com> + + Split DFGJITCodeGenerator::callOperation methods + https://bugs.webkit.org/show_bug.cgi?id=70870 + + Reviewed by Filip Pizlo. + + The DFGJITCodeGenerator currently contains two sets of callOperation methods. + One set works with the JSVALUE64 value representation and passes arguments in + registers (suitable for use on x86-64), and one set works with the JSVALUE32_64 + value representation and passes arguments in memory (suitable for use on x86). + By refactoring out the representation and calling convention specific aspects + of the code we can also configure the DFG JIT to operator on platforms that use + the JSVALUE32_64 value representation but pass arguments in registers. + + On platforms supported by the JIT, the payload precedes the tag of a value in + argument/result ordering, as such, in order to make the setupResults method + generally applicable to return the results of a function that are returned in + two registers, the ordering of arguments to this function has been reversed - + as is the ordering of augments passed to setupArguments methods, with respect + to the ordering with which they are passed in to callOperation. + This inconsistency will be resolved in a later change when we combine the pairs + of arguments passed into callOperation, such that the function signatures can + be made consistent across the two value representations (the callOperation + methods will be passed a reference to a struct representing the JSValue + temporary, this will consist of two gprs on 32_64 and one on 64). + + * dfg/DFGJITCodeGenerator.h: + (JSC::DFG::resetCallArguments): + (JSC::DFG::addCallArgument): + - moved, removed tag,payload version of this method. + (JSC::DFG::setupArguments): + (JSC::DFG::setupArgumentsExecState): + (JSC::DFG::setupArgumentsWithExecState): + - Calling convention specific portion of callOperation refactored out into these methods. + (JSC::DFG::callOperation): + - updated these methods to use setupArguments* methods. + (JSC::DFG::setupResults): + - setupResults is now passed payload,tag. + (JSC::DFG::appendCallWithExceptionCheckSetResult): + - Added fpr versions of this function. + (JSC::DFG::appendCallSetResult): + - Added versions of this function without exception check. + * dfg/DFGJITCodeGenerator32_64.cpp: + (JSC::DFG::JITCodeGenerator::emitCall): + - setupResults is now passed payload,tag. + +2011-10-25 Mark Hahnenberg <mhahnenberg@apple.com> + + Remove deletePropertyVirtual + https://bugs.webkit.org/show_bug.cgi?id=70738 + + Reviewed by Geoffrey Garen. + + Removed all declarations and definitions of deletePropertyVirtual. + Also replaced all call sites to deletePropertyVirtual with a + corresponding lookup in the MethodTable. + + * API/JSCallbackObject.h: + * API/JSCallbackObjectFunctions.h: + (JSC::::deletePropertyByIndex): + * API/JSObjectRef.cpp: + (JSObjectDeleteProperty): + * JavaScriptCore.exp: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * debugger/DebuggerActivation.cpp: + (JSC::DebuggerActivation::deleteProperty): + * debugger/DebuggerActivation.h: + * interpreter/Interpreter.cpp: + (JSC::Interpreter::privateExecute): + * jit/JITStubs.cpp: + (JSC::DEFINE_STUB_FUNCTION): + * runtime/Arguments.cpp: + * runtime/Arguments.h: + * runtime/ArrayPrototype.cpp: + (JSC::arrayProtoFuncPop): + (JSC::arrayProtoFuncReverse): + (JSC::arrayProtoFuncShift): + (JSC::arrayProtoFuncSplice): + (JSC::arrayProtoFuncUnShift): + * runtime/JSActivation.cpp: + * runtime/JSActivation.h: + * runtime/JSArray.cpp: + (JSC::JSArray::deleteProperty): + (JSC::JSArray::deletePropertyByIndex): + * runtime/JSArray.h: + * runtime/JSCell.cpp: + (JSC::JSCell::deleteProperty): + (JSC::JSCell::deletePropertyByIndex): + * runtime/JSCell.h: + * runtime/JSFunction.cpp: + * runtime/JSFunction.h: + * runtime/JSNotAnObject.cpp: + * runtime/JSNotAnObject.h: + * runtime/JSONObject.cpp: + (JSC::Walker::walk): + * runtime/JSObject.cpp: + (JSC::JSObject::deletePropertyByIndex): + (JSC::JSObject::defineOwnProperty): + * runtime/JSObject.h: + * runtime/JSVariableObject.cpp: + * runtime/JSVariableObject.h: + * runtime/RegExpMatchesArray.h: + * runtime/StrictEvalActivation.cpp: + * runtime/StrictEvalActivation.h: + * runtime/StringObject.cpp: + * runtime/StringObject.h: + +2011-10-25 Mark Hahnenberg <mhahnenberg@apple.com> + + Remove putVirtual + https://bugs.webkit.org/show_bug.cgi?id=70740 + + Reviewed by Geoffrey Garen. + + Removed all declarations and definitions of putVirtual. + Also replaced all call sites to putVirtual with a + corresponding lookup in the MethodTable. + + * API/JSCallbackObject.h: + * API/JSCallbackObjectFunctions.h: + * API/JSObjectRef.cpp: + (JSObjectSetProperty): + (JSObjectSetPropertyAtIndex): + * JavaScriptCore.exp: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * debugger/DebuggerActivation.cpp: + (JSC::DebuggerActivation::put): + * debugger/DebuggerActivation.h: + * dfg/DFGOperations.cpp: + * interpreter/Interpreter.cpp: + (JSC::Interpreter::execute): + (JSC::Interpreter::privateExecute): + * jsc.cpp: + (GlobalObject::finishCreation): + * runtime/Arguments.cpp: + * runtime/Arguments.h: + * runtime/ArrayPrototype.cpp: + (JSC::putProperty): + (JSC::arrayProtoFuncConcat): + (JSC::arrayProtoFuncPush): + (JSC::arrayProtoFuncReverse): + (JSC::arrayProtoFuncShift): + (JSC::arrayProtoFuncSlice): + (JSC::arrayProtoFuncSort): + (JSC::arrayProtoFuncSplice): + (JSC::arrayProtoFuncUnShift): + (JSC::arrayProtoFuncFilter): + (JSC::arrayProtoFuncMap): + * runtime/JSActivation.cpp: + * runtime/JSActivation.h: + * runtime/JSArray.cpp: + (JSC::JSArray::putSlowCase): + (JSC::JSArray::push): + (JSC::JSArray::shiftCount): + (JSC::JSArray::unshiftCount): + * runtime/JSArray.h: + * runtime/JSByteArray.cpp: + * runtime/JSByteArray.h: + * runtime/JSCell.cpp: + (JSC::JSCell::put): + (JSC::JSCell::putByIndex): + * runtime/JSCell.h: + * runtime/JSFunction.cpp: + * runtime/JSFunction.h: + * runtime/JSGlobalObject.cpp: + * runtime/JSGlobalObject.h: + * runtime/JSNotAnObject.cpp: + * runtime/JSNotAnObject.h: + * runtime/JSONObject.cpp: + (JSC::Walker::walk): + * runtime/JSObject.cpp: + (JSC::JSObject::putByIndex): + (JSC::JSObject::defineOwnProperty): + * runtime/JSObject.h: + (JSC::JSValue::put): + * runtime/JSStaticScopeObject.cpp: + * runtime/JSStaticScopeObject.h: + * runtime/ObjectPrototype.cpp: + * runtime/ObjectPrototype.h: + * runtime/RegExpConstructor.cpp: + * runtime/RegExpConstructor.h: + * runtime/RegExpMatchesArray.h: + * runtime/RegExpObject.cpp: + * runtime/RegExpObject.h: + * runtime/StringObject.cpp: + * runtime/StringObject.h: + * runtime/StringPrototype.cpp: + (JSC::stringProtoFuncSplit): + +2011-10-25 Gavin Barraclough <barraclough@apple.com> + + Separate out function linking & exception check data structures. + https://bugs.webkit.org/show_bug.cgi?id=70858 + + Reviewed by Oliver Hunt. + + This will make it easier to refactor the callOperation methods to spilt the value + representation specific handling from the cpu/calling-convention implementation. + + * dfg/DFGJITCodeGenerator.h: + (JSC::DFG::appendCallWithExceptionCheck): + * dfg/DFGJITCodeGenerator32_64.cpp: + (JSC::DFG::JITCodeGenerator::emitCall): + * dfg/DFGJITCodeGenerator64.cpp: + (JSC::DFG::JITCodeGenerator::emitCall): + * dfg/DFGJITCompiler.cpp: + (JSC::DFG::JITCompiler::compileBody): + (JSC::DFG::JITCompiler::link): + * dfg/DFGJITCompiler.h: + (JSC::DFG::CallLinkRecord::CallLinkRecord): + (JSC::DFG::CallExceptionRecord::CallExceptionRecord): + (JSC::DFG::JITCompiler::JITCompiler): + (JSC::DFG::JITCompiler::notifyCall): + (JSC::DFG::JITCompiler::appendCall): + (JSC::DFG::JITCompiler::addExceptionCheck): + (JSC::DFG::JITCompiler::addFastExceptionCheck): + * dfg/DFGJITCompiler32_64.cpp: + (JSC::DFG::JITCompiler::compileBody): + (JSC::DFG::JITCompiler::link): + +2011-10-25 Filip Pizlo <fpizlo@apple.com> + + Tiered compilation may introduce dangling pointers in constant buffers + https://bugs.webkit.org/show_bug.cgi?id=70854 + + Reviewed by Oliver Hunt. + + Tiered compilation now copies constant buffers, which fixes the regression in + https://bugs.webkit.org/show_bug.cgi?id=70246. No new tests because this + regression relies on a subtle interleaving of optimized compilation and garbage + collection, and cannot be reproduced in a simple test. + + This also adds some new debug support, which was used to fix this bug and is + likely to be useful in the future. + + * bytecode/CodeBlock.cpp: + (JSC::CodeBlock::copyDataFrom): + (JSC::CodeBlock::usesOpcode): + * bytecode/CodeBlock.h: + * dfg/DFGGraph.cpp: + (JSC::DFG::Graph::dump): + +2011-10-25 Mark Hahnenberg <mhahnenberg@apple.com> + + Fixing Windows build after r98367 + + Unreviewed build fix + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + +2011-10-25 Yuqiang Xian <yuqiang.xian@intel.com> + + Add missing DFG file entries to the make lists for GTK and Qt ports + https://bugs.webkit.org/show_bug.cgi?id=70806 + + Reviewed by Darin Adler. + + * GNUmakefile.list.am: + * JavaScriptCore.pro: + +2011-10-25 Mark Hahnenberg <mhahnenberg@apple.com> + + Add getOwnPropertySlot to MethodTable + https://bugs.webkit.org/show_bug.cgi?id=69807 + + Reviewed by Oliver Hunt. + + * JavaScriptCore.exp: + * runtime/ClassInfo.h: Added both versions of getOwnPropertySlot to the MethodTable. + * runtime/JSCell.h: Changed getOwnPropertySlot to be protected so other classes can + reference it in their MethodTables. + +2011-10-25 Oliver Hunt <oliver@apple.com> + + Need to support marking of multiple nested codeblocks when compiling + https://bugs.webkit.org/show_bug.cgi?id=70832 + + Reviewed by Gavin Barraclough. + + When inlining a function we end up with multiple codeblocks being + compiled at the same time, so we need to support a list of live + codeblocks. + + * heap/Heap.cpp: + (JSC::Heap::markRoots): + * runtime/JSGlobalData.cpp: + (JSC::JSGlobalData::JSGlobalData): + * runtime/JSGlobalData.h: + (JSC::JSGlobalData::startedCompiling): + (JSC::JSGlobalData::finishedCompiling): + +2011-10-24 Yuqiang Xian <yuqiang.xian@intel.com> + + DFG JIT 32_64 - fillInteger should accept DataFormatJSInteger + https://bugs.webkit.org/show_bug.cgi?id=70798 + + Reviewed by Filip Pizlo. + + When filling an integer for a known integer node (not speculated), it + should accept DataFormatJSInteger as well. + + * dfg/DFGJITCodeGenerator32_64.cpp: + (JSC::DFG::JITCodeGenerator::fillInteger): + +2011-10-24 Geoffrey Garen <ggaren@apple.com> + + Build fix: removed some cases of threadsafeCopy() that I missed in + my previous patch. + + * JavaScriptCore.order: + +2011-10-24 Geoffrey Garen <ggaren@apple.com> + + Removed SharedUChar and tightened language around its previous uses + https://bugs.webkit.org/show_bug.cgi?id=70698 + + Reviewed by David Levin. + + - Removed SharedUChar because most of its functionality has moved into + other abstraction layers, and we want remaining clients to choose their + abstractions explicitly instead of relying on StringImpl to provide this + behavior implicitly, since we think they can sometimes make more efficient + choices. + + - Renamed "threadSafeCopy" and "crossThreadCopy" to "isolatedCopy" because + the former names could give the impression that the resulting object was + thread-safe, but actually it's just an isolated copy, which is not + thread-safe by itself, but can be used to implement a thread-safe + algorithm through isolation. + + * wtf/CrossThreadRefCounted.h: Removed. + + * JavaScriptCore.exp: Export! + + * wtf/text/StringImpl.cpp: + (WTF::StringImpl::~StringImpl): Removed the stuff mentioned above. + + * wtf/text/StringImpl.h: + (WTF::StringImpl::length): Ditto. + + (WTF::StringImpl::isolatedCopy): Inlined this, since it's now trivial. + + * wtf/text/WTFString.cpp: + (WTF::String::isolatedCopy): + * wtf/text/WTFString.h: Updated for StringImpl changes. + + * API/OpaqueJSString.h: + * GNUmakefile.list.am: + * JavaScriptCore.exp: + * JavaScriptCore.gypi: + * JavaScriptCore.order: + * JavaScriptCore.vcproj/WTF/WTF.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * wtf/CMakeLists.txt: + * wtf/OwnFastMallocPtr.h: + * wtf/RefCounted.h: + * wtf/SizeLimits.cpp: + * wtf/ThreadSafeRefCounted.h: + * wtf/wtf.pri: + * yarr/YarrPattern.h: Updated these files to accomodate removal of + CrossThreadRefCounted.h. + +2011-10-24 Oliver Hunt <oliver@apple.com> + + Crash in void JSC::validateCell<JSC::RegExp*>(JSC::RegExp*) + https://bugs.webkit.org/show_bug.cgi?id=70689 + + Reviewed by Filip Pizlo. + + While performing codegen we need to make the GlobalData explicitly + aware of the codeblock being compiled, as compilation may trigger GC + and CodeBlock holds GC values, but has not yet been assigned to its + owner executable. + + * bytecompiler/BytecodeGenerator.cpp: + (JSC::BytecodeGenerator::BytecodeGenerator): + (JSC::BytecodeGenerator::~BytecodeGenerator): + * bytecompiler/BytecodeGenerator.h: + * heap/AllocationSpace.cpp: + (JSC::AllocationSpace::allocateSlowCase): + * heap/Heap.cpp: + (JSC::Heap::markRoots): + * runtime/JSGlobalData.cpp: + (JSC::JSGlobalData::JSGlobalData): + * runtime/JSGlobalData.h: + (JSC::JSGlobalData::startedCompiling): + (JSC::JSGlobalData::finishedCompiling): + +2011-10-24 Filip Pizlo <fpizlo@apple.com> + + Object-or-other branch speculation may corrupt the state for OSR if the child of the + branch is an integer + https://bugs.webkit.org/show_bug.cgi?id=70777 + + Reviewed by Oliver Hunt. + + * dfg/DFGSpeculativeJIT64.cpp: + (JSC::DFG::SpeculativeJIT::emitObjectOrOtherBranch): + +2011-10-24 Filip Pizlo <fpizlo@apple.com> + + op_new_array_buffer is not inlined correctly + https://bugs.webkit.org/show_bug.cgi?id=70770 + + Reviewed by Oliver Hunt. + + Disabled inlining of op_new_array_buffer, for now. + + * dfg/DFGCapabilities.h: + (JSC::DFG::canInlineOpcode): + +2011-10-24 Yuqiang Xian <yuqiang.xian@intel.com> + + Add boolean speculations to DFG JIT 32_64 + https://bugs.webkit.org/show_bug.cgi?id=70706 + + Reviewed by Filip Pizlo. + + Different from the boolean speculations in DFG 64, the boolean + speculations in DFG 32_64 will use a 32bit GPR to hold the primitive + boolean instead of a JSBoolean. This choice is not only for + performance, but also to save a register as we're short of registers on + X86. + To accomplish this we make use of DataFormatBoolean, allow a value to + be represented as a primitive boolean and converted from/to a + JSBoolean. + This patch also fixes SpillOrder in 32_64, which should be different + from 64, and fixes needDataFormatConversion logic in 32_64. + + * assembler/MacroAssemblerX86Common.h: + (JSC::MacroAssemblerX86Common::branchTest32): + We don't expect byte test actually as it doesn't work for registers + esp..edi on X86. + * dfg/DFGGenerationInfo.h: + (JSC::DFG::needDataFormatConversion): + (JSC::DFG::GenerationInfo::initBoolean): + (JSC::DFG::GenerationInfo::gpr): + (JSC::DFG::GenerationInfo::fillInteger): + (JSC::DFG::GenerationInfo::fillBoolean): + * dfg/DFGJITCodeGenerator.cpp: + (JSC::DFG::JITCodeGenerator::checkConsistency): + * dfg/DFGJITCodeGenerator.h: + (JSC::DFG::JITCodeGenerator::use): + (JSC::DFG::JITCodeGenerator::silentSpillGPR): + (JSC::DFG::JITCodeGenerator::silentFillGPR): + (JSC::DFG::JITCodeGenerator::spill): + (JSC::DFG::cellResult): + (JSC::DFG::booleanResult): + * dfg/DFGJITCodeGenerator32_64.cpp: + (JSC::DFG::JITCodeGenerator::fillJSValue): + (JSC::DFG::JITCodeGenerator::nonSpeculativeNonPeepholeCompareNull): + (JSC::DFG::JITCodeGenerator::nonSpeculativeNonPeepholeCompare): + (JSC::DFG::JITCodeGenerator::nonSpeculativeNonPeepholeStrictEq): + * dfg/DFGJITCompiler32_64.cpp: + (JSC::DFG::JITCompiler::exitSpeculativeWithOSR): + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::ValueSource::dump): + (JSC::DFG::ValueRecovery::dump): + (JSC::DFG::SpeculativeJIT::checkArgumentTypes): + (JSC::DFG::SpeculativeJIT::computeValueRecoveryFor): + * dfg/DFGSpeculativeJIT.h: + (JSC::DFG::ValueSource::forPrediction): + (JSC::DFG::ValueRecovery::alreadyInRegisterFileAsUnboxedBoolean): + (JSC::DFG::ValueRecovery::inGPR): + (JSC::DFG::ValueRecovery::gpr): + * dfg/DFGSpeculativeJIT32_64.cpp: + (JSC::DFG::SpeculativeJIT::fillSpeculateIntInternal): + (JSC::DFG::SpeculativeJIT::fillSpeculateDouble): + (JSC::DFG::SpeculativeJIT::fillSpeculateBoolean): + (JSC::DFG::SpeculativeJIT::compileObjectEquality): + (JSC::DFG::SpeculativeJIT::compare): + (JSC::DFG::SpeculativeJIT::compileObjectOrOtherLogicalNot): + (JSC::DFG::SpeculativeJIT::compileLogicalNot): + (JSC::DFG::SpeculativeJIT::emitBranch): + (JSC::DFG::SpeculativeJIT::compile): + +2011-10-24 Mark Hahnenberg <mhahnenberg@apple.com> + + Fixing Windows build + + Unreviewed build fix + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + +2011-10-24 Yuqiang Xian <yuqiang.xian@intel.com> + + BitVector isInline check could fail + https://bugs.webkit.org/show_bug.cgi?id=70691 + + Reviewed by Geoffrey Garen. + + Current BitVector uses the highest bit of m_bitsOrPointer to indicate + whether it's an inlined bit set or a pointer to an outOfLine bit set. + This check may fail in case the pointer also has the highest bit set, + which is surely possible on IA32 (Linux). + In this case the check failure can result in unexpected behaviors, + for example if the BitVector is incorrectly determined as having an + inlined bit set, then setting a bit exceeding maxInlineBits will wrongly + modify the memory adjacent to the BitVector object. + This fix is to use the lowest bit of m_bitsOrPointer to indicate inline + or outofline, based on the assumption that the pointer to OutOfLineBits + should be 4 or 8 byte aligned. + We could mark the lowest bit (bit 0) with 1 for inlined bit set, + and bits 1~bitsInPointer are used for bit set/test. + In this case we need do one bit more shift for bit set/test. + + * wtf/BitVector.cpp: + (WTF::BitVector::resizeOutOfLine): + * wtf/BitVector.h: + (WTF::BitVector::quickGet): + (WTF::BitVector::quickSet): + (WTF::BitVector::quickClear): + (WTF::BitVector::makeInlineBits): + (WTF::BitVector::isInline): + +2011-10-24 Mark Hahnenberg <mhahnenberg@apple.com> + + Rename static getOwnPropertySlot to getOwnPropertySlotByIndex + https://bugs.webkit.org/show_bug.cgi?id=70271 + + Reviewed by Darin Adler. + + Renaming versions of getOwnPropertySlot that use an unsigned as the property + name to "getOwnPropertySlotByIndex" in preparation for adding them to the + MethodTable, which requires unique names for each method. + + * JavaScriptCore.exp: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * runtime/Arguments.cpp: + (JSC::Arguments::getOwnPropertySlotVirtual): + (JSC::Arguments::getOwnPropertySlotByIndex): + * runtime/Arguments.h: + * runtime/JSArray.cpp: + (JSC::JSArray::getOwnPropertySlotVirtual): + (JSC::JSArray::getOwnPropertySlotByIndex): + (JSC::JSArray::getOwnPropertySlot): + * runtime/JSArray.h: + * runtime/JSByteArray.cpp: + (JSC::JSByteArray::getOwnPropertySlotVirtual): + (JSC::JSByteArray::getOwnPropertySlotByIndex): + * runtime/JSByteArray.h: + * runtime/JSCell.cpp: + (JSC::JSCell::getOwnPropertySlotVirtual): + (JSC::JSCell::getOwnPropertySlotByIndex): + * runtime/JSCell.h: + * runtime/JSNotAnObject.cpp: + (JSC::JSNotAnObject::getOwnPropertySlotVirtual): + (JSC::JSNotAnObject::getOwnPropertySlotByIndex): + * runtime/JSNotAnObject.h: + * runtime/JSObject.cpp: + (JSC::JSObject::getOwnPropertySlotVirtual): + (JSC::JSObject::getOwnPropertySlotByIndex): + * runtime/JSObject.h: + * runtime/JSString.cpp: + (JSC::JSString::getOwnPropertySlotVirtual): + (JSC::JSString::getOwnPropertySlotByIndex): + * runtime/JSString.h: + * runtime/ObjectPrototype.cpp: + (JSC::ObjectPrototype::getOwnPropertySlotVirtual): + (JSC::ObjectPrototype::getOwnPropertySlotByIndex): + * runtime/ObjectPrototype.h: + * runtime/RegExpMatchesArray.h: + (JSC::RegExpMatchesArray::getOwnPropertySlotVirtual): + (JSC::RegExpMatchesArray::getOwnPropertySlotByIndex): + * runtime/StringObject.cpp: + (JSC::StringObject::getOwnPropertySlotVirtual): + (JSC::StringObject::getOwnPropertySlotByIndex): + * runtime/StringObject.h: + +2011-10-24 Patrick Gansterer <paroga@webkit.org> + + Interpreter build fix after r98179. + + * bytecode/CodeBlock.h: + Moved CodeBlock::baselineVersion() into ENABLE(JIT) block, + since it is only used there. + +2011-10-23 Geoffrey Garen <ggaren@apple.com> + + Fixed a typo Darin spotted. + + * wtf/StringHasher.h: + (WTF::StringHasher::hash): Expelliarmus! + +2011-10-23 Geoffrey Garen <ggaren@apple.com> + + Removed StringImpl::createStrippingNullCharacters + https://bugs.webkit.org/show_bug.cgi?id=70700 + + Reviewed by David Levin. + + It was unused. + + * JavaScriptCore.exp: + * wtf/text/StringImpl.cpp: + * wtf/text/StringImpl.h: + +2011-10-22 Filip Pizlo <fpizlo@apple.com> + + DFG should inline constructors + https://bugs.webkit.org/show_bug.cgi?id=70675 + + Reviewed by Oliver Hunt. + + Adds support for inlining constructors. Also fixes two pathologies + uncovered along the way: CheckMethod claimed that it never returned a + result (causing CheckMethod -> SetLocal -> GetLocal sequences to + result in the GetLocal doing OSR exit), and get_by_id parsing never + checked if it was hot in slow path. Also fiddled with inlining + heuristics; it appears that for now, the more inlining, the happier + V8 is. Finally, a bug was uncovered where a silent spill of a boxed + integer that had previously been spilled unboxed causes the silent + fill to forget to unbox. + + This appears to be a 4% speed-up on V8 in their harness, or a 1% + speed-up in my harness. The difference is due to warm-up: in my + harness we see significant amounts of time spent in compilation, but + in V8's harness compilation gets amortizes. Profiling indicates that + we have the potential for a 5% win from basic optimizations like + generating OSR exits lazily and holding onto bytecode longer. + + * dfg/DFGAbstractState.cpp: + (JSC::DFG::AbstractState::execute): + * dfg/DFGByteCodeParser.cpp: + (JSC::DFG::ByteCodeParser::handleCall): + (JSC::DFG::ByteCodeParser::handleInlining): + (JSC::DFG::ByteCodeParser::handleMinMax): + (JSC::DFG::ByteCodeParser::parseBlock): + (JSC::DFG::ByteCodeParser::InlineStackEntry::InlineStackEntry): + (JSC::DFG::ByteCodeParser::parse): + * dfg/DFGCapabilities.h: + (JSC::DFG::mightInlineFunctionForConstruct): + (JSC::DFG::canInlineOpcode): + (JSC::DFG::mightInlineFunctionFor): + (JSC::DFG::canInlineFunctionFor): + * dfg/DFGJITCodeGenerator.h: + (JSC::DFG::JITCodeGenerator::silentFillGPR): + * runtime/Executable.h: + (JSC::isCall): + (JSC::ExecutableBase::intrinsicFor): + * runtime/Heuristics.cpp: + (JSC::Heuristics::initializeHeuristics): + * runtime/Heuristics.h: + +2011-10-23 Noel Gordon <noel.gordon@gmail.com> + + [chromium] Remove RopeImpl.{h,cpp} from the gyp projects + https://bugs.webkit.org/show_bug.cgi?id=70703 + + Reviewed by Kent Tamura. + + runtime/RopeImpl.{h,cpp} were removed in r97872, remove references + to these files from the gyp project files. + + * JavaScriptCore.gypi: + +2011-10-23 Mark Hahnenberg <mhahnenberg@apple.com> + + Add deleteProperty to the MethodTable + https://bugs.webkit.org/show_bug.cgi?id=70162 + + Reviewed by Sam Weinig. + + * JavaScriptCore.exp: + * runtime/ClassInfo.h: Added both versions of deleteProperty to the MethodTable. + * runtime/JSFunction.h: Changed JSFunction::deleteProperty to + be protected rather than private for subclasses who don't provide their own + implementation. + +2011-10-23 Mark Hahnenberg <mhahnenberg@apple.com> + + Remove getConstructDataVirtual + https://bugs.webkit.org/show_bug.cgi?id=70638 + + Reviewed by Darin Adler. + + Removed all declarations and definitions of getConstructDataVirtual. + Also replaced all call sites to getConstructDataVirtual with a + corresponding lookup in the MethodTable. + + * API/JSCallbackConstructor.cpp: + * API/JSCallbackConstructor.h: + * API/JSCallbackObject.h: + * API/JSCallbackObjectFunctions.h: + * API/JSObjectRef.cpp: + (JSObjectIsConstructor): + (JSObjectCallAsConstructor): + * JavaScriptCore.exp: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * dfg/DFGOperations.cpp: + * interpreter/Interpreter.cpp: + (JSC::Interpreter::privateExecute): + * jit/JITStubs.cpp: + (JSC::DEFINE_STUB_FUNCTION): + * runtime/ArrayConstructor.cpp: + * runtime/ArrayConstructor.h: + * runtime/BooleanConstructor.cpp: + * runtime/BooleanConstructor.h: + * runtime/DateConstructor.cpp: + * runtime/DateConstructor.h: + * runtime/Error.h: + (JSC::StrictModeTypeErrorFunction::getConstructData): + * runtime/ErrorConstructor.cpp: + * runtime/ErrorConstructor.h: + * runtime/FunctionConstructor.cpp: + * runtime/FunctionConstructor.h: + * runtime/JSCell.cpp: + * runtime/JSCell.h: + * runtime/JSFunction.cpp: + * runtime/JSFunction.h: + * runtime/JSObject.h: + (JSC::getConstructData): + * runtime/NativeErrorConstructor.cpp: + * runtime/NativeErrorConstructor.h: + * runtime/NumberConstructor.cpp: + * runtime/NumberConstructor.h: + * runtime/ObjectConstructor.cpp: + * runtime/ObjectConstructor.h: + * runtime/RegExpConstructor.cpp: + * runtime/RegExpConstructor.h: + * runtime/StringConstructor.cpp: + * runtime/StringConstructor.h: + +2011-10-23 Geoffrey Garen <ggaren@apple.com> + + Try to fix the SL build. + + * dfg/DFGByteCodeParser.cpp: + (JSC::DFG::ByteCodeParser::InlineStackEntry::InlineStackEntry): Cast + away int vs unisgned warning. + +2011-10-21 Geoffrey Garen <ggaren@apple.com> + + Separated string lifetime bits from character buffer state bits + https://bugs.webkit.org/show_bug.cgi?id=70673 + + Reviewed by Anders Carlsson. + + Moved the static/immortal bit into the bottom bit of the refcount, and + moved all other bits into the high bits of the hash code. + + This is the first step toward a new Characters/PassString class, and it + makes ref/deref slightly more efficient. + + * create_hash_table: + * wtf/StringHasher.h: + (WTF::StringHasher::hash): Tweaked the string hashing function to leave + the top bits clear, so they can be used as flags. + + Fixed some small differences between the PERL copy of this function and + the C++ copy of this function, which could have in theory caused subtle + crashes. + + * wtf/text/StringImpl.cpp: + (WTF::StringImpl::sharedBuffer): + (WTF::StringImpl::createWithTerminatingNullCharacter): + * wtf/text/StringImpl.h: + (WTF::StringImpl::StringImpl): + (WTF::StringImpl::cost): Renamed s_refCountFlagShouldReportedCost to + s_didReportExtraCost, since the original name was both self-contradictory + and used as a double-negative. + + (WTF::StringImpl::isIdentifier): + (WTF::StringImpl::setIsIdentifier): + (WTF::StringImpl::hasTerminatingNullCharacter): + (WTF::StringImpl::isAtomic): + (WTF::StringImpl::setIsAtomic): + (WTF::StringImpl::setHash): + (WTF::StringImpl::rawHash): + (WTF::StringImpl::hasHash): + (WTF::StringImpl::existingHash): + (WTF::StringImpl::hash): + (WTF::StringImpl::hasOneRef): + (WTF::StringImpl::ref): + (WTF::StringImpl::deref): + (WTF::StringImpl::bufferOwnership): + (WTF::StringImpl::isStatic): Moved the static/immortal bit into the bottom + bit of the refcount. Now, all lifetime information lives in the refcount + field. Moved the other bits into the hash code field. + +2011-10-21 Filip Pizlo <fpizlo@apple.com> + + DFG inlining sometimes fails to reset constant references + https://bugs.webkit.org/show_bug.cgi?id=70668 + + Reviewed by Anders Carlsson. + + Reset constant references when we need to (new block created) and not + when we don't (change of inlining depth). + + * dfg/DFGByteCodeParser.cpp: + (JSC::DFG::ByteCodeParser::handleInlining): + (JSC::DFG::ByteCodeParser::prepareToParseBlock): + (JSC::DFG::ByteCodeParser::parseBlock): + (JSC::DFG::ByteCodeParser::parseCodeBlock): + +2011-10-21 Filip Pizlo <fpizlo@apple.com> + + DFG should have inlining + https://bugs.webkit.org/show_bug.cgi?id=69996 + + Reviewed by Oliver Hunt. + + Implements inlining that's hooked into the bytecode parser. Only + works for calls, for now, though nothing fundamentally prevents us + from inlining constructor calls. 2% overall speed-up on all + benchmarks. 7% speed-up on V8 (around 34% and 27% on deltablue and + richards respectively), neutral on Kraken and SunSpider. + + * bytecode/CodeBlock.cpp: + (JSC::CodeBlock::visitAggregate): + * bytecode/CodeBlock.h: + (JSC::CodeBlock::baselineVersion): + (JSC::CodeBlock::setInstructionCount): + (JSC::CodeBlock::likelyToTakeSlowCase): + (JSC::CodeBlock::couldTakeSlowCase): + (JSC::CodeBlock::likelyToTakeSpecialFastCase): + (JSC::CodeBlock::likelyToTakeDeepestSlowCase): + (JSC::CodeBlock::likelyToTakeAnySlowCase): + * bytecode/CodeOrigin.h: + (JSC::CodeOrigin::inlineDepthForCallFrame): + (JSC::CodeOrigin::inlineDepth): + (JSC::CodeOrigin::operator==): + (JSC::CodeOrigin::inlineStack): + * bytecompiler/BytecodeGenerator.cpp: + (JSC::BytecodeGenerator::generate): + * dfg/DFGAbstractState.cpp: + (JSC::DFG::AbstractState::beginBasicBlock): + (JSC::DFG::AbstractState::execute): + (JSC::DFG::AbstractState::mergeStateAtTail): + * dfg/DFGBasicBlock.h: + (JSC::DFG::BasicBlock::BasicBlock): + (JSC::DFG::BasicBlock::ensureLocals): + (JSC::DFG::UnlinkedBlock::UnlinkedBlock): + * dfg/DFGByteCodeParser.cpp: + (JSC::DFG::ByteCodeParser::ByteCodeParser): + (JSC::DFG::ByteCodeParser::getDirect): + (JSC::DFG::ByteCodeParser::get): + (JSC::DFG::ByteCodeParser::setDirect): + (JSC::DFG::ByteCodeParser::set): + (JSC::DFG::ByteCodeParser::getLocal): + (JSC::DFG::ByteCodeParser::getArgument): + (JSC::DFG::ByteCodeParser::flush): + (JSC::DFG::ByteCodeParser::InlineStackEntry::~InlineStackEntry): + (JSC::DFG::ByteCodeParser::InlineStackEntry::remapOperand): + (JSC::DFG::ByteCodeParser::handleInlining): + (JSC::DFG::ByteCodeParser::parseBlock): + (JSC::DFG::ByteCodeParser::processPhiStack): + (JSC::DFG::ByteCodeParser::linkBlock): + (JSC::DFG::ByteCodeParser::linkBlocks): + (JSC::DFG::ByteCodeParser::handleSuccessor): + (JSC::DFG::ByteCodeParser::determineReachability): + (JSC::DFG::ByteCodeParser::buildOperandMapsIfNecessary): + (JSC::DFG::ByteCodeParser::InlineStackEntry::InlineStackEntry): + (JSC::DFG::ByteCodeParser::parseCodeBlock): + (JSC::DFG::ByteCodeParser::parse): + * dfg/DFGCapabilities.cpp: + (JSC::DFG::canHandleOpcodes): + (JSC::DFG::canCompileOpcodes): + (JSC::DFG::canInlineOpcodes): + * dfg/DFGCapabilities.h: + (JSC::DFG::mightCompileEval): + (JSC::DFG::mightCompileProgram): + (JSC::DFG::mightCompileFunctionForCall): + (JSC::DFG::mightCompileFunctionForConstruct): + (JSC::DFG::mightInlineFunctionForCall): + (JSC::DFG::mightInlineFunctionForConstruct): + (JSC::DFG::canInlineOpcode): + (JSC::DFG::canInlineOpcodes): + (JSC::DFG::canInlineFunctionForCall): + (JSC::DFG::canInlineFunctionForConstruct): + * dfg/DFGGraph.cpp: + (JSC::DFG::printWhiteSpace): + (JSC::DFG::Graph::dumpCodeOrigin): + (JSC::DFG::Graph::dump): + * dfg/DFGGraph.h: + (JSC::DFG::GetBytecodeBeginForBlock::operator()): + (JSC::DFG::Graph::blockIndexForBytecodeOffset): + * dfg/DFGJITCompiler.cpp: + (JSC::DFG::JITCompiler::decodedCodeMapFor): + (JSC::DFG::JITCompiler::linkOSRExits): + (JSC::DFG::JITCompiler::exitSpeculativeWithOSR): + * dfg/DFGJITCompiler.h: + (JSC::DFG::JITCompiler::debugCall): + (JSC::DFG::JITCompiler::baselineCodeBlockFor): + * dfg/DFGJITCompiler32_64.cpp: + (JSC::DFG::JITCompiler::exitSpeculativeWithOSR): + * dfg/DFGNode.h: + (JSC::DFG::Node::hasVariableAccessData): + (JSC::DFG::Node::shouldGenerate): + * dfg/DFGOperands.h: + (JSC::DFG::Operands::ensureLocals): + (JSC::DFG::Operands::setLocal): + (JSC::DFG::Operands::getLocal): + * dfg/DFGPropagator.cpp: + (JSC::DFG::Propagator::propagateNodePredictions): + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::OSRExit::OSRExit): + (JSC::DFG::SpeculativeJIT::compile): + (JSC::DFG::SpeculativeJIT::checkArgumentTypes): + * dfg/DFGSpeculativeJIT.h: + (JSC::DFG::SpeculativeJIT::SpeculativeJIT): + * dfg/DFGSpeculativeJIT32_64.cpp: + (JSC::DFG::SpeculativeJIT::compile): + * dfg/DFGSpeculativeJIT64.cpp: + (JSC::DFG::SpeculativeJIT::compile): + * interpreter/CallFrame.cpp: + (JSC::CallFrame::trueCallerFrameSlow): + * jit/JITCall.cpp: + (JSC::JIT::compileOpCallSlowCase): + * jit/JITStubs.cpp: + (JSC::DEFINE_STUB_FUNCTION): + * runtime/Executable.cpp: + (JSC::FunctionExecutable::baselineCodeBlockFor): + (JSC::FunctionExecutable::produceCodeBlockFor): + (JSC::FunctionExecutable::compileForCallInternal): + (JSC::FunctionExecutable::compileForConstructInternal): + * runtime/Executable.h: + (JSC::FunctionExecutable::profiledCodeBlockFor): + (JSC::FunctionExecutable::parameterCount): + * runtime/Heuristics.cpp: + (JSC::Heuristics::initializeHeuristics): + * runtime/Heuristics.h: + * runtime/JSFunction.h: + +2011-10-21 Mark Hahnenberg <mhahnenberg@apple.com> + + Add put to the MethodTable + https://bugs.webkit.org/show_bug.cgi?id=70439 + + Reviewed by Oliver Hunt. + + * JavaScriptCore.exp: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * runtime/ClassInfo.h: Added put and putByIndex to the MethodTable. + * runtime/JSFunction.h: Changed access modifier for put to protected since some + subclasses of JSFunction need to reference it in their MethodTables. + +2011-10-21 Mark Hahnenberg <mhahnenberg@apple.com> + + Add finalizer to JSObject + https://bugs.webkit.org/show_bug.cgi?id=70336 + + Reviewed by Darin Adler. + + * heap/MarkedBlock.cpp: + (JSC::MarkedBlock::callDestructor): Skip the call to the destructor + if we're a JSFinalObject, since the finalizer takes care of things. + * runtime/JSCell.h: + (JSC::JSCell::~JSCell): Remove the GC validation due to a conflict with + future changes and the fact that we no longer always call the destructor, making + the information provided less useful. + * runtime/JSObject.cpp: + (JSC::JSObject::finalize): Add finalizer for JSObject. + (JSC::JSObject::allocatePropertyStorage): The first time we need to allocate out-of-line + property storage, we add a finalizer to ourself. + * runtime/JSObject.h: + +2011-10-21 Simon Hausmann <simon.hausmann@nokia.com> + + Remove QtScript source code from WebKit. + https://bugs.webkit.org/show_bug.cgi?id=64088 + + Reviewed by Tor Arne Vestbø. + + Removed dead code that isn't developed anymore. + + * JavaScriptCore.gypi: + * JavaScriptCore.pri: + * qt/api/QtScript.pro: Removed. + * qt/api/qscriptconverter_p.h: Removed. + * qt/api/qscriptengine.cpp: Removed. + * qt/api/qscriptengine.h: Removed. + * qt/api/qscriptengine_p.cpp: Removed. + * qt/api/qscriptengine_p.h: Removed. + * qt/api/qscriptfunction.cpp: Removed. + * qt/api/qscriptfunction_p.h: Removed. + * qt/api/qscriptoriginalglobalobject_p.h: Removed. + * qt/api/qscriptprogram.cpp: Removed. + * qt/api/qscriptprogram.h: Removed. + * qt/api/qscriptprogram_p.h: Removed. + * qt/api/qscriptstring.cpp: Removed. + * qt/api/qscriptstring.h: Removed. + * qt/api/qscriptstring_p.h: Removed. + * qt/api/qscriptsyntaxcheckresult.cpp: Removed. + * qt/api/qscriptsyntaxcheckresult.h: Removed. + * qt/api/qscriptsyntaxcheckresult_p.h: Removed. + * qt/api/qscriptvalue.cpp: Removed. + * qt/api/qscriptvalue.h: Removed. + * qt/api/qscriptvalue_p.h: Removed. + * qt/api/qscriptvalueiterator.cpp: Removed. + * qt/api/qscriptvalueiterator.h: Removed. + * qt/api/qscriptvalueiterator_p.h: Removed. + * qt/api/qtscriptglobal.h: Removed. + * qt/benchmarks/benchmarks.pri: Removed. + * qt/benchmarks/benchmarks.pro: Removed. + * qt/benchmarks/qscriptengine/qscriptengine.pro: Removed. + * qt/benchmarks/qscriptengine/tst_qscriptengine.cpp: Removed. + * qt/benchmarks/qscriptvalue/qscriptvalue.pro: Removed. + * qt/benchmarks/qscriptvalue/tst_qscriptvalue.cpp: Removed. + * qt/tests/qscriptengine/qscriptengine.pro: Removed. + * qt/tests/qscriptengine/tst_qscriptengine.cpp: Removed. + * qt/tests/qscriptstring/qscriptstring.pro: Removed. + * qt/tests/qscriptstring/tst_qscriptstring.cpp: Removed. + * qt/tests/qscriptvalue/qscriptvalue.pro: Removed. + * qt/tests/qscriptvalue/tst_qscriptvalue.cpp: Removed. + * qt/tests/qscriptvalue/tst_qscriptvalue.h: Removed. + * qt/tests/qscriptvalue/tst_qscriptvalue_generated_comparison.cpp: Removed. + * qt/tests/qscriptvalue/tst_qscriptvalue_generated_init.cpp: Removed. + * qt/tests/qscriptvalue/tst_qscriptvalue_generated_istype.cpp: Removed. + * qt/tests/qscriptvalue/tst_qscriptvalue_generated_totype.cpp: Removed. + * qt/tests/qscriptvalueiterator/qscriptvalueiterator.pro: Removed. + * qt/tests/qscriptvalueiterator/tst_qscriptvalueiterator.cpp: Removed. + * qt/tests/tests.pri: Removed. + * qt/tests/tests.pro: Removed. + +2011-10-21 Zheng Liu <zheng.z.liu@intel.com> + + bytecompiler sometimes generates incorrect bytecode for put_by_id + https://bugs.webkit.org/show_bug.cgi?id=70403 + + Reviewed by Filip Pizlo. + + * bytecompiler/NodesCodegen.cpp: + (JSC::AssignDotNode::emitBytecode): + (JSC::AssignBracketNode::emitBytecode): + +2011-10-20 Filip Pizlo <fpizlo@apple.com> + + DFG should not try to predict argument types by looking at the values of + argument registers at the time of compilation + https://bugs.webkit.org/show_bug.cgi?id=70578 + + Reviewed by Oliver Hunt. + + * bytecode/CodeBlock.cpp: + * dfg/DFGDriver.cpp: + (JSC::DFG::compile): + (JSC::DFG::tryCompile): + (JSC::DFG::tryCompileFunction): + * dfg/DFGDriver.h: + (JSC::DFG::tryCompileFunction): + * dfg/DFGGraph.cpp: + (JSC::DFG::Graph::predictArgumentTypes): + * dfg/DFGGraph.h: + * runtime/Executable.cpp: + (JSC::FunctionExecutable::compileOptimizedForCall): + (JSC::FunctionExecutable::compileOptimizedForConstruct): + (JSC::FunctionExecutable::compileForCallInternal): + (JSC::FunctionExecutable::compileForConstructInternal): + * runtime/Executable.h: + (JSC::FunctionExecutable::compileForCall): + (JSC::FunctionExecutable::compileForConstruct): + (JSC::FunctionExecutable::compileFor): + (JSC::FunctionExecutable::compileOptimizedFor): + +2011-10-20 Filip Pizlo <fpizlo@apple.com> + + DFG call optimization handling will fail if the call had been unlinked due + to the callee being optimized + https://bugs.webkit.org/show_bug.cgi?id=70468 + + Reviewed by Geoff Garen. + + If a call had ever been linked, we remember this fact as well as the function + to which it was linked even if unlinkIncomingCalls() or unlinkCalls() are + called. + + * bytecode/CodeBlock.cpp: + (JSC::CodeBlock::visitAggregate): + * bytecode/CodeBlock.h: + * dfg/DFGByteCodeParser.cpp: + (JSC::DFG::ByteCodeParser::parseBlock): + * dfg/DFGRepatch.cpp: + (JSC::DFG::dfgLinkFor): + * jit/JIT.cpp: + (JSC::JIT::linkFor): + +2011-10-20 Yuqiang Xian <yuqiang.xian@intel.com> + + DFG JIT 32_64 - Fix ByteArray speculation + https://bugs.webkit.org/show_bug.cgi?id=70571 + + Reviewed by Filip Pizlo. + + * dfg/DFGSpeculativeJIT.h: + (JSC::DFG::ValueSource::forPrediction): + * dfg/DFGSpeculativeJIT32_64.cpp: + (JSC::DFG::SpeculativeJIT::compile): + +2011-10-20 Vincent Scheib <scheib@chromium.org> + + MouseLock compile and run time flags. + https://bugs.webkit.org/show_bug.cgi?id=70530 + + Reviewed by Darin Fisher. + + * wtf/Platform.h: + +2011-10-20 Mark Hahnenberg <mhahnenberg@apple.com> + + Rename static deleteProperty to deletePropertyByIndex + https://bugs.webkit.org/show_bug.cgi?id=70257 + + Reviewed by Geoffrey Garen. + + Renaming versions of deleteProperty that use an unsigned as the property + name to "deletePropertyByIndex" in preparation for adding them to the + MethodTable, which requires unique names for each method. + + * API/JSCallbackObject.h: + * API/JSCallbackObjectFunctions.h: + (JSC::::deletePropertyVirtual): + (JSC::::deletePropertyByIndex): + * runtime/Arguments.cpp: + (JSC::Arguments::deletePropertyVirtual): + (JSC::Arguments::deletePropertyByIndex): + * runtime/Arguments.h: + * runtime/JSArray.cpp: + (JSC::JSArray::deletePropertyVirtual): + (JSC::JSArray::deletePropertyByIndex): + * runtime/JSArray.h: + * runtime/JSCell.cpp: + (JSC::JSCell::deletePropertyVirtual): + (JSC::JSCell::deletePropertyByIndex): + * runtime/JSCell.h: + * runtime/JSNotAnObject.cpp: + (JSC::JSNotAnObject::deletePropertyVirtual): + (JSC::JSNotAnObject::deletePropertyByIndex): + * runtime/JSNotAnObject.h: + * runtime/JSObject.cpp: + (JSC::JSObject::deletePropertyVirtual): + (JSC::JSObject::deletePropertyByIndex): + * runtime/JSObject.h: + * runtime/RegExpMatchesArray.h: + (JSC::RegExpMatchesArray::deletePropertyVirtual): + (JSC::RegExpMatchesArray::deletePropertyByIndex): + +2011-10-20 Filip Pizlo <fpizlo@apple.com> + + https://bugs.webkit.org/show_bug.cgi?id=70482 + DFG-related stubs in the old JIT should not be built if the DFG is disabled + + Reviewed by Zoltan Herczeg. + + Aiming for a slight code size/build time reduction if the DFG is not in + play. This should also make further DFG development slightly easier since + the bodies of these JIT stubs can now safely refer to things that are only + declared when the DFG is enabled. + + * jit/JITStubs.cpp: + * jit/JITStubs.h: + +2011-10-19 Filip Pizlo <fpizlo@apple.com> + + DFG ConvertThis emits slow code when the source node is known to be, + but not predicted to be, a final object + https://bugs.webkit.org/show_bug.cgi?id=70466 + + Reviewed by Oliver Hunt. + + Added a new case in ConvertThis compilation. + + * dfg/DFGSpeculativeJIT32_64.cpp: + (JSC::DFG::SpeculativeJIT::compile): + * dfg/DFGSpeculativeJIT64.cpp: + (JSC::DFG::SpeculativeJIT::compile): + +2011-10-19 Filip Pizlo <fpizlo@apple.com> + + Optimization triggers in the old JIT may sometimes fire repeatedly even + though there is no optimization to be done + https://bugs.webkit.org/show_bug.cgi?id=70467 + + Reviewed by Oliver Hunt. + + If optimize_from_ret does nothing, it delays the next optimization trigger. + This is performance-neutral. + + * jit/JITStubs.cpp: + (JSC::DEFINE_STUB_FUNCTION): + * runtime/Heuristics.cpp: + (JSC::Heuristics::initializeHeuristics): + +2011-10-19 Yuqiang Xian <yuqiang.xian@intel.com> + + DFG JIT 32_64 - remove unnecessary double unboxings in fillDouble/fillSpeculateDouble + https://bugs.webkit.org/show_bug.cgi?id=70460 + + Reviewed by Filip Pizlo. + + As pointed out by Gavin in bug #70418, when a value is already in memory + we can avoid loading it to two GPRs at first and then unboxing them to a FPR. + This gives 9% improvement on Kraken if without the change in bug #70418, + and 1% if based on the code with bug #70418 change. + Performance is neutral in V8 and SunSpider. + + * dfg/DFGJITCodeGenerator32_64.cpp: + (JSC::DFG::JITCodeGenerator::fillDouble): + * dfg/DFGSpeculativeJIT32_64.cpp: + (JSC::DFG::SpeculativeJIT::fillSpeculateDouble): + +2011-10-19 Gavin Barraclough <barraclough@apple.com> + + Poisoning of strict caller,arguments inappropriately poisoning "in" + https://bugs.webkit.org/show_bug.cgi?id=63398 + + Reviewed by Oliver Hunt. + + This fixes the problem by correctly implementing the spec - + the error should actually be being thrown from a standard JS getter/setter. + This implements spec correct behaviour for strict mode JS functions & bound + functions, I'll follow up with a patch to do the same for arguments. + + * runtime/JSBoundFunction.cpp: + (JSC::JSBoundFunction::finishCreation): + - Add the poisoned caller/arguments properties. + * runtime/JSBoundFunction.h: + * runtime/JSFunction.cpp: + (JSC::JSFunction::finishCreation): + (JSC::JSFunction::getOwnPropertySlot): + (JSC::JSFunction::getOwnPropertyDescriptor): + (JSC::JSFunction::put): + - If the caller/arguments are accessed on a strict mode function, lazily add the ThrowTypeError getter. + * runtime/JSFunction.h: + * runtime/JSGlobalObject.cpp: + (JSC::JSGlobalObject::createThrowTypeError): + (JSC::JSGlobalObject::visitChildren): + * runtime/JSGlobalObject.h: + (JSC::JSGlobalObject::throwTypeErrorGetterSetter): + - Add a ThrowTypeError type, per ES5 13.2.3. + * runtime/JSGlobalObjectFunctions.cpp: + (JSC::globalFuncThrowTypeError): + * runtime/JSGlobalObjectFunctions.h: + - Implementation of ThrowTypeError. + * runtime/JSObject.cpp: + (JSC::JSObject::initializeGetterSetterProperty): + * runtime/JSObject.h: + - This function adds a new property (must not exist already) that is an initialized getter/setter. + +2011-10-19 Yuqiang Xian <yuqiang.xian@intel.com> + + DFG JIT 32_64 - improve double boxing/unboxing + https://bugs.webkit.org/show_bug.cgi?id=70418 + + Reviewed by Gavin Barraclough. + + Double boxing/unboxing in DFG JIT 32_64 is currently implemented inefficiently, + which tries to exchange data through memory. + On X86 some SSE instructions can help us on such operations with better performance. + This improves 32-bit DFG performance by 29% on Kraken, 7% on SunSpider, + and 2% on V8, tested on Linux X86 (Core i7 Nehalem). + + * assembler/MacroAssemblerX86Common.h: + (JSC::MacroAssemblerX86Common::lshiftPacked): + (JSC::MacroAssemblerX86Common::rshiftPacked): + (JSC::MacroAssemblerX86Common::orPacked): + (JSC::MacroAssemblerX86Common::moveInt32ToPacked): + (JSC::MacroAssemblerX86Common::movePackedToInt32): + * assembler/X86Assembler.h: + (JSC::X86Assembler::movd_rr): + (JSC::X86Assembler::psllq_i8r): + (JSC::X86Assembler::psrlq_i8r): + (JSC::X86Assembler::por_rr): + * dfg/DFGJITCodeGenerator.h: + (JSC::DFG::JITCodeGenerator::boxDouble): + (JSC::DFG::JITCodeGenerator::unboxDouble): + * dfg/DFGJITCodeGenerator32_64.cpp: + (JSC::DFG::JITCodeGenerator::fillDouble): + (JSC::DFG::JITCodeGenerator::fillJSValue): + (JSC::DFG::JITCodeGenerator::nonSpeculativeValueToNumber): + (JSC::DFG::JITCodeGenerator::nonSpeculativeUInt32ToNumber): + (JSC::DFG::JITCodeGenerator::nonSpeculativeKnownConstantArithOp): + (JSC::DFG::JITCodeGenerator::nonSpeculativeBasicArithOp): + * dfg/DFGJITCompiler.h: + (JSC::DFG::JITCompiler::boxDouble): + (JSC::DFG::JITCompiler::unboxDouble): + * dfg/DFGSpeculativeJIT32_64.cpp: + (JSC::DFG::SpeculativeJIT::fillSpeculateDouble): + (JSC::DFG::SpeculativeJIT::convertToDouble): + (JSC::DFG::SpeculativeJIT::compile): + +2011-10-19 Gyuyoung Kim <gyuyoung.kim@samsung.com> + + [EFL] Fix DSO linkage of wtf_efl. + + Unreviewed build fix. + + Need to add -ldl to jsc_efl (requested by dladdr). + + * wtf/CMakeListsEfl.txt: + +2011-10-19 Geoffrey Garen <ggaren@apple.com> + + Removed StringImplBase, fusing it into StringImpl + https://bugs.webkit.org/show_bug.cgi?id=70443 + + Reviewed by Gavin Barraclough. + + * GNUmakefile.list.am: + * JavaScriptCore.gypi: + * JavaScriptCore.order: + * JavaScriptCore.vcproj/WTF/WTF.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * wtf/CMakeLists.txt: + * wtf/text/StringImpl.h: + (WTF::StringImpl::StringImpl): + (WTF::StringImpl::ref): + (WTF::StringImpl::length): + * wtf/text/StringImplBase.h: Removed. + * wtf/wtf.pri: Removed! + +2011-10-19 Mark Hahnenberg <mhahnenberg@apple.com> + + Add getConstructData to the MethodTable + https://bugs.webkit.org/show_bug.cgi?id=70163 + + Reviewed by Geoffrey Garen. + + Adding getConstructData to the MethodTable in order to be able to + remove all calls to getConstructDataVirtual soon. Part of the process + of de-virtualizing JSCell. + + * JavaScriptCore.exp: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * runtime/ClassInfo.h: + +2011-10-18 Oliver Hunt <oliver@apple.com> + + Support CanvasPixelArray in the DFG + https://bugs.webkit.org/show_bug.cgi?id=70384 + + Reviewed by Filip Pizlo. + + Add support for the old CanvasPixelArray optimisations to the + DFG. This removes the regression seen in the DFG when using + a CPA. + + * assembler/MacroAssemblerX86Common.h: + (JSC::MacroAssemblerX86Common::store8): + (JSC::MacroAssemblerX86Common::truncateDoubleToInt32): + * assembler/X86Assembler.h: + (JSC::X86Assembler::movb_rm): + (JSC::X86Assembler::X86InstructionFormatter::oneByteOp8): + * bytecode/PredictedType.cpp: + (JSC::predictionToString): + (JSC::predictionFromClassInfo): + * bytecode/PredictedType.h: + (JSC::isByteArrayPrediction): + * dfg/DFGAbstractState.cpp: + (JSC::DFG::AbstractState::initialize): + (JSC::DFG::AbstractState::execute): + * dfg/DFGNode.h: + (JSC::DFG::Node::shouldSpeculateByteArray): + * dfg/DFGPropagator.cpp: + (JSC::DFG::Propagator::propagateNodePredictions): + (JSC::DFG::Propagator::fixupNode): + (JSC::DFG::Propagator::performNodeCSE): + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::checkArgumentTypes): + (JSC::DFG::compileClampDoubleToByte): + (JSC::DFG::SpeculativeJIT::compilePutByValForByteArray): + (JSC::DFG::SpeculativeJIT::compileGetByValOnByteArray): + * dfg/DFGSpeculativeJIT.h: + * dfg/DFGSpeculativeJIT32_64.cpp: + (JSC::DFG::SpeculativeJIT::compile): + * dfg/DFGSpeculativeJIT64.cpp: + (JSC::DFG::SpeculativeJIT::compile): + * runtime/JSByteArray.h: + (JSC::JSByteArray::offsetOfStorage): + * wtf/ByteArray.cpp: + * wtf/ByteArray.h: + (WTF::ByteArray::offsetOfSize): + (WTF::ByteArray::offsetOfData): + +2011-10-18 Geoffrey Garen <ggaren@apple.com> + + Some rope cleanup following r97827 + https://bugs.webkit.org/show_bug.cgi?id=70398 + + Reviewed by Oliver Hunt. + + 9% speedup on date-format-xparb, neutral overall. + + - Removed RopeImpl*. + - Removed JSString::m_fiberCount, since this can be deduced from other data. + - Renamed a jsString() variant to jsStringFromArguments for clarity. + + * CMakeLists.txt: + * GNUmakefile.list.am: + * JavaScriptCore.order: + * JavaScriptCore.pro: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: Removed RopeImpl*. + + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::compileGetCharCodeAt): + (JSC::DFG::SpeculativeJIT::compileGetByValOnString): + * jit/JITInlineMethods.h: + (JSC::JIT::emitLoadCharacterString): + * jit/JITPropertyAccess.cpp: + (JSC::JIT::stringGetByValStubGenerator): + * jit/JITPropertyAccess32_64.cpp: + (JSC::JIT::stringGetByValStubGenerator): + * jit/SpecializedThunkJIT.h: + (JSC::SpecializedThunkJIT::loadJSStringArgument): + * jit/ThunkGenerators.cpp: + (JSC::stringCharLoad): Use a NULL m_value to signal rope-iness, instead + of testing m_fiberCount, since m_fiberCount is gone now. + + * runtime/JSString.cpp: + (JSC::JSString::RopeBuilder::expand): + (JSC::JSString::visitChildren): + (JSC::JSString::resolveRope): + (JSC::JSString::resolveRopeSlowCase): + (JSC::JSString::outOfMemory): Use a NULL fiber to indicate "last fiber + in the vector" instead of testing m_fiberCount, since m_fiberCount is gone now. + + * runtime/JSString.h: + (JSC::RopeBuilder::JSString): + (JSC::RopeBuilder::finishCreation): + (JSC::RopeBuilder::offsetOfLength): + (JSC::RopeBuilder::isRope): + (JSC::RopeBuilder::string): Removed m_fiberCount. Renamed + jsString => jsStringFromArguments for clarity. + + * runtime/Operations.h: + (JSC::jsStringFromArguments): Renamed. + + * runtime/RopeImpl.cpp: Removed. + * runtime/RopeImpl.h: Removed. + + * runtime/SmallStrings.cpp: + (JSC::SmallStrings::createEmptyString): Switched to StringImpl::empty, + which is slightly faster. + + * runtime/StringPrototype.cpp: + (JSC::stringProtoFuncConcat): Updated for rename. + + * wtf/text/StringImplBase.h: + (WTF::StringImplBase::StringImplBase): Removed the concept of an invalid + StringImpl, since this was only used by RopeImpl, which is now gone. + +2011-10-19 Rafael Antognolli <antognolli@profusion.mobi> + + [EFL] Fix DSO linkage of jsc_efl. + https://bugs.webkit.org/show_bug.cgi?id=70412 + + Unreviewed build fix. + + Need to add -ldl to jsc_efl (requested by dladdr). + + * shell/CMakeListsEfl.txt: + +2011-10-18 Geoffrey Garen <ggaren@apple.com> + + Rolled out last Windows build fix because it was wrong. + +2011-10-18 Geoffrey Garen <ggaren@apple.com> + + Rolled out last Windows build fix because it was wrong. + +2011-10-18 Geoffrey Garen <ggaren@apple.com> + + Try to fix part of the Windows build. + + Export! + +2011-10-18 Geoffrey Garen <ggaren@apple.com> + + Switched ropes from malloc memory to GC memory + https://bugs.webkit.org/show_bug.cgi?id=70364 + + Reviewed by Gavin Barraclough. + + ~1% SunSpider speedup. Neutral elsewhere. Removes one cause for strings + having C++ destructors. + + * heap/MarkStack.cpp: + (JSC::visitChildren): Call the JSString visitChildren function now, + since it's no longer a no-op. + + * runtime/JSString.cpp: + (JSC::JSString::~JSString): Moved this destructor out of line because + it's called virtually, so there's no value to inlining. + + (JSC::JSString::RopeBuilder::expand): Switched RopeBuilder to be a thin + initializing wrapper around JSString. JSString now represents ropes + directly, rather than relying on an underlying malloc object. + + (JSC::JSString::visitChildren): Visit our rope fibers, since they're GC + objects now. + + (JSC::JSString::resolveRope): + (JSC::JSString::resolveRopeSlowCase): + (JSC::JSString::outOfMemory): Updated for operating on JSStrings instead + of malloc objects. + + (JSC::JSString::replaceCharacter): Removed optimizations for substringing + ropes and replacing subsections of ropes. We want to reimplement versions + of these optimizations in the future, but this patch already has good + performance without them. + + * runtime/JSString.h: + (JSC::RopeBuilder::JSString): + (JSC::RopeBuilder::finishCreation): + (JSC::RopeBuilder::createNull): + (JSC::RopeBuilder::create): + (JSC::RopeBuilder::createHasOtherOwner): + (JSC::jsSingleCharacterString): + (JSC::jsSingleCharacterSubstring): + (JSC::jsNontrivialString): + (JSC::jsString): + (JSC::jsSubstring): + (JSC::jsOwnedString): Lots of mechanical changes here. The two important + things are: (1) The fibers in JSString::m_fibers are JSStrings now, not + malloc objects; (2) I simplified the JSString constructor interface to + only accept PassRefPtr<StringImpl>, instead of variations on that like + UString, reducing refcount churn. + + * runtime/JSValue.h: + * runtime/JSValue.cpp: + (JSC::JSValue::toPrimitiveString): Updated this function to return a + JSString instead of a UString, since that's what clients want now. + + * runtime/Operations.cpp: + (JSC::jsAddSlowCase): + * runtime/Operations.h: + (JSC::jsString): + * runtime/SmallStrings.cpp: + (JSC::SmallStrings::createEmptyString): Updated for interface changes above. + + * runtime/StringConstructor.cpp: + (JSC::constructWithStringConstructor): + * runtime/StringObject.h: + (JSC::StringObject::create): Don't create a new JSString if we already + have a JSString. + + * runtime/StringPrototype.cpp: + (JSC::stringProtoFuncConcat): Updated for interface changes above. + +2011-10-18 Gavin Barraclough <barraclough@apple.com> + + Errrk, fix partial commit of r97825! + + * runtime/DatePrototype.cpp: + (JSC::dateProtoFuncToISOString): + +2011-10-18 Gavin Barraclough <barraclough@apple.com> + + Date.prototype.toISOString fails to throw exception + https://bugs.webkit.org/show_bug.cgi?id=70394 + + Reviewed by Sam Weinig. + + * runtime/DatePrototype.cpp: + (JSC::dateProtoFuncToISOString): + - Should throw a range error if the internal value is not finite. + +2011-10-18 Mark Hahnenberg <mhahnenberg@apple.com> + + Rename static put to putByIndex + https://bugs.webkit.org/show_bug.cgi?id=70281 + + Reviewed by Geoffrey Garen. + + Renaming versions of deleteProperty that use an unsigned as the property + name to "deletePropertyByIndex" in preparation for adding them to the + MethodTable, which requires unique names for each method. + + * dfg/DFGOperations.cpp: + (JSC::DFG::putByVal): + * jit/JITStubs.cpp: + (JSC::DEFINE_STUB_FUNCTION): + * runtime/Arguments.cpp: + (JSC::Arguments::putVirtual): + (JSC::Arguments::putByIndex): + * runtime/Arguments.h: + * runtime/ArrayPrototype.cpp: + (JSC::arrayProtoFuncMap): + * runtime/JSArray.cpp: + (JSC::JSArray::put): + (JSC::JSArray::putVirtual): + (JSC::JSArray::putByIndex): + * runtime/JSArray.h: + * runtime/JSByteArray.cpp: + (JSC::JSByteArray::putVirtual): + (JSC::JSByteArray::putByIndex): + * runtime/JSByteArray.h: + * runtime/JSCell.cpp: + (JSC::JSCell::putVirtual): + (JSC::JSCell::putByIndex): + * runtime/JSCell.h: + * runtime/JSNotAnObject.cpp: + (JSC::JSNotAnObject::putVirtual): + (JSC::JSNotAnObject::putByIndex): + * runtime/JSNotAnObject.h: + * runtime/JSObject.cpp: + (JSC::JSObject::putVirtual): + (JSC::JSObject::putByIndex): + * runtime/JSObject.h: + * runtime/RegExpConstructor.cpp: + (JSC::RegExpMatchesArray::fillArrayInstance): + * runtime/RegExpMatchesArray.h: + (JSC::RegExpMatchesArray::putVirtual): + (JSC::RegExpMatchesArray::putByIndex): + +2011-10-18 Gavin Barraclough <barraclough@apple.com> + + Array.prototype methods missing exception checks + https://bugs.webkit.org/show_bug.cgi?id=70360 + + Reviewed by Geoff Garen. + + Missing exception checks after calls to the static getProperty helper, + these may result in the wrong exception being thrown (or an ASSERT being hit, + as is currently the case running test-262). + + No performance impact. + + * runtime/ArrayPrototype.cpp: + (JSC::arrayProtoFuncConcat): + (JSC::arrayProtoFuncReverse): + (JSC::arrayProtoFuncShift): + (JSC::arrayProtoFuncSlice): + (JSC::arrayProtoFuncSplice): + (JSC::arrayProtoFuncUnShift): + (JSC::arrayProtoFuncReduce): + (JSC::arrayProtoFuncReduceRight): + (JSC::arrayProtoFuncIndexOf): + (JSC::arrayProtoFuncLastIndexOf): + +2011-10-18 Adam Barth <abarth@webkit.org> + + Always enable ENABLE(XPATH) + https://bugs.webkit.org/show_bug.cgi?id=70217 + + Reviewed by Eric Seidel. + + * Configurations/FeatureDefines.xcconfig: + +2011-10-18 Gavin Barraclough <barraclough@apple.com> + + Indexed arguments on the Arguments object should be enumerable. + https://bugs.webkit.org/show_bug.cgi?id=70302 + + Reviewed by Sam Weinig. + + See ECMA-262 5.1 chapter 10.6 step 11b. + This is visible through a number of means, including Object.keys, Object.getOwnPropertyDescriptor, and operator in. + + * runtime/Arguments.cpp: + (JSC::Arguments::getOwnPropertyDescriptor): + - The 'enumerable' property should be true for indexed arguments. + (JSC::Arguments::getOwnPropertyNames): + - Don't guard the adding of indexed properties with 'IncludeDontEnumProperties'. + +2011-10-18 Gustavo Noronha Silva <gns@gnome.org> + + Fix distcheck. + + * GNUmakefile.list.am: fix a typo and add a missing header to the + list. + +2011-10-18 Balazs Kelemen <kbalazs@webkit.org> + + ParallelJobs: maximum number of threads should be determined dynamically + https://bugs.webkit.org/show_bug.cgi?id=68540 + + Reviewed by Zoltan Herczeg. + + Add logic to determine the number of cores and use this as + the maximum number of threads. The implementation currently + covers Linux, Darwin, Windows, AIX, Solaris, OpenBSD and NetBSD. + The patch was tested on Linux, Mac and Windows which was enough to + cover all code path. It should work on the rest accoring to the + documentation of those OS's. The hard coded constant is still used + on uncovered OS's which should be fixed in the future. + + * wtf/ParallelJobs.h: Removed the default value of the requestedJobNumber + argument because clients should always fill it and the 0 default value + was incorrect anyway. + (WTF::ParallelJobs::ParallelJobs): + * wtf/ParallelJobsGeneric.cpp: + (WTF::ParallelEnvironment::determineMaxNumberOfParallelThreads): + * wtf/ParallelJobsGeneric.h: + (WTF::ParallelEnvironment::ParallelEnvironment): + +2011-10-17 Gavin Barraclough <barraclough@apple.com> + + Reverted r997709, this caused test failures. + + * jit/JITStubs.cpp: + (JSC::DEFINE_STUB_FUNCTION): + * runtime/JSObject.cpp: + (JSC::JSObject::hasProperty): + (JSC::JSObject::hasOwnProperty): + +2011-10-17 Ryosuke Niwa <rniwa@webkit.org> + + Rename deregister* to unregister* + https://bugs.webkit.org/show_bug.cgi?id=70272 + + Reviewed by Darin Adler. + + Renamed deregisterWeakMap to unregisterWeakMap. + + * runtime/JSGlobalObject.h: + (JSC::JSGlobalObject::unregisterWeakMap): + +2011-10-17 Gavin Barraclough <barraclough@apple.com> + + Poisoning of strict caller/arguments inappropriately poisoning "in" + https://bugs.webkit.org/show_bug.cgi?id=63398 + + Reviewed by Sam Weinig. + + The problem here is that the has[Own]Property methods get the slot rather than + the descriptor, and getting the slot may cause the property to be eagerly accessed. + + * jit/JITStubs.cpp: + (JSC::DEFINE_STUB_FUNCTION): + - We don't expect hasProperty to ever throw. If it does, it won't get caught + (since it is after the exception check), so ASSERT to guard against this. + * runtime/JSObject.cpp: + (JSC::JSObject::hasProperty): + (JSC::JSObject::hasOwnProperty): + - These methods should not check for the presence of the descriptor; never get the value. + +2011-10-17 Gavin Barraclough <barraclough@apple.com> + + Exception ordering in String.prototype.replace + https://bugs.webkit.org/show_bug.cgi?id=70290 + + If pattern is not a regexp, it should be converted toString before the replacement value has it's toString conversion called. + + Reviewed by Oliver Hunt. + + * runtime/StringPrototype.cpp: + (JSC::stringProtoFuncReplace): + +2011-10-17 Filip Pizlo <fpizlo@apple.com> + + DFG bytecode parser should understand inline stacks + https://bugs.webkit.org/show_bug.cgi?id=70278 + + Reviewed by Oliver Hunt. + + The DFG bytecode parser is now capable of parsing multiple code blocks at + once. This remains turned off since not all inlining functionality is + implemented. + + This required making a few changes elsewhere in the system. The bytecode + parser now may do some of the same things that the bytecode generator does, + like allocating constants and identifiers. Basic block linking relies on + bytecode indices, which are only meaningful within the context of one basic + block. This is fine, so long as linking is done eagerly whenever switching + from one code block to another. + + * bytecode/CodeOrigin.h: + (JSC::CodeOrigin::CodeOrigin): + * bytecompiler/BytecodeGenerator.h: + * dfg/DFGBasicBlock.h: + * dfg/DFGByteCodeParser.cpp: + (JSC::DFG::ByteCodeParser::ByteCodeParser): + (JSC::DFG::ByteCodeParser::get): + (JSC::DFG::ByteCodeParser::set): + (JSC::DFG::ByteCodeParser::getThis): + (JSC::DFG::ByteCodeParser::setThis): + (JSC::DFG::ByteCodeParser::currentCodeOrigin): + (JSC::DFG::ByteCodeParser::getPrediction): + (JSC::DFG::ByteCodeParser::makeSafe): + (JSC::DFG::ByteCodeParser::makeDivSafe): + (JSC::DFG::ByteCodeParser::InlineStackEntry::executable): + (JSC::DFG::ByteCodeParser::InlineStackEntry::~InlineStackEntry): + (JSC::DFG::ByteCodeParser::InlineStackEntry::remapOperand): + (JSC::DFG::ByteCodeParser::parseBlock): + (JSC::DFG::ByteCodeParser::linkBlock): + (JSC::DFG::ByteCodeParser::linkBlocks): + (JSC::DFG::ByteCodeParser::setupPredecessors): + (JSC::DFG::ByteCodeParser::buildOperandMapsIfNecessary): + (JSC::DFG::ByteCodeParser::InlineStackEntry::InlineStackEntry): + (JSC::DFG::ByteCodeParser::parseCodeBlock): + (JSC::DFG::ByteCodeParser::parse): + * dfg/DFGGraph.h: + (JSC::DFG::GetBytecodeBeginForBlock::GetBytecodeBeginForBlock): + (JSC::DFG::GetBytecodeBeginForBlock::operator()): + (JSC::DFG::Graph::blockIndexForBytecodeOffset): + * dfg/DFGNode.h: + * runtime/Identifier.h: + (JSC::IdentifierMapIndexHashTraits::emptyValue): + * runtime/JSValue.h: + * wtf/StdLibExtras.h: + (WTF::binarySearchWithFunctor): + +2011-10-17 Gavin Barraclough <barraclough@apple.com> + + Incorrect behavior from String match/search & undefined pattern + https://bugs.webkit.org/show_bug.cgi?id=70286 + + Reviewed by Sam weinig. + + * runtime/StringPrototype.cpp: + (JSC::stringProtoFuncMatch): + - In case of undefined, pattern is "". + (JSC::stringProtoFuncSearch): + - In case of undefined, pattern is "". + +2011-10-17 Gavin Barraclough <barraclough@apple.com> + + https://bugs.webkit.org/show_bug.cgi?id=70207 + After deleting __defineSetter__, it is absent but appears in name list + + Reviewed by Darin Adler. + + * runtime/JSObject.cpp: + (JSC::JSObject::getOwnPropertyNames): + - This should check whether static functions have been reified. + +2011-10-17 Geoffrey Garen <ggaren@apple.com> + + Mac build fix. + + * JavaScriptCore.exp: Export! + +2011-10-17 Geoffrey Garen <ggaren@apple.com> + + Windows build fix. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Export! + +2011-10-17 Geoffrey Garen <ggaren@apple.com> + + Windows build fix. + + * heap/HandleStack.cpp: Added a missing #include. + +2011-10-17 Geoffrey Garen <ggaren@apple.com> + + Windows build fix. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Removed no + longer existant symbol. + + * heap/MarkStack.cpp: + (JSC::MarkStackArray::shrinkAllocation): Cast to the right type. + +2011-10-17 Geoffrey Garen <ggaren@apple.com> + + Simplified GC marking logic + https://bugs.webkit.org/show_bug.cgi?id=70258 + + Reviewed by Filip Pizlo. + + No perf. change. + + This is a first step toward GC allocating string backing stores, starting + with ropes. It also enables future simplifications and optimizations. + + - Replaced some complex mark stack logic with a simple linear stack of + JSCell pointers. + + - Replaced logic for short-circuiting marking based on JSType and/or + Structure flags with special cases for object, array, and string. + + - Fiddled with inlining for better codegen. + + * JavaScriptCore.exp: + * heap/HandleStack.cpp: Build! + + * heap/Heap.cpp: + (JSC::Heap::Heap): Provide more vptrs to SlotVisitor, for use in marking. + + * heap/HeapRootVisitor.h: Removed unused functions that no longer build. + + * heap/MarkStack.cpp: + (JSC::MarkStackArray::MarkStackArray): + (JSC::MarkStackArray::~MarkStackArray): + (JSC::MarkStackArray::expand): + (JSC::MarkStackArray::shrinkAllocation): + (JSC::MarkStack::reset): + (JSC::visitChildren): + (JSC::SlotVisitor::drain): + * heap/MarkStack.h: + (JSC::MarkStack::MarkStack): + (JSC::MarkStack::~MarkStack): + (JSC::MarkStackArray::append): + (JSC::MarkStackArray::removeLast): + (JSC::MarkStackArray::isEmpty): + (JSC::MarkStack::append): + (JSC::MarkStack::appendUnbarrieredPointer): + (JSC::MarkStack::internalAppend): Replaced complex mark set logic with + simple linear stack. + + * heap/SlotVisitor.h: + (JSC::SlotVisitor::SlotVisitor): Updated for above changes. + + * runtime/JSArray.cpp: + (JSC::JSArray::visitChildren): + * runtime/JSArray.h: + * runtime/JSObject.cpp: + (JSC::JSObject::visitChildren): + * runtime/JSObject.h: Don't inline visitChildren; it's too big. + + * runtime/Structure.h: + (JSC::MarkStack::internalAppend): Nixed the short-circuit for CompoundType + because it prevented strings from owning GC pointers. + + * runtime/WriteBarrier.h: + (JSC::MarkStack::appendValues): No need to validate; internalAppend will + do that for us. + +2011-10-17 Adam Roben <aroben@apple.com> + + Windows build fix after r97536, part 3 + + * runtime/JSAPIValueWrapper.h: + * runtime/JSObject.h: + Use JS_EXPORTDATA to export the s_info members. + +2011-10-17 Adam Roben <aroben@apple.com> + + Interpreter build fix after r97564 + + * runtime/Executable.cpp: + (JSC::FunctionExecutable::compileForCallInternal): + (JSC::FunctionExecutable::compileForConstructInternal): + Moved declaration of globalData variable into ENABLE(JIT) blocks, since it is only used + there. + +2011-10-17 Adam Roben <aroben@apple.com> + + Windows build fix after r97536, part 2 + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Added back + JSC::setUpStaticFunctionSlot with its new mangled name. SOrted the rest of the file while I + was at it. + +2011-10-17 Adam Roben <aroben@apple.com> + + Windows build fix after r97536 + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Removed export of + JSC::setUpStaticFunctionSlot, which no longer exists. Also removed incorrect exports of + s_info members, which need to be exported via JS_EXPORTDATA instead. + +2011-10-17 Patrick Gansterer <paroga@webkit.org> + + Interpreter build fix after r97436, r97506, r97532 and r97537. + + * interpreter/Interpreter.cpp: + (JSC::Interpreter::privateExecute): + +2011-10-16 Adam Barth <abarth@webkit.org> + + Always disable ENABLE(ON_FIRST_TEXTAREA_FOCUS_SELECT_ALL) and delete associated code + https://bugs.webkit.org/show_bug.cgi?id=70216 + + Reviewed by Eric Seidel. + + * wtf/Platform.h: + +2011-10-16 Noel Gordon <noel.gordon@gmail.com> + + [chromium] Remove PageAllocatorSymbian.h, OSAllocatorSymbian.cpp, gtk/ThreadingGtk.cpp from gyp project files + https://bugs.webkit.org/show_bug.cgi?id=70205 + + Reviewed by James Robinson. + + wtf/PageAllocatorSymbian.h and wtf/OSAllocatorSymbian.cpp were removed in r97557. + wtf/gtk/ThreadingGtk.cpp was removed in r97269. + + * JavaScriptCore.gypi: + +2011-10-16 Adam Barth <abarth@webkit.org> + + Always enable ENABLE(DOM_STORAGE) + https://bugs.webkit.org/show_bug.cgi?id=70189 + + Reviewed by Eric Seidel. + + * Configurations/FeatureDefines.xcconfig: + +2011-10-15 Dan Horák <dan@danny.cz> + + The s390 and s390x architectures both use 64-bit double type + that conforms to the IEEE-754 standard. + + https://bugs.webkit.org/show_bug.cgi?id=69940 + + Reviewed by Gavin Barraclough. + + * wtf/dtoa/utils.h: + +2011-10-14 Filip Pizlo <fpizlo@apple.com> + + FunctionExecutable should expose the ability to create unattached FunctionCodeBlocks + https://bugs.webkit.org/show_bug.cgi?id=70157 + + Reviewed by Geoff Garen. + + Added FunctionExecutable::produceCodeBlockFor() and rewired compileForCallInternal() + and compileForConstructInternal() to use this method. This required more cleanly + exposing some of CodeBlock's tiering functionality and moving the CompilationKind + enum to Executable.h, as this was the easiest way to make it available to the + declarations/definitions of CodeBlock, FunctionExecutable, and BytecodeGenerator. + + * bytecode/CodeBlock.cpp: + (JSC::CodeBlock::copyDataFrom): + (JSC::CodeBlock::copyDataFromAlternative): + * bytecode/CodeBlock.h: + (JSC::CodeBlock::setAlternative): + * bytecompiler/BytecodeGenerator.h: + * runtime/Executable.cpp: + (JSC::EvalExecutable::compileInternal): + (JSC::ProgramExecutable::compileInternal): + (JSC::FunctionExecutable::produceCodeBlockFor): + (JSC::FunctionExecutable::compileForCallInternal): + (JSC::FunctionExecutable::compileForConstructInternal): + * runtime/Executable.h: + (JSC::FunctionExecutable::codeBlockFor): + +2011-10-15 Laszlo Gombos <laszlo.1.gombos@nokia.com> + + [Qt] [Symbian] Remove support for the Symbian platform for the QtWebKit port + https://bugs.webkit.org/show_bug.cgi?id=69920 + + Reviewed by Kenneth Rohde Christiansen. + + * JavaScriptCore.pri: + * JavaScriptCore.pro: + * heap/MarkStack.h: + (JSC::::shrinkAllocation): + * jit/ExecutableAllocator.cpp: + * jit/ExecutableAllocator.h: + (JSC::ExecutableAllocator::cacheFlush): + * jit/JITStubs.cpp: + * jsc.pro: + * runtime/ArrayPrototype.cpp: + (JSC::arrayProtoFuncToString): + * runtime/DatePrototype.cpp: + (JSC::formatLocaleDate): + * runtime/StringPrototype.cpp: + (JSC::stringProtoFuncLastIndexOf): + * runtime/TimeoutChecker.cpp: + (JSC::getCPUTime): + * wtf/Assertions.cpp: + * wtf/Assertions.h: + * wtf/Atomics.h: + * wtf/MathExtras.h: + * wtf/OSAllocator.h: + (WTF::OSAllocator::decommitAndRelease): + * wtf/OSAllocatorSymbian.cpp: Removed. + * wtf/OSRandomSource.cpp: + (WTF::cryptographicallyRandomValuesFromOS): + * wtf/PageAllocation.h: + * wtf/PageAllocatorSymbian.h: Removed. + * wtf/PageBlock.cpp: + * wtf/Platform.h: + * wtf/StackBounds.cpp: + * wtf/wtf.pri: + +2011-10-15 Yuqiang Xian <yuqiang.xian@intel.com> + + Trivial fix for a missing change in r97512 + https://bugs.webkit.org/show_bug.cgi?id=70166 + + Reviewed by Gavin Barraclough. + + * dfg/DFGJITCompiler32_64.cpp: + (JSC::DFG::JITCompiler::link): + +2011-10-14 Mark Hahnenberg <mhahnenberg@apple.com> + + Rename getOwnPropertySlot to getOwnPropertySlotVirtual + https://bugs.webkit.org/show_bug.cgi?id=69810 + + Reviewed by Geoffrey Garen. + + Renamed the virtual version of getOwnPropertySlot to getOwnPropertySlotVirtual + in preparation for when we add the static getOwnPropertySlot to the MethodTable + in ClassInfo. + + Also added a few static getOwnPropertySlot functions where they had been overlooked + before (especially in CodeGeneratorJS.pm). + + * API/JSCallbackObject.h: + * API/JSCallbackObjectFunctions.h: + (JSC::::getOwnPropertySlotVirtual): + (JSC::::getOwnPropertySlot): + (JSC::::getOwnPropertyDescriptor): + (JSC::::staticFunctionGetter): + * JavaScriptCore.exp: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * debugger/DebuggerActivation.cpp: + (JSC::DebuggerActivation::getOwnPropertySlotVirtual): + (JSC::DebuggerActivation::getOwnPropertySlot): + * debugger/DebuggerActivation.h: + * runtime/Arguments.cpp: + (JSC::Arguments::getOwnPropertySlotVirtual): + (JSC::Arguments::getOwnPropertySlot): + * runtime/Arguments.h: + * runtime/ArrayConstructor.cpp: + (JSC::ArrayConstructor::getOwnPropertySlotVirtual): + (JSC::ArrayConstructor::getOwnPropertySlot): + * runtime/ArrayConstructor.h: + * runtime/ArrayPrototype.cpp: + (JSC::ArrayPrototype::getOwnPropertySlotVirtual): + * runtime/ArrayPrototype.h: + * runtime/BooleanPrototype.cpp: + (JSC::BooleanPrototype::getOwnPropertySlotVirtual): + * runtime/BooleanPrototype.h: + * runtime/DateConstructor.cpp: + (JSC::DateConstructor::getOwnPropertySlotVirtual): + * runtime/DateConstructor.h: + * runtime/DatePrototype.cpp: + (JSC::DatePrototype::getOwnPropertySlotVirtual): + * runtime/DatePrototype.h: + * runtime/ErrorPrototype.cpp: + (JSC::ErrorPrototype::getOwnPropertySlotVirtual): + * runtime/ErrorPrototype.h: + * runtime/JSActivation.cpp: + (JSC::JSActivation::getOwnPropertySlotVirtual): + * runtime/JSActivation.h: + * runtime/JSArray.cpp: + (JSC::JSArray::getOwnPropertySlotVirtual): + (JSC::JSArray::getOwnPropertySlot): + * runtime/JSArray.h: + * runtime/JSBoundFunction.cpp: + (JSC::JSBoundFunction::getOwnPropertySlotVirtual): + * runtime/JSBoundFunction.h: + * runtime/JSByteArray.cpp: + (JSC::JSByteArray::getOwnPropertySlotVirtual): + * runtime/JSByteArray.h: + * runtime/JSCell.cpp: + (JSC::JSCell::getOwnPropertySlotVirtual): + * runtime/JSCell.h: + * runtime/JSFunction.cpp: + (JSC::JSFunction::getOwnPropertySlotVirtual): + (JSC::JSFunction::getOwnPropertyDescriptor): + (JSC::JSFunction::getOwnPropertyNames): + (JSC::JSFunction::put): + * runtime/JSFunction.h: + * runtime/JSGlobalObject.cpp: + (JSC::JSGlobalObject::getOwnPropertySlotVirtual): + * runtime/JSGlobalObject.h: + (JSC::JSGlobalObject::hasOwnPropertyForWrite): + * runtime/JSNotAnObject.cpp: + (JSC::JSNotAnObject::getOwnPropertySlotVirtual): + * runtime/JSNotAnObject.h: + * runtime/JSONObject.cpp: + (JSC::Stringifier::Holder::appendNextProperty): + (JSC::JSONObject::getOwnPropertySlotVirtual): + (JSC::Walker::walk): + * runtime/JSONObject.h: + * runtime/JSObject.cpp: + (JSC::JSObject::getOwnPropertySlotVirtual): + (JSC::JSObject::getOwnPropertySlot): + (JSC::JSObject::hasOwnProperty): + * runtime/JSObject.h: + (JSC::JSObject::getOwnPropertySlotVirtual): + (JSC::JSCell::fastGetOwnPropertySlot): + (JSC::JSObject::getPropertySlot): + (JSC::JSValue::get): + * runtime/JSStaticScopeObject.cpp: + (JSC::JSStaticScopeObject::getOwnPropertySlotVirtual): + * runtime/JSStaticScopeObject.h: + * runtime/JSString.cpp: + (JSC::JSString::getOwnPropertySlotVirtual): + (JSC::JSString::getOwnPropertySlot): + * runtime/JSString.h: + * runtime/Lookup.h: + (JSC::getStaticPropertySlot): + (JSC::getStaticFunctionSlot): + (JSC::getStaticValueSlot): + * runtime/MathObject.cpp: + (JSC::MathObject::getOwnPropertySlotVirtual): + * runtime/MathObject.h: + * runtime/NumberConstructor.cpp: + (JSC::NumberConstructor::getOwnPropertySlotVirtual): + * runtime/NumberConstructor.h: + * runtime/NumberPrototype.cpp: + (JSC::NumberPrototype::getOwnPropertySlotVirtual): + * runtime/NumberPrototype.h: + * runtime/ObjectConstructor.cpp: + (JSC::ObjectConstructor::getOwnPropertySlotVirtual): + * runtime/ObjectConstructor.h: + * runtime/ObjectPrototype.cpp: + (JSC::ObjectPrototype::getOwnPropertySlotVirtual): + * runtime/ObjectPrototype.h: + * runtime/RegExpConstructor.cpp: + (JSC::RegExpConstructor::getOwnPropertySlotVirtual): + * runtime/RegExpConstructor.h: + * runtime/RegExpMatchesArray.h: + (JSC::RegExpMatchesArray::getOwnPropertySlotVirtual): + * runtime/RegExpObject.cpp: + (JSC::RegExpObject::getOwnPropertySlotVirtual): + * runtime/RegExpObject.h: + * runtime/RegExpPrototype.cpp: + (JSC::RegExpPrototype::getOwnPropertySlotVirtual): + * runtime/RegExpPrototype.h: + * runtime/StringConstructor.cpp: + (JSC::StringConstructor::getOwnPropertySlotVirtual): + * runtime/StringConstructor.h: + * runtime/StringObject.cpp: + (JSC::StringObject::getOwnPropertySlotVirtual): + * runtime/StringObject.h: + * runtime/StringPrototype.cpp: + (JSC::StringPrototype::getOwnPropertySlotVirtual): + * runtime/StringPrototype.h: + +2011-10-14 Gavin Barraclough <baraclough@apple.com> + + Most built-in properties are not deletable + https://bugs.webkit.org/show_bug.cgi?id=61014 + + Reviewed by Filip Pizlo. + + Our static hash tables don't allow for deleting properties. + This is the cause of a bunch of expected failures in LayoutTests/sputnik. + + This fixes the problem by reifying all static functions immediately prior + to the first deletion. Reification is tracked by a flag on the structure, + so properties will no longer 'bounce-back' on later access. + + Theoretically there could probably also be an issue with custom accessor + properties, but we probably do not really require any of these to be + Configurable anyway. I'll follow up with a separate patch to address this. + + * runtime/ClassInfo.h: + (JSC::ClassInfo::hasStaticProperties): + - detects static property tables. + * runtime/JSObject.cpp: + (JSC::JSObject::deleteProperty): + - call reifyStaticFunctions before deletion. + (JSC::JSObject::reifyStaticFunctions): + - If the class has static functions, set them up now. + * runtime/JSObject.h: + (JSC::JSObject::staticFunctionsReified): + - returns true if static functions have been reified, + and as such should no longer be added. + * runtime/Lookup.cpp: + (JSC::setUpStaticFunctionSlot): + - If static functions have been reified do not add. + * runtime/Lookup.h: + (JSC::HashTable::ConstIterator::ConstIterator): + (JSC::HashTable::ConstIterator::operator->): + (JSC::HashTable::ConstIterator::operator*): + (JSC::HashTable::ConstIterator::operator!=): + (JSC::HashTable::ConstIterator::operator++): + (JSC::HashTable::ConstIterator::skipInvalidKeys): + (JSC::HashTable::begin): + (JSC::HashTable::end): + (JSC::getStaticPropertySlot): + (JSC::getStaticPropertyDescriptor): + (JSC::getStaticFunctionSlot): + (JSC::getStaticFunctionDescriptor): + - setUpStaticFunctionSlot may not add, returns a bool. + (JSC::lookupPut): + - remove redundant branch. + * runtime/Structure.cpp: + (JSC::Structure::Structure): + - initialize new flag in constructors. + * runtime/Structure.h: + (JSC::Structure::staticFunctionsReified): + (JSC::Structure::setStaticFunctionsReified): + - added flag + +2011-10-14 Mark Hahnenberg <mhahnenberg@apple.com> + + Rename virtual put to putVirtual + https://bugs.webkit.org/show_bug.cgi?id=69851 + + Reviewed by Darin Adler. + + Renamed virtual versions of put to putVirtual in prepration for + adding the static put to the MethodTable in ClassInfo since the + compiler gets mad if the virtual and static versions have the same + name. + + * API/JSCallbackObject.h: + * API/JSCallbackObjectFunctions.h: + (JSC::::putVirtual): + * API/JSObjectRef.cpp: + (JSObjectSetProperty): + (JSObjectSetPropertyAtIndex): + * JavaScriptCore.exp: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * debugger/DebuggerActivation.cpp: + (JSC::DebuggerActivation::putVirtual): + (JSC::DebuggerActivation::put): + * debugger/DebuggerActivation.h: + * dfg/DFGOperations.cpp: + (JSC::DFG::putByVal): + * interpreter/Interpreter.cpp: + (JSC::Interpreter::execute): + * jit/JITStubs.cpp: + (JSC::DEFINE_STUB_FUNCTION): + * jsc.cpp: + (GlobalObject::finishCreation): + * runtime/Arguments.cpp: + (JSC::Arguments::putVirtual): + * runtime/Arguments.h: + * runtime/ArrayPrototype.cpp: + (JSC::putProperty): + (JSC::arrayProtoFuncConcat): + (JSC::arrayProtoFuncPush): + (JSC::arrayProtoFuncReverse): + (JSC::arrayProtoFuncShift): + (JSC::arrayProtoFuncSlice): + (JSC::arrayProtoFuncSort): + (JSC::arrayProtoFuncSplice): + (JSC::arrayProtoFuncUnShift): + (JSC::arrayProtoFuncFilter): + (JSC::arrayProtoFuncMap): + * runtime/JSActivation.cpp: + (JSC::JSActivation::putVirtual): + * runtime/JSActivation.h: + * runtime/JSArray.cpp: + (JSC::JSArray::putVirtual): + (JSC::JSArray::putSlowCase): + (JSC::JSArray::push): + (JSC::JSArray::shiftCount): + (JSC::JSArray::unshiftCount): + * runtime/JSArray.h: + * runtime/JSByteArray.cpp: + (JSC::JSByteArray::putVirtual): + * runtime/JSByteArray.h: + * runtime/JSCell.cpp: + (JSC::JSCell::putVirtual): + (JSC::JSCell::put): + * runtime/JSCell.h: + * runtime/JSFunction.cpp: + (JSC::JSFunction::putVirtual): + * runtime/JSFunction.h: + * runtime/JSGlobalObject.cpp: + (JSC::JSGlobalObject::putVirtual): + (JSC::JSGlobalObject::putWithAttributes): + * runtime/JSGlobalObject.h: + * runtime/JSNotAnObject.cpp: + (JSC::JSNotAnObject::putVirtual): + * runtime/JSNotAnObject.h: + * runtime/JSONObject.cpp: + (JSC::Walker::walk): + * runtime/JSObject.cpp: + (JSC::JSObject::putVirtual): + (JSC::JSObject::put): + (JSC::JSObject::defineOwnProperty): + * runtime/JSObject.h: + (JSC::JSValue::put): + * runtime/JSStaticScopeObject.cpp: + (JSC::JSStaticScopeObject::putVirtual): + * runtime/JSStaticScopeObject.h: + * runtime/Lookup.h: + (JSC::lookupPut): + * runtime/ObjectPrototype.cpp: + (JSC::ObjectPrototype::putVirtual): + * runtime/ObjectPrototype.h: + * runtime/RegExpConstructor.cpp: + (JSC::RegExpMatchesArray::fillArrayInstance): + (JSC::RegExpConstructor::putVirtual): + * runtime/RegExpConstructor.h: + * runtime/RegExpMatchesArray.h: + (JSC::RegExpMatchesArray::putVirtual): + * runtime/RegExpObject.cpp: + (JSC::RegExpObject::putVirtual): + * runtime/RegExpObject.h: + * runtime/StringObject.cpp: + (JSC::StringObject::putVirtual): + * runtime/StringObject.h: + * runtime/StringPrototype.cpp: + (JSC::stringProtoFuncSplit): + +2011-10-13 Filip Pizlo <fpizlo@apple.com> + + Reflective Arguments retrieval should be hardened for the + possibility of inlining + https://bugs.webkit.org/show_bug.cgi?id=70068 + + Reviewed by Oliver Hunt. + + CodeBlock can now track, as part of its RareData, the virtual inline + stack at callsites. CallFrame walking can now rematerialize "inline" + CallFrames by combining the meta-data in CodeBlock with the information + already in the JS stack. Arguments can now safely retrieve the + arguments from inline CallFrames. + + The DFG already had the notion of a "CodeOrigin" in preparation for + inlining. This notion will now be saved into the CodeBlock, if the DFG + had done inlining. So, CodeOrigin has been moved to bytecode/ and has + been changed to behave more like a struct since that is how it's + meant to be used. + + * GNUmakefile.list.am: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * bytecode/CodeBlock.h: + (JSC::CodeBlock::inlineCallFrames): + (JSC::CodeBlock::codeOrigins): + (JSC::CodeBlock::hasCodeOrigins): + (JSC::CodeBlock::codeOriginForReturn): + * bytecode/CodeOrigin.h: Added. + (JSC::CodeOrigin::CodeOrigin): + (JSC::CodeOrigin::isSet): + (JSC::getCallReturnOffsetForCodeOrigin): + * dfg/DFGJITCompiler.cpp: + (JSC::DFG::JITCompiler::link): + * dfg/DFGNode.h: + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::compile): + * dfg/DFGSpeculativeJIT32_64.cpp: + (JSC::DFG::SpeculativeJIT::compile): + * dfg/DFGSpeculativeJIT64.cpp: + (JSC::DFG::SpeculativeJIT::compile): + * interpreter/CallFrame.cpp: + (JSC::CallFrame::isInlineCallFrame): + (JSC::CallFrame::trueCallerFrame): + * interpreter/CallFrame.h: + (JSC::ExecState::inlineCallFrame): + (JSC::ExecState::setInlineCallFrame): + (JSC::ExecState::isInlineCallFrame): + (JSC::ExecState::trueCallerFrame): + * interpreter/Interpreter.cpp: + (JSC::Interpreter::findFunctionCallFrame): + * interpreter/Register.h: + (JSC::Register::operator=): + (JSC::Register::inlineCallFrame): + * runtime/Arguments.h: + (JSC::Arguments::getArgumentsData): + (JSC::Arguments::finishCreationButDontCopyRegisters): + (JSC::Arguments::finishCreation): + (JSC::Arguments::finishCreationAndCopyRegisters): + * runtime/Executable.h: + (JSC::FunctionExecutable::parameterCount): + +2011-10-14 Mark Hahnenberg <mhahnenberg@apple.com> + + Rename virtual deleteProperty to deletePropertyVirtual + https://bugs.webkit.org/show_bug.cgi?id=69884 + + Reviewed by Darin Adler. + + Renamed virtual versions of deleteProperty to deletePropertyVirtual in prepration for + adding the static deleteProperty to the MethodTable in ClassInfo since the + compiler gets mad if the virtual and static versions have the same name. + + * API/JSCallbackObject.h: + * API/JSCallbackObjectFunctions.h: + (JSC::::deletePropertyVirtual): + (JSC::::deleteProperty): + * API/JSObjectRef.cpp: + (JSObjectDeleteProperty): + * JavaScriptCore.exp: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * debugger/DebuggerActivation.cpp: + (JSC::DebuggerActivation::deletePropertyVirtual): + (JSC::DebuggerActivation::deleteProperty): + * debugger/DebuggerActivation.h: + * jit/JITStubs.cpp: + (JSC::DEFINE_STUB_FUNCTION): + * runtime/Arguments.cpp: + (JSC::Arguments::deletePropertyVirtual): + * runtime/Arguments.h: + * runtime/ArrayPrototype.cpp: + (JSC::arrayProtoFuncPop): + (JSC::arrayProtoFuncReverse): + (JSC::arrayProtoFuncShift): + (JSC::arrayProtoFuncSplice): + (JSC::arrayProtoFuncUnShift): + * runtime/JSActivation.cpp: + (JSC::JSActivation::deletePropertyVirtual): + * runtime/JSActivation.h: + * runtime/JSArray.cpp: + (JSC::JSArray::deletePropertyVirtual): + (JSC::JSArray::deleteProperty): + * runtime/JSArray.h: + * runtime/JSCell.cpp: + (JSC::JSCell::deletePropertyVirtual): + (JSC::JSCell::deleteProperty): + * runtime/JSCell.h: + * runtime/JSFunction.cpp: + (JSC::JSFunction::deletePropertyVirtual): + * runtime/JSFunction.h: + * runtime/JSNotAnObject.cpp: + (JSC::JSNotAnObject::deletePropertyVirtual): + * runtime/JSNotAnObject.h: + * runtime/JSONObject.cpp: + (JSC::Walker::walk): + * runtime/JSObject.cpp: + (JSC::JSObject::deletePropertyVirtual): + (JSC::JSObject::deleteProperty): + (JSC::JSObject::defineOwnProperty): + * runtime/JSObject.h: + * runtime/JSVariableObject.cpp: + (JSC::JSVariableObject::deletePropertyVirtual): + * runtime/JSVariableObject.h: + * runtime/RegExpMatchesArray.h: + (JSC::RegExpMatchesArray::deletePropertyVirtual): + * runtime/StrictEvalActivation.cpp: + (JSC::StrictEvalActivation::deletePropertyVirtual): + * runtime/StrictEvalActivation.h: + * runtime/StringObject.cpp: + (JSC::StringObject::deletePropertyVirtual): + * runtime/StringObject.h: + +2011-10-14 Peter Beverloo <peter@chromium.org> + + [Chromium] Inherit settings from Chromium's envsetup.sh, address a NDK todo + https://bugs.webkit.org/show_bug.cgi?id=70028 + + Reviewed by Adam Barth. + + * JavaScriptCore.gyp/JavaScriptCore.gyp: + +2011-10-14 Yuqiang Xian <yuqiang.xian@intel.com> + + DFG JIT 32_64 - Performance fix for ResolveGlobal + https://bugs.webkit.org/show_bug.cgi?id=70096 + + Reviewed by Gavin Barraclough. + + Structure check of global object should be a pointer comparison + instead of a tag and payload pair comparison. This fix improves + SunSpider by 7% on Linux 32, with bitops-bitwise-and improved by 4.75X. + Also two trivial fixes for successful 32-bit build are included. + + * dfg/DFGSpeculativeJIT.cpp: + * dfg/DFGSpeculativeJIT32_64.cpp: + (JSC::DFG::SpeculativeJIT::compile): + +2011-10-13 Filip Pizlo <fpizlo@apple.com> + + Speculation failures in ValueToInt32 are causing a 2x slow-down + in Kraken/stanford-crypto-pbkdf2 + https://bugs.webkit.org/show_bug.cgi?id=70089 + + Reviewed by Gavin Barraclough. + + If we can't truncate to Int32 using machine code, then don't fail + speculation. Just call JSC::toInt32. + + * dfg/DFGJITCodeGenerator.h: + (JSC::DFG::callOperation): + * dfg/DFGOperations.h: + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::compileValueToInt32): + * dfg/DFGSpeculativeJIT64.cpp: + (JSC::DFG::SpeculativeJIT::compile): + +2011-10-13 Mark Hahnenberg <mhahnenberg@apple.com> + + Rename virtual getConstructData to getConstructDataVirtual + https://bugs.webkit.org/show_bug.cgi?id=69872 + + Reviewed by Geoffrey Garen. + + Renamed virtual getConstructData functions to getConstructDataVirtual to + avoid conflicts when we add static getConstructData to the MethodTable. + + * API/JSCallbackConstructor.cpp: + (JSC::JSCallbackConstructor::getConstructDataVirtual): + * API/JSCallbackConstructor.h: + * API/JSCallbackObject.h: + * API/JSCallbackObjectFunctions.h: + (JSC::::getConstructDataVirtual): + * API/JSObjectRef.cpp: + (JSObjectIsConstructor): + (JSObjectCallAsConstructor): + * JavaScriptCore.exp: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * dfg/DFGOperations.cpp: + * jit/JITStubs.cpp: + (JSC::DEFINE_STUB_FUNCTION): + * runtime/ArrayConstructor.cpp: + (JSC::ArrayConstructor::getConstructDataVirtual): + * runtime/ArrayConstructor.h: + * runtime/BooleanConstructor.cpp: + (JSC::BooleanConstructor::getConstructDataVirtual): + * runtime/BooleanConstructor.h: + * runtime/DateConstructor.cpp: + (JSC::DateConstructor::getConstructDataVirtual): + * runtime/DateConstructor.h: + * runtime/Error.h: + (JSC::StrictModeTypeErrorFunction::getConstructDataVirtual): + * runtime/ErrorConstructor.cpp: + (JSC::ErrorConstructor::getConstructDataVirtual): + * runtime/ErrorConstructor.h: + * runtime/FunctionConstructor.cpp: + (JSC::FunctionConstructor::getConstructDataVirtual): + * runtime/FunctionConstructor.h: + * runtime/JSCell.cpp: + (JSC::JSCell::getConstructDataVirtual): + * runtime/JSCell.h: + (JSC::getConstructData): + * runtime/JSFunction.cpp: + (JSC::JSFunction::getConstructDataVirtual): + * runtime/JSFunction.h: + * runtime/NativeErrorConstructor.cpp: + (JSC::NativeErrorConstructor::getConstructDataVirtual): + * runtime/NativeErrorConstructor.h: + * runtime/NumberConstructor.cpp: + (JSC::NumberConstructor::getConstructDataVirtual): + * runtime/NumberConstructor.h: + * runtime/ObjectConstructor.cpp: + (JSC::ObjectConstructor::getConstructDataVirtual): + * runtime/ObjectConstructor.h: + * runtime/RegExpConstructor.cpp: + (JSC::RegExpConstructor::getConstructDataVirtual): + * runtime/RegExpConstructor.h: + * runtime/StringConstructor.cpp: + (JSC::StringConstructor::getConstructDataVirtual): + * runtime/StringConstructor.h: + +2011-10-13 Filip Pizlo <fpizlo@apple.com> + + Rubber stamped Stephanie Lewis. + + DFG_ENABLE() macro was always returning false. + + * dfg/DFGNode.h: + +2011-10-13 Gavin Barraclough <baraclough@apple.com> + + Speculative build fix for !DFG builds. + + * jit/JIT.cpp: + (JSC::JIT::privateCompile): + +2011-10-13 Oliver Hunt <oliver@apple.com> + + Fix performance of ValueToInt32 node when predicting double + https://bugs.webkit.org/show_bug.cgi?id=70063 + + Reviewed by Filip Pizlo. + + Currently we fail to inline double to int conversion when + performing a ValueToInt32 operation on a value we predict + to be a double. + + * dfg/DFGAbstractState.cpp: + (JSC::DFG::AbstractState::execute): + Apply correct filter for the double prediction path + * dfg/DFGJITCodeGenerator32_64.cpp: + (JSC::DFG::JITCodeGenerator::nonSpeculativeValueToInt32): + * dfg/DFGJITCodeGenerator64.cpp: + (JSC::DFG::JITCodeGenerator::nonSpeculativeValueToInt32): + Support double parameters even when value has been spilled. + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::compileValueToInt32): + Moved old valueToInt32 code to this function, and added + path for double prediction + * dfg/DFGSpeculativeJIT.h: + * dfg/DFGSpeculativeJIT32_64.cpp: + (JSC::DFG::SpeculativeJIT::compile): + * dfg/DFGSpeculativeJIT64.cpp: + (JSC::DFG::SpeculativeJIT::compile): + Made the two implementations of ValueToInt32 call a single + shared compileValueToInt32 function. + +2011-10-13 Chris Marrin <cmarrin@apple.com> + + Sync requestAnimationFrame callback to CVDisplayLink on Mac + https://bugs.webkit.org/show_bug.cgi?id=68911 + + Reviewed by Simon Fraser. + + Add REQUEST_ANIMATION_FRAME_DISPLAY_MONITOR for implementations + that use the DisplayRefreshMonitor logic. + + * wtf/Platform.h: + +2011-10-13 Gavin Barraclough <baraclough@apple.com> + + DFG JIT should not be using ENABLE macro to enable features + https://bugs.webkit.org/show_bug.cgi?id=70060 + + Reviewed by Oliver Hunt. + + The ENABLE macro is only intended to be used to detect features that are configured + in Platform.h. Using its to detect settings defined in other headers is an error. + + The problem is that the ENABLE macro checks if the value is defined, so will silently + return false if you fail to include the header defining the switch. This is not a problem + if (1) the settings are defined in the same header that defines the macro that tests them, + or (2) the header is included everywhere. In the case of ENABLE settings defined in + Platform.h, both are true! To make this clear, add an explicit DFG_ENABLE macro. + + * bytecode/CodeBlock.cpp: + * dfg/DFGByteCodeParser.cpp: + (JSC::DFG::ByteCodeParser::getPrediction): + (JSC::DFG::ByteCodeParser::makeSafe): + * dfg/DFGCapabilities.h: + (JSC::DFG::canCompileOpcode): + * dfg/DFGGraph.cpp: + (JSC::DFG::Graph::predictArgumentTypes): + * dfg/DFGJITCodeGenerator.cpp: + * dfg/DFGJITCodeGenerator.h: + * dfg/DFGJITCompiler.cpp: + (JSC::DFG::JITCompiler::exitSpeculativeWithOSR): + (JSC::DFG::JITCompiler::compileBody): + (JSC::DFG::JITCompiler::link): + * dfg/DFGJITCompiler.h: + (JSC::DFG::JITCompiler::noticeOSREntry): + * dfg/DFGJITCompiler32_64.cpp: + (JSC::DFG::JITCompiler::exitSpeculativeWithOSR): + (JSC::DFG::JITCompiler::compileBody): + (JSC::DFG::JITCompiler::link): + * dfg/DFGNode.h: + * dfg/DFGOSREntry.cpp: + (JSC::DFG::prepareOSREntry): + * dfg/DFGOperations.cpp: + * dfg/DFGOperations.h: + * dfg/DFGPropagator.cpp: + (JSC::DFG::Propagator::fixpoint): + (JSC::DFG::Propagator::propagateArithNodeFlags): + (JSC::DFG::Propagator::propagateArithNodeFlagsForward): + (JSC::DFG::Propagator::propagateArithNodeFlagsBackward): + (JSC::DFG::Propagator::propagateNodePredictions): + (JSC::DFG::Propagator::propagatePredictionsForward): + (JSC::DFG::Propagator::propagatePredictionsBackward): + (JSC::DFG::Propagator::propagatePredictions): + (JSC::DFG::Propagator::toDouble): + (JSC::DFG::Propagator::fixupNode): + (JSC::DFG::Propagator::fixup): + (JSC::DFG::Propagator::startIndexForChildren): + (JSC::DFG::Propagator::endIndexForPureCSE): + (JSC::DFG::Propagator::setReplacement): + (JSC::DFG::Propagator::eliminate): + (JSC::DFG::Propagator::performNodeCSE): + (JSC::DFG::Propagator::localCSE): + (JSC::DFG::Propagator::allocateVirtualRegisters): + (JSC::DFG::Propagator::performBlockCFA): + (JSC::DFG::Propagator::performForwardCFA): + (JSC::DFG::Propagator::globalCFA): + * dfg/DFGScoreBoard.h: + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::compile): + * dfg/DFGSpeculativeJIT.h: + (JSC::DFG::SpeculativeJIT::terminateSpeculativeExecution): + * dfg/DFGSpeculativeJIT32_64.cpp: + (JSC::DFG::SpeculativeJIT::fillSpeculateIntInternal): + (JSC::DFG::SpeculativeJIT::fillSpeculateDouble): + (JSC::DFG::SpeculativeJIT::fillSpeculateCell): + (JSC::DFG::SpeculativeJIT::fillSpeculateBoolean): + (JSC::DFG::SpeculativeJIT::compile): + * dfg/DFGSpeculativeJIT64.cpp: + (JSC::DFG::SpeculativeJIT::fillSpeculateIntInternal): + (JSC::DFG::SpeculativeJIT::fillSpeculateDouble): + (JSC::DFG::SpeculativeJIT::fillSpeculateCell): + (JSC::DFG::SpeculativeJIT::fillSpeculateBoolean): + (JSC::DFG::SpeculativeJIT::compile): + * jit/JIT.cpp: + (JSC::JIT::privateCompile): + +2011-10-13 Gavin Barraclough <baraclough@apple.com> + + terminateSpeculativeExecution for fillSpeculateDouble with DataFormatCell + + Rubber stamped by Filip Pizlo + + This is breaking fast/canvas/canvas-composite-alpha.html on 32_64 DFG JIT. + + * dfg/DFGSpeculativeJIT32_64.cpp: + (JSC::DFG::SpeculativeJIT::fillSpeculateDouble): + * dfg/DFGSpeculativeJIT64.cpp: + (JSC::DFG::SpeculativeJIT::fillSpeculateDouble): + +2011-10-13 Mark Hahnenberg <mhahnenberg@apple.com> + + De-virtualized JSCell::toNumber + https://bugs.webkit.org/show_bug.cgi?id=69858 + + Reviewed by Sam Weinig. + + + Removed JSCallbackObject::toNumber because its no longer necessary since + JSObject::toNumber now suffices since we implicitly add valueOf to an object's + prototype whenever a convertToType callback is provided. + * API/JSCallbackObject.h: + * API/JSCallbackObjectFunctions.h: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + + De-virtualized JSCell::toNumber, JSObject::toNumber, and JSString::toNumber. + * runtime/JSCell.cpp: + (JSC::JSCell::toNumber): + * runtime/JSCell.h: + * runtime/JSObject.h: + * runtime/JSString.h: + + Removed JSNotAnObject::toNumber because its result doesn't matter and it implements + defaultValue, therefore JSObject::toNumber can cover its case. + * runtime/JSNotAnObject.cpp: + * runtime/JSNotAnObject.h: + +2011-10-13 Xianzhu Wang <wangxianzhu@chromium.org> + + Use realloc() to expand/shrink StringBuilder buffer + https://bugs.webkit.org/show_bug.cgi?id=69913 + + Reviewed by Darin Adler. + + * wtf/text/StringBuilder.cpp: + (WTF::StringBuilder::reserveCapacity): + (WTF::StringBuilder::reallocateBuffer): + (WTF::StringBuilder::appendUninitialized): + (WTF::StringBuilder::shrinkToFit): + * wtf/text/StringBuilder.h: + * wtf/text/StringImpl.cpp: + (WTF::StringImpl::reallocate): Added to allow StringBuilder to reallocate the buffer. + * wtf/text/StringImpl.h: + +2011-10-12 Filip Pizlo <fpizlo@apple.com> + + If an Arguments object is being used to copy the arguments, then + make this explicit + https://bugs.webkit.org/show_bug.cgi?id=69995 + + Reviewed by Sam Weinig. + + * interpreter/Interpreter.cpp: + (JSC::Interpreter::retrieveArguments): + * runtime/Arguments.h: + (JSC::Arguments::createAndCopyRegisters): + (JSC::Arguments::finishCreationButDontCopyRegisters): + (JSC::Arguments::finishCreation): + (JSC::Arguments::finishCreationAndCopyRegisters): + +2011-10-12 Filip Pizlo <fpizlo@apple.com> + + DFG CFA does not filter structures aggressively enough. + https://bugs.webkit.org/show_bug.cgi?id=69989 + + Reviewed by Oliver Hunt. + + * dfg/DFGAbstractValue.h: + (JSC::DFG::AbstractValue::clear): + (JSC::DFG::AbstractValue::makeTop): + (JSC::DFG::AbstractValue::clobberStructures): + (JSC::DFG::AbstractValue::set): + (JSC::DFG::AbstractValue::merge): + (JSC::DFG::AbstractValue::filter): + (JSC::DFG::AbstractValue::checkConsistency): + +2011-10-12 Adam Barth <abarth@webkit.org> + + Remove ENABLE(XHTMLMP) and associated code + https://bugs.webkit.org/show_bug.cgi?id=69729 + + Reviewed by David Levin. + + * Configurations/FeatureDefines.xcconfig: + +2011-10-12 Gavin Barraclough <baraclough@apple.com> + + MacroAssemblerX86 8-bit register ops unsafe on CPU(X86) + https://bugs.webkit.org/show_bug.cgi?id=69978 + + Reviewed by Filip Pizlo. + + Certain ops are unsafe if the register passed is esp..edi (will instead test/set the ). + + compare32/test8/test32 Call setCC, which sets an 8-bit register - we can fix this by adding + a couple of xchg instructions. + + branchTest8 with a register argument is also affected. In all cases this is currently used + this is testing a value that is correct to 32 or more bits, so we can simply switch these + to branchTest32 & remove the corresponding branchTest8 (this is desirable anyway, since the + 32-bit form is cheaper to implement on platforms that don't have an 8-bit compare instruction). + + This fixes the remaining fast/js failures with the DFG JIT 32_64. + + * assembler/MacroAssemblerARMv7.h + - removed branchTest8. + * assembler/MacroAssemblerX86Common.h: + (JSC::MacroAssemblerX86Common::compare32): + (JSC::MacroAssemblerX86Common::test8): + (JSC::MacroAssemblerX86Common::test32): + (JSC::MacroAssemblerX86Common::set32): + - added set32 helper that is 'h' register safe. + - removed branchTest8. + * dfg/DFGJITCodeGenerator32_64.cpp: + (JSC::DFG::JITCodeGenerator::nonSpeculativePeepholeBranch): + (JSC::DFG::JITCodeGenerator::nonSpeculativePeepholeStrictEq): + - switch uses of branchTest8 to branchTest32. + * dfg/DFGJITCodeGenerator64.cpp: + (JSC::DFG::JITCodeGenerator::nonSpeculativePeepholeBranch): + (JSC::DFG::JITCodeGenerator::nonSpeculativePeepholeStrictEq): + - switch uses of branchTest8 to branchTest32. + * dfg/DFGSpeculativeJIT32_64.cpp: + (JSC::DFG::SpeculativeJIT::emitBranch): + - switch uses of branchTest8 to branchTest32. + * dfg/DFGSpeculativeJIT64.cpp: + (JSC::DFG::SpeculativeJIT::emitBranch): + - switch uses of branchTest8 to branchTest32. + +2011-10-12 Gavin Barraclough <baraclough@apple.com> + + Errrk, revert accidental commit! + + * wtf/Platform.h: + +2011-10-12 Gavin Barraclough <baraclough@apple.com> + + Unreviewed, re-land changes from #69890, #69903. + + These were reverted due to bug #69897, but #69903 fixed this problem. + + * dfg/DFGJITCodeGenerator.h: + (JSC::DFG::JITCodeGenerator::silentFillGPR): + +2011-10-12 Filip Pizlo <fpizlo@apple.com> + + ValueProfile::computeUpdatedPrediction doesn't merge statistics correctly + https://bugs.webkit.org/show_bug.cgi?id=69906 + + Reviewed by Gavin Barraclough. + + It turns out that the simplest fix is to switch computeUpdatedPredictions() + to using predictionFromValue() combined with mergePrediction(). Doing so + allowed me to kill off weakBuckets and visitWeakReferences(). Hence this + not only fixes a performance bug but kills off a lot of code that I never + liked to begin with. + + This appears to be a 1% win on V8. + + * bytecode/CodeBlock.cpp: + (JSC::CodeBlock::visitAggregate): + * bytecode/CodeBlock.h: + * bytecode/PredictedType.cpp: + (JSC::predictionFromValue): + * bytecode/ValueProfile.cpp: + (JSC::ValueProfile::computeStatistics): + (JSC::ValueProfile::computeUpdatedPrediction): + * bytecode/ValueProfile.h: + (JSC::ValueProfile::classInfo): + (JSC::ValueProfile::numberOfSamples): + (JSC::ValueProfile::isLive): + (JSC::ValueProfile::dump): + +2011-10-12 Mark Hahnenberg <mhahnenberg@apple.com> + + De-virtualize JSCell::toString + https://bugs.webkit.org/show_bug.cgi?id=69677 + + Reviewed by Sam Weinig. + + Removed toString from JSCallbackObject, since it is no + longer necessary since we now implicitly add toString and valueOf + functions to object prototypes when a convertToType callback + is provided, which is now the standard way to override toString + and valueOf in the JSC C API. + * API/JSCallbackObject.h: + * API/JSCallbackObjectFunctions.h: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + + Removed toString from InterruptedExecutionError and + TerminatedExecutionError and replaced it with defaultValue, + which JSObject::toString calls. We'll probably have to de-virtualize + defaultValue eventually, but we'll cross that bridge when we + come to it. + * runtime/ExceptionHelpers.cpp: + (JSC::InterruptedExecutionError::defaultValue): + (JSC::TerminatedExecutionError::defaultValue): + * runtime/ExceptionHelpers.h: + + Removed toString from JSNotAnObject, since its return value doesn't + actually matter and JSObject::toString can cover it. + * runtime/JSNotAnObject.cpp: + * runtime/JSNotAnObject.h: + + De-virtualized JSCell::toString, JSObject::toString and JSString::toString. + Added handling of all cases for JSCell to JSCell::toString. + * runtime/JSObject.h: + * runtime/JSString.h: + * runtime/JSCell.cpp: + (JSC::JSCell::toString): + * runtime/JSCell.h: + +2011-10-12 Oliver Hunt <oliver@apple.com> + + Global stringStructure caches its prototype chain, abandoning a web page + https://bugs.webkit.org/show_bug.cgi?id=69952 + + Reviewed by Filip Pizlo. + + When visiting a structure, we don't keep the prototype chain + alive if we're not the structure for an object type. + + * runtime/Structure.cpp: + (JSC::Structure::visitChildren): + +2011-10-12 Yuqiang Xian <yuqiang.xian@intel.com> + + DFG JIT 32_64 - Fix ArrayPop + https://bugs.webkit.org/show_bug.cgi?id=69918 + + Reviewed by Filip Pizlo. + + The storageLengthGPR is polluted by EmptyValueTag and later used to + index the array, which results in abnormal behaviors in execution. + This fix makes 32_64 DFG pass v8-deltablue and kraken + crypto-sha256-iterative on Linux ia32. + + * assembler/MacroAssemblerX86Common.h: + (JSC::MacroAssemblerX86Common::store32): + * assembler/X86Assembler.h: + (JSC::X86Assembler::movl_i32m): + * dfg/DFGSpeculativeJIT32_64.cpp: + (JSC::DFG::SpeculativeJIT::compile): + +2011-10-12 Gustavo Noronha Silva <gustavo.noronha@collabora.co.uk> + + Fix build with GLib 2.31 + https://bugs.webkit.org/show_bug.cgi?id=69840 + + Reviewed by Martin Robinson. + + * GNUmakefile.list.am: removed ThreadingGtk.cpp. + * wtf/ThreadingPrimitives.h: remove GTK+-specific definitions. + * wtf/gobject/GOwnPtr.cpp: remove GCond and GMutex specializations. + * wtf/gobject/GOwnPtr.h: ditto. + * wtf/gobject/GTypedefs.h: remove GCond and GMutex forward declarations. + * wtf/gtk/ThreadingGtk.cpp: Removed. + +2011-10-12 Filip Pizlo <fpizlo@apple.com> + + Layout tests crashing in DFG JIT code + https://bugs.webkit.org/show_bug.cgi?id=69897 + + Reviewed by Gavin Barraclough. + + Abstract value filtration didn't take into account cases where a structure + set filter, combined with predicted type knowledge, could lead to a stronger + filter for the structure abstract value. + + This bug would have been benign in release builds; it would have just meant + that the analysis was less precise and some optimization opportunities would + be missed. I have an ASSERT that is meant to catch such cases, and it was + triggering sporadically in one of the LayoutTests. + + * dfg/DFGAbstractValue.h: + (JSC::DFG::AbstractValue::filter): + +2011-10-11 Gavin Barraclough <baraclough@apple.com> + + Unreviewed, temporarily reverted r97216 due to bug #69897. + + * dfg/DFGJITCodeGenerator.h: + (JSC::DFG::JITCodeGenerator::silentFillGPR): + +2011-10-11 Yuqiang Xian <yuqiang.xian@intel.com> + + DFG 32_64 - fix silentFillGPR + https://bugs.webkit.org/show_bug.cgi?id=69903 + + Reviewed by Filip Pizlo. + + Fix a small bug in silentFillGPR, + and add the newly introduced DFG file to CMakeListsEfl. + + * CMakeListsEfl.txt: + * dfg/DFGJITCodeGenerator.h: + (JSC::DFG::JITCodeGenerator::silentFillGPR): + +2011-10-08 Filip Pizlo <fpizlo@apple.com> + + DFG does not have flow-sensitive intraprocedural control flow analysis + https://bugs.webkit.org/show_bug.cgi?id=69690 + + Reviewed by Gavin Barraclough. + + Implemented a control flow analysis (CFA). It currently propagates type + proofs only. For example, if all predecessors to a basic block have + checks that variable X is a JSFinalObject with structure 0xabcdef, then + this basic block will now know this fact and will know that it does not + have to emit either JSFinalObject checks or any structure checks since + the structure is precisely known. The CFA takes heap side-effects into + account (though somewhat conservatively), so that if the object pointed + to by variable X could have possibly undergone a structure transition + then this is reflected: the analysis may simply say that X's structure + is unknown. + + This also propagates a wealth of other type information which is + currently not being used. For example, we now know when a variable can + only hold doubles. Even if a variable may hold other types at different + points in its live range, we can still prove exactly when it will only + be double. + + There's a bunch of stuff that the CFA could do that it still does not + do, like precise handling of PutStructure (i.e. structure transitions), + precise handling of CheckFunction and CheckMethod, etc. So this is + very much intended to be a starting point rather than an end unto + itself. + + This is a 1% win on V8 (mostly due to a 3% win on richards and deltablue) + and a 1% win on Kraken (mostly due to a 6% win on imaging-desaturate). + Neutral on SunSpider. + + * GNUmakefile.list.am: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * bytecode/ActionablePrediction.h: Removed. + * bytecode/PredictedType.cpp: + (JSC::predictionToString): + * bytecode/PredictedType.h: + * dfg/DFGAbstractState.cpp: Added. + (JSC::DFG::AbstractState::AbstractState): + (JSC::DFG::AbstractState::~AbstractState): + (JSC::DFG::AbstractState::beginBasicBlock): + (JSC::DFG::AbstractState::initialize): + (JSC::DFG::AbstractState::endBasicBlock): + (JSC::DFG::AbstractState::reset): + (JSC::DFG::AbstractState::execute): + (JSC::DFG::AbstractState::clobberStructures): + (JSC::DFG::AbstractState::mergeStateAtTail): + (JSC::DFG::AbstractState::merge): + (JSC::DFG::AbstractState::mergeToSuccessors): + (JSC::DFG::AbstractState::mergeVariableBetweenBlocks): + (JSC::DFG::AbstractState::dump): + * dfg/DFGAbstractState.h: Added. + (JSC::DFG::AbstractState::forNode): + (JSC::DFG::AbstractState::isValid): + * dfg/DFGAbstractValue.h: Added. + (JSC::DFG::StructureAbstractValue::StructureAbstractValue): + (JSC::DFG::StructureAbstractValue::clear): + (JSC::DFG::StructureAbstractValue::makeTop): + (JSC::DFG::StructureAbstractValue::top): + (JSC::DFG::StructureAbstractValue::add): + (JSC::DFG::StructureAbstractValue::addAll): + (JSC::DFG::StructureAbstractValue::contains): + (JSC::DFG::StructureAbstractValue::isSubsetOf): + (JSC::DFG::StructureAbstractValue::doesNotContainAnyOtherThan): + (JSC::DFG::StructureAbstractValue::isSupersetOf): + (JSC::DFG::StructureAbstractValue::filter): + (JSC::DFG::StructureAbstractValue::isClear): + (JSC::DFG::StructureAbstractValue::isTop): + (JSC::DFG::StructureAbstractValue::size): + (JSC::DFG::StructureAbstractValue::at): + (JSC::DFG::StructureAbstractValue::operator[]): + (JSC::DFG::StructureAbstractValue::last): + (JSC::DFG::StructureAbstractValue::predictionFromStructures): + (JSC::DFG::StructureAbstractValue::operator==): + (JSC::DFG::StructureAbstractValue::dump): + (JSC::DFG::AbstractValue::AbstractValue): + (JSC::DFG::AbstractValue::clear): + (JSC::DFG::AbstractValue::isClear): + (JSC::DFG::AbstractValue::makeTop): + (JSC::DFG::AbstractValue::clobberStructures): + (JSC::DFG::AbstractValue::isTop): + (JSC::DFG::AbstractValue::top): + (JSC::DFG::AbstractValue::set): + (JSC::DFG::AbstractValue::operator==): + (JSC::DFG::AbstractValue::merge): + (JSC::DFG::AbstractValue::filter): + (JSC::DFG::AbstractValue::validate): + (JSC::DFG::AbstractValue::dump): + * dfg/DFGBasicBlock.h: Added. + (JSC::DFG::BasicBlock::BasicBlock): + (JSC::DFG::BasicBlock::getBytecodeBegin): + * dfg/DFGByteCodeParser.cpp: + (JSC::DFG::ByteCodeParser::getLocal): + (JSC::DFG::ByteCodeParser::setLocal): + (JSC::DFG::ByteCodeParser::getArgument): + (JSC::DFG::ByteCodeParser::setArgument): + (JSC::DFG::ByteCodeParser::parseBlock): + (JSC::DFG::ByteCodeParser::processPhiStack): + (JSC::DFG::ByteCodeParser::setupPredecessors): + * dfg/DFGGraph.cpp: + (JSC::DFG::Graph::dump): + * dfg/DFGGraph.h: + * dfg/DFGJITCodeGenerator.h: + (JSC::DFG::block): + * dfg/DFGJITCodeGenerator32_64.cpp: + (JSC::DFG::JITCodeGenerator::nonSpeculativePeepholeBranchNull): + (JSC::DFG::JITCodeGenerator::nonSpeculativePeepholeBranch): + (JSC::DFG::JITCodeGenerator::nonSpeculativePeepholeStrictEq): + * dfg/DFGJITCodeGenerator64.cpp: + (JSC::DFG::JITCodeGenerator::nonSpeculativePeepholeBranchNull): + (JSC::DFG::JITCodeGenerator::nonSpeculativePeepholeBranch): + (JSC::DFG::JITCodeGenerator::nonSpeculativePeepholeStrictEq): + * dfg/DFGJITCompiler.h: + (JSC::DFG::JITCompiler::noticeOSREntry): + * dfg/DFGNode.h: + (JSC::DFG::NodeIndexTraits::defaultValue): + (JSC::DFG::Node::variableAccessData): + (JSC::DFG::Node::takenBytecodeOffsetDuringParsing): + (JSC::DFG::Node::notTakenBytecodeOffsetDuringParsing): + (JSC::DFG::Node::setTakenBlockIndex): + (JSC::DFG::Node::setNotTakenBlockIndex): + (JSC::DFG::Node::takenBlockIndex): + (JSC::DFG::Node::notTakenBlockIndex): + * dfg/DFGOSREntry.cpp: + (JSC::DFG::prepareOSREntry): + * dfg/DFGOSREntry.h: + * dfg/DFGOperands.h: Added. + (JSC::DFG::operandIsArgument): + (JSC::DFG::OperandValueTraits::defaultValue): + (JSC::DFG::Operands::Operands): + (JSC::DFG::Operands::numberOfArguments): + (JSC::DFG::Operands::numberOfLocals): + (JSC::DFG::Operands::argument): + (JSC::DFG::Operands::local): + (JSC::DFG::Operands::setLocal): + (JSC::DFG::Operands::setArgumentFirstTime): + (JSC::DFG::Operands::setLocalFirstTime): + (JSC::DFG::Operands::operand): + (JSC::DFG::Operands::setOperand): + (JSC::DFG::Operands::clear): + (JSC::DFG::dumpOperands): + * dfg/DFGPropagator.cpp: + (JSC::DFG::Propagator::fixpoint): + (JSC::DFG::Propagator::propagateArithNodeFlags): + (JSC::DFG::Propagator::propagateNodePredictions): + (JSC::DFG::Propagator::propagatePredictions): + (JSC::DFG::Propagator::performBlockCFA): + (JSC::DFG::Propagator::performForwardCFA): + (JSC::DFG::Propagator::globalCFA): + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::compilePeepHoleDoubleBranch): + (JSC::DFG::SpeculativeJIT::compilePeepHoleObjectEquality): + (JSC::DFG::SpeculativeJIT::compilePeepHoleIntegerBranch): + (JSC::DFG::SpeculativeJIT::compilePeepHoleBranch): + (JSC::DFG::SpeculativeJIT::compile): + (JSC::DFG::SpeculativeJIT::compileGetCharCodeAt): + (JSC::DFG::SpeculativeJIT::compileGetByValOnString): + * dfg/DFGSpeculativeJIT.h: + (JSC::DFG::SpeculativeJIT::SpeculativeJIT): + * dfg/DFGSpeculativeJIT32_64.cpp: + (JSC::DFG::SpeculativeJIT::compileObjectEquality): + (JSC::DFG::SpeculativeJIT::compare): + (JSC::DFG::SpeculativeJIT::compileObjectOrOtherLogicalNot): + (JSC::DFG::SpeculativeJIT::compileLogicalNot): + (JSC::DFG::SpeculativeJIT::emitObjectOrOtherBranch): + (JSC::DFG::SpeculativeJIT::emitBranch): + (JSC::DFG::SpeculativeJIT::compile): + * dfg/DFGSpeculativeJIT64.cpp: + (JSC::DFG::SpeculativeJIT::compileObjectEquality): + (JSC::DFG::SpeculativeJIT::compare): + (JSC::DFG::SpeculativeJIT::compileObjectOrOtherLogicalNot): + (JSC::DFG::SpeculativeJIT::compileLogicalNot): + (JSC::DFG::SpeculativeJIT::emitObjectOrOtherBranch): + (JSC::DFG::SpeculativeJIT::emitBranch): + (JSC::DFG::SpeculativeJIT::compile): + * dfg/DFGStructureSet.h: + (JSC::DFG::StructureSet::clear): + (JSC::DFG::StructureSet::predictionFromStructures): + (JSC::DFG::StructureSet::operator==): + (JSC::DFG::StructureSet::dump): + * dfg/DFGVariableAccessData.h: Added. + +2011-10-11 Gavin Barraclough <baraclough@apple.com> + + DFG JIT 32_64 - Fix silentFillGPR for non-integer constants. + https://bugs.webkit.org/show_bug.cgi?id=69890 + + Reviewed by Oliver Hunt. + + Cell constants are currently hitting the valueOfInt32Constant case, there is no constant handling for JSValues. + + * dfg/DFGJITCodeGenerator.h: + (JSC::DFG::JITCodeGenerator::silentFillGPR): + +2011-10-11 Ryosuke Niwa <rniwa@webkit.org> + + GTK build fix attempt after r97197. + + * wtf/BitVector.h: + +2011-10-11 Oliver Hunt <oliver@apple.com> + + Remove unintentional logging. + + * heap/Heap.cpp: + +2011-10-11 Oliver Hunt <oliver@apple.com> + + Tidy up card walking logic + https://bugs.webkit.org/show_bug.cgi?id=69883 + + Reviewed by Gavin Barraclough. + + Special case common cell sizes when walking a block's + cards. + + * heap/CardSet.h: + (JSC::::testAndClear): + * heap/Heap.cpp: + (JSC::GCTimer::GCCounter::GCCounter): + (JSC::GCTimer::GCCounter::count): + (JSC::GCTimer::GCCounter::~GCCounter): + (JSC::Heap::markRoots): + * heap/MarkStack.cpp: + (JSC::MarkStack::reset): + * heap/MarkStack.h: + (JSC::MarkStack::visitCount): + (JSC::MarkStack::MarkStack): + (JSC::MarkStack::append): + * heap/MarkedBlock.h: + (JSC::MarkedBlock::gatherDirtyCellsWithSize): + (JSC::MarkedBlock::gatherDirtyCells): + * runtime/Structure.h: + (JSC::MarkStack::internalAppend): + +2011-10-11 Filip Pizlo <fpizlo@apple.com> + + DFG virtual register allocator should be more aggressive in + reusing temporary slots + https://bugs.webkit.org/show_bug.cgi?id=69868 + + Reviewed by Oliver Hunt. + + 1.2% win on V8, neutral elsewhere. The win is probably because it + increases precision of GC conservative scans. + + This required making the DFG::ScoreBoard operate over a bitvector + of preserved variables, rather than just a preserved variable + threshold. To do this, I improved the WTF::BitVector class to make + it more user-friendly. It still retains all previous functionality. + Also made changes to PackedIntVector to accomodate those changes. + Finally, this adds more debugging to the virtual register allocator + and to the OSR exit code, as this was necessary to track down bugs + in an earlier version of this patch. + + * dfg/DFGByteCodeParser.cpp: + (JSC::DFG::ByteCodeParser::ByteCodeParser): + (JSC::DFG::ByteCodeParser::getLocal): + * dfg/DFGGraph.h: + * dfg/DFGJITCompiler.cpp: + (JSC::DFG::JITCompiler::exitSpeculativeWithOSR): + * dfg/DFGPropagator.cpp: + (JSC::DFG::Propagator::allocateVirtualRegisters): + * dfg/DFGScoreBoard.h: + (JSC::DFG::ScoreBoard::ScoreBoard): + (JSC::DFG::ScoreBoard::~ScoreBoard): + (JSC::DFG::ScoreBoard::allocate): + (JSC::DFG::ScoreBoard::use): + (JSC::DFG::ScoreBoard::highWatermark): + (JSC::DFG::ScoreBoard::dump): + (JSC::DFG::ScoreBoard::max): + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::ValueRecovery::dump): + * wtf/BitVector.cpp: + (WTF::BitVector::setSlow): + (WTF::BitVector::resizeOutOfLine): + (WTF::BitVector::dump): + * wtf/BitVector.h: + (WTF::BitVector::BitVector): + (WTF::BitVector::operator=): + (WTF::BitVector::quickGet): + (WTF::BitVector::quickSet): + (WTF::BitVector::quickClear): + (WTF::BitVector::get): + (WTF::BitVector::set): + (WTF::BitVector::clear): + * wtf/PackedIntVector.h: + (WTF::PackedIntVector::get): + (WTF::PackedIntVector::set): + +2011-10-11 Gavin Barraclough <baraclough@apple.com> + + DFG JIT 32_64 - Switch to cdecl calling convention. + https://bugs.webkit.org/show_bug.cgi?id=69863 + + Reviewed by Oliver Hunt. + + This makes it easier to keep the stack correctly aligned, which is required on OS X. + + * assembler/MacroAssemblerCodeRef.h: + (JSC::FunctionPtr::FunctionPtr): + - Provide default FunctionPtr constructors for CDECL functions on STDCALL platforms. + * dfg/DFGJITCodeGenerator.h: + (JSC::DFG::callOperation): + - Switch calls to poke arguments rather than pushing them. + (JSC::DFG::resetCallArguments): + (JSC::DFG::addCallArgument): + (JSC::DFG::addCallArgumentBoxed): + - Helper functions to stack up call arguments on X86. + * dfg/DFGJITCodeGenerator32_64.cpp: + (JSC::DFG::JITCodeGenerator::emitCall): + - Don't push, poke! + * dfg/DFGJITCompiler32_64.cpp: + (JSC::DFG::JITCompiler::compileBody): + - Don't push, poke! + * dfg/DFGOperations.cpp: + - Switch ReturnAddress wrappers to push return address last, update asm trampolines. + * dfg/DFGOperations.h: + - switch DFG_OPERATION to assert CDECL on STDCALL platforms. + * dfg/DFGSpeculativeJIT32_64.cpp: + (JSC::DFG::fmodWithCDecl): + (JSC::DFG::SpeculativeJIT::compile): + - On STDCALL platforms wrap fmod, since DFG_OPERATION wrappers are CDECL. + +2011-10-11 Gavin Barraclough <baraclough@apple.com> + + Switch RegisterSizedBoolean/dfgConvertJSValueToInt32 return type to size_t + https://bugs.webkit.org/show_bug.cgi?id=69821 + + Reviewed by Filip Pizlo. + + Operations returning types Z (int32_t) and B (RegisterSizedBoolean - implemented as an + intptr_t) are indistinguishable on 32-bit Linux, preventing the DFG JIT from building. + + dfgConvertJSValueToInt32 would be better returning a value known to be register sized, for + JSVALUE64 (we currently zero-extend in JIT code, potentially introducing an unnecessary + move), so by switching all associated operations to return a size_t we can fix the type + problem on Linux & make it a small tweak that removes an unnecessary instruction. + + * dfg/DFGJITCodeGenerator.cpp: + (JSC::DFG::JITCodeGenerator::nonSpeculativeCompare): + - comparisons now return a size_t. + * dfg/DFGJITCodeGenerator.h: + (JSC::DFG::callOperation): + - Removed Z_DFGOperation_EJ form. + * dfg/DFGJITCodeGenerator32_64.cpp: + (JSC::DFG::JITCodeGenerator::nonSpeculativePeepholeBranch): + (JSC::DFG::JITCodeGenerator::nonSpeculativeNonPeepholeCompare): + - comparisons now return a size_t. + * dfg/DFGJITCodeGenerator64.cpp: + (JSC::DFG::JITCodeGenerator::nonSpeculativeValueToInt32): + (JSC::DFG::JITCodeGenerator::nonSpeculativePeepholeBranch): + (JSC::DFG::JITCodeGenerator::nonSpeculativeNonPeepholeCompare): + - comparisons now return a size_t. + * dfg/DFGOperations.cpp: + * dfg/DFGOperations.h: + - Change return types for comparison operations & dfgConvertJSValueToInt32 to size_t, + Both need to return values zero extended to fill a register. + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::compilePeepHoleBranch): + - comparisons now return a size_t. + * dfg/DFGSpeculativeJIT.h: + * dfg/DFGSpeculativeJIT32_64.cpp: + (JSC::DFG::SpeculativeJIT::compare): + - comparisons now return a size_t. + * dfg/DFGSpeculativeJIT64.cpp: + (JSC::DFG::SpeculativeJIT::compare): + - comparisons now return a size_t. + +2011-10-11 Tor Arne Vestbø <tor.arne.vestbo@nokia.com> + + [Qt] Remove all references to QTDIR_build and standalone_package + + Qt is now modularized, which means we no longer import WebKit into + the Qt source tree. Instead we use git submodules, and building + QtWebKit as "part of Qt" is really building QtWebKit as from trunk. + + To decrease the number of buildsystem configurations we also remove + the standalone_package code-path used when we were providing tarballs + with the derived sources pre-generated. + + Reviewed by Simon Hausmann. + + * DerivedSources.pro: + * JavaScriptCore.pri: + * JavaScriptCore.pro: + +2011-10-11 Yuqiang Xian <yuqiang.xian@intel.com> + + Add missing copyright notice in DFG JIT files + https://bugs.webkit.org/show_bug.cgi?id=69809 + + Reviewed by Gavin Barraclough. + + * dfg/DFGJITCodeGenerator32_64.cpp: + * dfg/DFGJITCompiler32_64.cpp: + * dfg/DFGJITCompilerInlineMethods.h: + * dfg/DFGSpeculativeJIT32_64.cpp: + +2011-10-10 Filip Pizlo <fpizlo@apple.com> + + DFG JSVALUE64 spill/fill code should not box integers and doubles + https://bugs.webkit.org/show_bug.cgi?id=69782 + + Reviewed by Oliver Hunt. + + Added the notion of DataFormatInteger and DataFormatDouble to the spillFormat. + This required changing all of the places that spill registers (both silently + and not) and filling registers (both silently and on demand). It also required + changing OSR exit to recognize that a spilled value (DisplacedInRegisterFile) + may have the wrong format for the old JIT (unboxed int or double). + + This is a slight win on Kraken (0.25%) and neutral elsewhere. + + * dfg/DFGGenerationInfo.h: + (JSC::DFG::GenerationInfo::spill): + * dfg/DFGJITCodeGenerator.h: + (JSC::DFG::JITCodeGenerator::silentFillFPR): + (JSC::DFG::JITCodeGenerator::spill): + * dfg/DFGJITCodeGenerator64.cpp: + (JSC::DFG::JITCodeGenerator::fillInteger): + (JSC::DFG::JITCodeGenerator::fillDouble): + (JSC::DFG::JITCodeGenerator::fillJSValue): + * dfg/DFGJITCompiler.cpp: + (JSC::DFG::JITCompiler::exitSpeculativeWithOSR): + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::computeValueRecoveryFor): + * dfg/DFGSpeculativeJIT.h: + (JSC::DFG::ValueRecovery::displacedInRegisterFile): + (JSC::DFG::ValueRecovery::virtualRegister): + * dfg/DFGSpeculativeJIT64.cpp: + (JSC::DFG::SpeculativeJIT::fillSpeculateIntInternal): + (JSC::DFG::SpeculativeJIT::fillSpeculateDouble): + (JSC::DFG::SpeculativeJIT::fillSpeculateCell): + (JSC::DFG::SpeculativeJIT::fillSpeculateBoolean): + +2011-10-10 Gavin Barraclough <baraclough@apple.com> + + DFG JIT switch dfgConvert methods to use callOperation + https://bugs.webkit.org/show_bug.cgi?id=69806 + + Reviewed by Filip Pizlo. + + * dfg/DFGJITCodeGenerator.h: + (JSC::DFG::callOperation): + * dfg/DFGJITCodeGenerator32_64.cpp: + (JSC::DFG::JITCodeGenerator::nonSpeculativeValueToNumber): + (JSC::DFG::JITCodeGenerator::nonSpeculativeValueToInt32): + * dfg/DFGJITCodeGenerator64.cpp: + (JSC::DFG::JITCodeGenerator::nonSpeculativeValueToNumber): + (JSC::DFG::JITCodeGenerator::nonSpeculativeValueToInt32): + * dfg/DFGOperations.h: + +2011-10-10 Gavin Barraclough <baraclough@apple.com> + + Remove some unused methods from the DFG JIT. + + Rubber stamped by Oliver Hunt + + Thee methods were only used by the non-speculative JIT, and can be removed. + + * dfg/DFGJITCodeGenerator.h: + * dfg/DFGJITCodeGenerator32_64.cpp: + * dfg/DFGJITCodeGenerator64.cpp: + - removed: + nonSpeculativeAdd + nonSpeculativeArithSub + nonSpeculativeArithMod + nonSpeculativeCheckHasInstance + nonSpeculativeInstanceOf + * dfg/DFGOperations.cpp: + * dfg/DFGOperations.h: + - removed: + operationArithMod + operationInstanceOf + operationThrowHasInstanceError + +2011-10-10 Gavin Barraclough <baraclough@apple.com> + + Switch most calls in DFGJITCodeGenerator to use callOperation. + https://bugs.webkit.org/show_bug.cgi?id=69802 + + Reviewed by Oliver Hunt. + + Compares, add, mod are the easy cases. + + * dfg/DFGJITCodeGenerator.h: + (JSC::DFG::callOperation): + * dfg/DFGJITCodeGenerator32_64.cpp: + (JSC::DFG::JITCodeGenerator::nonSpeculativeKnownConstantArithOp): + (JSC::DFG::JITCodeGenerator::nonSpeculativeBasicArithOp): + (JSC::DFG::JITCodeGenerator::nonSpeculativeArithMod): + (JSC::DFG::JITCodeGenerator::nonSpeculativePeepholeBranch): + (JSC::DFG::JITCodeGenerator::nonSpeculativeNonPeepholeCompare): + (JSC::DFG::JITCodeGenerator::nonSpeculativePeepholeStrictEq): + (JSC::DFG::JITCodeGenerator::nonSpeculativeNonPeepholeStrictEq): + * dfg/DFGJITCodeGenerator64.cpp: + (JSC::DFG::JITCodeGenerator::nonSpeculativeKnownConstantArithOp): + (JSC::DFG::JITCodeGenerator::nonSpeculativeBasicArithOp): + (JSC::DFG::JITCodeGenerator::nonSpeculativePeepholeBranch): + (JSC::DFG::JITCodeGenerator::nonSpeculativeNonPeepholeCompare): + (JSC::DFG::JITCodeGenerator::nonSpeculativePeepholeStrictEq): + (JSC::DFG::JITCodeGenerator::nonSpeculativeNonPeepholeStrictEq): + * dfg/DFGOperations.cpp: + * dfg/DFGOperations.h: + +2011-10-10 Gavin Barraclough <baraclough@apple.com> + + DFG: Switch GetById / PutById to use callOperation + https://bugs.webkit.org/show_bug.cgi?id=69795 + + Reviewed by Oliver Hunt. + + Also make the take base as a cell, so 32_64 doesn't have to set up the cell tag. + + * dfg/DFGJITCodeGenerator.h: + (JSC::DFG::callOperation): + * dfg/DFGJITCodeGenerator32_64.cpp: + (JSC::DFG::JITCodeGenerator::cachedGetById): + (JSC::DFG::JITCodeGenerator::cachedPutById): + * dfg/DFGJITCodeGenerator64.cpp: + (JSC::DFG::JITCodeGenerator::cachedGetById): + (JSC::DFG::JITCodeGenerator::cachedPutById): + * dfg/DFGOperations.cpp: + * dfg/DFGOperations.h: + * dfg/DFGRepatch.cpp: + (JSC::DFG::appropriatePutByIdFunction): + +2011-10-10 Filip Pizlo <fpizlo@apple.com> + + REGRESSIoN (r95399): Web process hangs when opening documents on Google Docs + https://bugs.webkit.org/show_bug.cgi?id=69412 + + Reviewed by Oliver Hunt. + + * dfg/DFGSpeculativeJIT32_64.cpp: + (JSC::DFG::SpeculativeJIT::compile): + * dfg/DFGSpeculativeJIT64.cpp: + (JSC::DFG::SpeculativeJIT::compile): + * jit/JIT.cpp: + (JSC::JIT::privateCompile): + * jit/JIT.h: + +2011-10-10 Mark Hahnenberg <mhahnenberg@apple.com> + + Remove getCallDataVirtual methods + https://bugs.webkit.org/show_bug.cgi?id=69186 + + Reviewed by Geoffrey Garen. + + Removed all getCallDataVirtual methods and replaced their call sites + with an explicit lookup in the MethodTable. + + * API/JSCallbackFunction.cpp: + * API/JSCallbackFunction.h: + * API/JSCallbackObject.h: + * API/JSCallbackObjectFunctions.h: + * API/JSObjectRef.cpp: + (JSObjectIsFunction): + (JSObjectCallAsFunction): + * JavaScriptCore.exp: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * interpreter/Interpreter.cpp: + (JSC::Interpreter::privateExecute): + * jit/JITStubs.cpp: + (JSC::DEFINE_STUB_FUNCTION): + * runtime/ArrayConstructor.cpp: + * runtime/ArrayConstructor.h: + * runtime/BooleanConstructor.cpp: + * runtime/BooleanConstructor.h: + * runtime/DateConstructor.cpp: + * runtime/DateConstructor.h: + + Moved StrictModeTypeErrorFunction to Error.h in order to be able to include + the class definition in JSGlobalObject.cpp. + * runtime/Error.cpp: + (JSC::createTypeErrorFunction): + * runtime/Error.h: + (JSC::StrictModeTypeErrorFunction::StrictModeTypeErrorFunction): + (JSC::StrictModeTypeErrorFunction::create): + (JSC::StrictModeTypeErrorFunction::constructThrowTypeError): + (JSC::StrictModeTypeErrorFunction::getConstructData): + (JSC::StrictModeTypeErrorFunction::callThrowTypeError): + (JSC::StrictModeTypeErrorFunction::getCallData): + (JSC::StrictModeTypeErrorFunction::createStructure): + * runtime/ErrorConstructor.cpp: + * runtime/ErrorConstructor.h: + * runtime/FunctionConstructor.cpp: + * runtime/FunctionConstructor.h: + * runtime/FunctionPrototype.cpp: + * runtime/FunctionPrototype.h: + + To allow subclasses of InternalFunction (e.g. QtRuntimeMethod) to not have + to declare their own ClassInfo if they don't override getCallData, provided + an implementation that calls ASSERT_NOT_REACHED if called, providing roughly the same + functionality as of the pure virtual method InternalFunction used to have. + Also made this new implementation protected rather than private for the same reason. + Also added an ASSERT in InternalFunction::finishCreation to make sure that whatever + object is being created provides their own implementation of getCallData. This + just makes execution fail earlier in a place where the source of the error is + easy to trace. These ASSERTs are better than putting a null in the MethodTable because + they appear much more intentional to anybody who fails to provide their own + implementation or who tries to explicitly call InternalFunction::getCallData. + * runtime/InternalFunction.cpp: + (JSC::InternalFunction::finishCreation): + (JSC::InternalFunction::getCallData): + * runtime/InternalFunction.h: + * runtime/JSCell.cpp: + * runtime/JSCell.h: + * runtime/JSFunction.cpp: + * runtime/JSFunction.h: + + Added a global structure to JSGlobalObject for StrictModeTypeErrorFunction to enable + it to be reused rather than creating a new Structure every time we instantiate it. + * runtime/JSGlobalObject.cpp: + (JSC::JSGlobalObject::reset): + (JSC::JSGlobalObject::visitChildren): + * runtime/JSGlobalObject.h: + (JSC::JSGlobalObject::strictModeTypeErrorFunctionStructure): + * runtime/JSONObject.cpp: + (JSC::Stringifier::Stringifier): + (JSC::Stringifier::toJSON): + (JSC::Stringifier::appendStringifiedValue): + * runtime/JSObject.cpp: + (JSC::JSObject::put): + * runtime/JSObject.h: + (JSC::getCallData): + * runtime/NativeErrorConstructor.cpp: + * runtime/NativeErrorConstructor.h: + * runtime/NumberConstructor.cpp: + * runtime/NumberConstructor.h: + * runtime/ObjectConstructor.cpp: + * runtime/ObjectConstructor.h: + * runtime/Operations.cpp: + (JSC::jsTypeStringForValue): + (JSC::jsIsObjectType): + (JSC::jsIsFunctionType): + * runtime/PropertySlot.cpp: + (JSC::PropertySlot::functionGetter): + * runtime/RegExpConstructor.cpp: + * runtime/RegExpConstructor.h: + * runtime/StringConstructor.cpp: + * runtime/StringConstructor.h: + * runtime/Structure.h: + +2011-10-10 Gavin Barraclough <barraclough@apple.com> + + Switch last calls from DFGSpeculativeJIT to use callOperation. + https://bugs.webkit.org/show_bug.cgi?id=69780 + + Reviewed by Oliver Hunt. + + Also, rename type in operations for booleans from Z to B, since Z is the mathematical symbol for integers. + + * dfg/DFGJITCodeGenerator.cpp: + (JSC::DFG::JITCodeGenerator::nonSpeculativeCompare): + * dfg/DFGJITCodeGenerator.h: + (JSC::DFG::callOperation): + * dfg/DFGJITCodeGenerator32_64.cpp: + (JSC::DFG::JITCodeGenerator::nonSpeculativePeepholeBranch): + (JSC::DFG::JITCodeGenerator::nonSpeculativeNonPeepholeCompare): + * dfg/DFGJITCodeGenerator64.cpp: + (JSC::DFG::JITCodeGenerator::nonSpeculativePeepholeBranch): + (JSC::DFG::JITCodeGenerator::nonSpeculativeNonPeepholeCompare): + * dfg/DFGOperations.h: + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::compilePeepHoleBranch): + * dfg/DFGSpeculativeJIT.h: + * dfg/DFGSpeculativeJIT32_64.cpp: + (JSC::DFG::SpeculativeJIT::compare): + (JSC::DFG::SpeculativeJIT::compile): + * dfg/DFGSpeculativeJIT64.cpp: + (JSC::DFG::SpeculativeJIT::compare): + (JSC::DFG::SpeculativeJIT::compile): + * wtf/Platform.h: + +2011-10-10 Yuqiang Xian <yuqiang.xian@intel.com> + + JSVALUE32_64 DFG JIT - bug fix for V8 benchmark cases "crypto" and "raytrace" + https://bugs.webkit.org/show_bug.cgi?id=69748 + + Reviewed by Filip Pizlo. + + * dfg/DFGJITCodeGenerator32_64.cpp: + (JSC::DFG::JITCodeGenerator::cachedGetMethod): + * dfg/DFGSpeculativeJIT32_64.cpp: + (JSC::DFG::SpeculativeJIT::compileObjectEquality): + +2011-10-10 Adam Roben <aroben@apple.com> + + Build fix + + * wtf/MainThread.h: Pull in Platform.h since this file uses PLATFORM() macros. + +2011-10-10 Yuqiang Xian <yuqiang.xian@intel.com> + + JSVALUE32_64 DFG JIT - Bug fix for BranchNull + https://bugs.webkit.org/show_bug.cgi?id=69743 + + Reviewed by Darin Adler. + + This fixes the error in access-binary-trees. All SunSpider cases passed. + + * dfg/DFGJITCodeGenerator32_64.cpp: + (JSC::DFG::JITCodeGenerator::nonSpeculativePeepholeBranchNull): + +2011-10-07 Gavin Barraclough <barraclough@apple.com> + + DFG JIT: callOperation should return the Call. + https://bugs.webkit.org/show_bug.cgi?id=69682 + + Reviewed by Oliver Hunt. + + * dfg/DFGJITCodeGenerator.h: + (JSC::DFG::callOperation): + (JSC::DFG::appendCallWithExceptionCheckSetResult): + * dfg/DFGJITCompiler.h: + (JSC::DFG::JITCompiler::appendCall): + * wtf/Platform.h: + +2011-10-10 Sheriff Bot <webkit.review.bot@gmail.com> + + Unreviewed, rolling out r97045. + http://trac.webkit.org/changeset/97045 + https://bugs.webkit.org/show_bug.cgi?id=69746 + + makes apple bots very crashy :( (Requested by kling on + #webkit). + + * config.h: + +2011-10-10 Andreas Kling <kling@webkit.org> + + Shrink BorderValue. + https://bugs.webkit.org/show_bug.cgi?id=69521 + + Reviewed by Antti Koivisto. + + * config.h: Touch to force full rebuild. + +2011-10-09 Yuqiang Xian <yuqiang.xian@intel.com> + + Improve Null or Undefined test in 32_64 DFG + https://bugs.webkit.org/show_bug.cgi?id=69734 + + Reviewed by Darin Adler. + + Currently Null or Undefined value test in 32_64 DFG will check + Null and Undefined tag separately and introduce one more branch. + It can be improved in the way how the baseline JIT is doing - by + relying on the fact that "UndefinedTag + 1 == NullTag and NullTag & 1". + + * dfg/DFGJITCodeGenerator32_64.cpp: + (JSC::DFG::JITCodeGenerator::nonSpeculativeNonPeepholeCompareNull): + * dfg/DFGSpeculativeJIT32_64.cpp: + (JSC::DFG::SpeculativeJIT::compileObjectOrOtherLogicalNot): + (JSC::DFG::SpeculativeJIT::emitObjectOrOtherBranch): + +2011-10-09 Yuqiang Xian <yuqiang.xian@intel.com> + + JSVALUE32_64 DFG JIT - Bug fix for ConvertThis + https://bugs.webkit.org/show_bug.cgi?id=69721 + + Reviewed by Darin Adler. + + * dfg/DFGSpeculativeJIT32_64.cpp: + (JSC::DFG::SpeculativeJIT::compile): + +2011-10-09 Yuqiang Xian <yuqiang.xian@intel.com> + + Remove unused callOperation code of DFG JIT on X86 + https://bugs.webkit.org/show_bug.cgi?id=69722 + + Reviewed by Filip Pizlo. + + * dfg/DFGJITCodeGenerator.h: + (JSC::DFG::callOperation): + +2011-10-09 Yuqiang Xian <yuqiang.xian@intel.com> + + JSVALUE32_64 DFG JIT - fillJSValue with a pair of GPRs should not set the registerFormat to be DataFormatJSDouble + https://bugs.webkit.org/show_bug.cgi?id=69720 + + Reviewed by Filip Pizlo. + + In JSVALUE32_64 DFG, DataFormatJSDouble is assumed to be represented by + a FPR and will be used for further optimizations, though we currently + don't fully utilize it. For now when filling a JS value which was + spilled as a JSDouble with a pair of GPRs, we'll set the registerFormat + to DataFormatJS to avoid compilation errors. + + * dfg/DFGJITCodeGenerator32_64.cpp: + (JSC::DFG::JITCodeGenerator::fillJSValue): + +2011-10-09 Filip Pizlo <fpizlo@apple.com> + + DFG should not always speculate that a ByVal access has an integer index + https://bugs.webkit.org/show_bug.cgi?id=69716 + + Reviewed by Oliver Hunt. + + 1% win on SunSpider, neutral elsewhere. + + * dfg/DFGJITCodeGenerator.h: + (JSC::DFG::callOperation): + * dfg/DFGNode.h: + * dfg/DFGOperations.cpp: + * dfg/DFGOperations.h: + * dfg/DFGPropagator.cpp: + (JSC::DFG::Propagator::byValHasIntBase): + (JSC::DFG::Propagator::clobbersWorld): + (JSC::DFG::Propagator::getMethodLoadElimination): + (JSC::DFG::Propagator::checkStructureLoadElimination): + (JSC::DFG::Propagator::getByOffsetLoadElimination): + (JSC::DFG::Propagator::getPropertyStorageLoadElimination): + (JSC::DFG::Propagator::performNodeCSE): + * dfg/DFGSpeculativeJIT32_64.cpp: + (JSC::DFG::SpeculativeJIT::compile): + * dfg/DFGSpeculativeJIT64.cpp: + (JSC::DFG::SpeculativeJIT::compile): + +2011-10-09 Yuqiang Xian <yuqiang.xian@intel.com> + + Fix value profiling in 32_64 JIT + https://bugs.webkit.org/show_bug.cgi?id=69717 + + Reviewed by Filip Pizlo. + + Current value profiling for 32_64 JIT is broken and cannot record + correct predicated types, which results in many speculation failures + in the 32_64 DFG JIT, fallbacks to baseline JIT, and re-optimizations + again and again. + With this fix 32_64 DFG JIT can demonstrate real performance gains. + + * bytecode/ValueProfile.cpp: + (JSC::ValueProfile::computeStatistics): + * bytecode/ValueProfile.h: + (JSC::ValueProfile::classInfo): + (JSC::ValueProfile::numberOfSamples): + (JSC::ValueProfile::isLive): + (JSC::ValueProfile::numberOfInt32s): + (JSC::ValueProfile::numberOfDoubles): + (JSC::ValueProfile::numberOfBooleans): + (JSC::ValueProfile::dump): + Empty value check should be performed on decoded JSValue, + as for 32_64 empty value is not identical to encoded 0. + * jit/JIT.cpp: + (JSC::JIT::privateCompile): + * jit/JITInlineMethods.h: + (JSC::JIT::emitValueProfilingSite): + * jit/JITStubCall.h: + (JSC::JITStubCall::callWithValueProfiling): + Record the right profiling result for 32_64. + +2011-10-09 Yuqiang Xian <yuqiang.xian@intel.com> + + Remove 32 bit restrictions in DFG JIT + https://bugs.webkit.org/show_bug.cgi?id=69711 + + Reviewed by Filip Pizlo. + + op_call/op_construct support was disabled for 32 bit DFG JIT because + there was regression in javascriptcore tests. Now the bugs are fixed + and there should be no regression. This makes 32 bit DFG have the same + capability as 64 bit DFG, and improves the coverage. + + * dfg/DFGCapabilities.h: + (JSC::DFG::canCompileOpcode): + +2011-10-08 Mark Hahnenberg <mhahnenberg@apple.com> + + Add static version of JSCell::getConstructData + https://bugs.webkit.org/show_bug.cgi?id=69673 + + Reviewed by Geoffrey Garen. + + Added static version of getConstructData to all classes that + override it and changed the virtual versions to call the static + versions. This is the first step in de-virtualizing JSCell::getConstructData. + + * API/JSCallbackConstructor.cpp: + (JSC::JSCallbackConstructor::getConstructData): + * API/JSCallbackConstructor.h: + * API/JSCallbackObject.h: + * API/JSCallbackObjectFunctions.h: + (JSC::::getConstructData): + * runtime/ArrayConstructor.cpp: + (JSC::ArrayConstructor::getConstructData): + * runtime/ArrayConstructor.h: + * runtime/BooleanConstructor.cpp: + (JSC::BooleanConstructor::getConstructData): + * runtime/BooleanConstructor.h: + * runtime/DateConstructor.cpp: + (JSC::DateConstructor::getConstructData): + * runtime/DateConstructor.h: + * runtime/ErrorConstructor.cpp: + (JSC::ErrorConstructor::getConstructData): + * runtime/ErrorConstructor.h: + * runtime/FunctionConstructor.cpp: + (JSC::FunctionConstructor::getConstructData): + * runtime/FunctionConstructor.h: + * runtime/JSCell.cpp: + (JSC::JSCell::getConstructData): + * runtime/JSCell.h: + * runtime/JSFunction.cpp: + (JSC::JSFunction::getConstructData): + * runtime/JSFunction.h: + * runtime/NativeErrorConstructor.cpp: + (JSC::NativeErrorConstructor::getConstructData): + * runtime/NativeErrorConstructor.h: + * runtime/NumberConstructor.cpp: + (JSC::NumberConstructor::getConstructData): + * runtime/NumberConstructor.h: + * runtime/ObjectConstructor.cpp: + (JSC::ObjectConstructor::getConstructData): + * runtime/ObjectConstructor.h: + * runtime/RegExpConstructor.cpp: + (JSC::RegExpConstructor::getConstructData): + * runtime/RegExpConstructor.h: + * runtime/StringConstructor.cpp: + (JSC::StringConstructor::getConstructData): + * runtime/StringConstructor.h: + +2011-10-08 Mark Hahnenberg <mhahnenberg@apple.com> + + Add static version of JSCell::getOwnPropertySlot + https://bugs.webkit.org/show_bug.cgi?id=69593 + + Reviewed by Geoffrey Garen. + + Added static version of getOwnPropertySlot to every class that overrides + JSCell::getOwnPropertySlot. The virtual versions now call the static versions. + This is the first step in de-virtualizing JSCell::getOwnPropertySlot. + + * JavaScriptCore.exp: + * debugger/DebuggerActivation.cpp: + (JSC::DebuggerActivation::getOwnPropertySlot): + * debugger/DebuggerActivation.h: + * runtime/Arguments.cpp: + (JSC::Arguments::getOwnPropertySlot): + * runtime/Arguments.h: + * runtime/ArrayConstructor.h: + * runtime/ArrayPrototype.cpp: + (JSC::ArrayPrototype::getOwnPropertySlot): + * runtime/ArrayPrototype.h: + * runtime/BooleanPrototype.cpp: + (JSC::BooleanPrototype::getOwnPropertySlot): + * runtime/BooleanPrototype.h: + * runtime/DateConstructor.cpp: + (JSC::DateConstructor::getOwnPropertySlot): + * runtime/DateConstructor.h: + * runtime/DatePrototype.cpp: + (JSC::DatePrototype::getOwnPropertySlot): + * runtime/DatePrototype.h: + * runtime/ErrorPrototype.cpp: + (JSC::ErrorPrototype::getOwnPropertySlot): + * runtime/ErrorPrototype.h: + * runtime/JSActivation.cpp: + (JSC::JSActivation::getOwnPropertySlot): + * runtime/JSActivation.h: + * runtime/JSArray.cpp: + (JSC::JSArray::getOwnPropertySlot): + * runtime/JSArray.h: + * runtime/JSBoundFunction.cpp: + (JSC::JSBoundFunction::getOwnPropertySlot): + * runtime/JSBoundFunction.h: + * runtime/JSByteArray.cpp: + (JSC::JSByteArray::getOwnPropertySlot): + * runtime/JSByteArray.h: + * runtime/JSCell.cpp: + (JSC::JSCell::getOwnPropertySlot): + * runtime/JSCell.h: + * runtime/JSFunction.cpp: + (JSC::JSFunction::getOwnPropertySlot): + * runtime/JSFunction.h: + * runtime/JSGlobalObject.cpp: + (JSC::JSGlobalObject::getOwnPropertySlot): + * runtime/JSGlobalObject.h: + * runtime/JSNotAnObject.cpp: + (JSC::JSNotAnObject::getOwnPropertySlot): + * runtime/JSNotAnObject.h: + * runtime/JSONObject.cpp: + (JSC::JSONObject::getOwnPropertySlot): + * runtime/JSONObject.h: + * runtime/JSObject.cpp: + (JSC::JSObject::getOwnPropertySlot): + * runtime/JSObject.h: + (JSC::JSObject::getOwnPropertySlot): + * runtime/JSStaticScopeObject.cpp: + (JSC::JSStaticScopeObject::getOwnPropertySlot): + * runtime/JSStaticScopeObject.h: + * runtime/JSString.cpp: + (JSC::JSString::getOwnPropertySlot): + * runtime/JSString.h: + * runtime/MathObject.cpp: + (JSC::MathObject::getOwnPropertySlot): + * runtime/MathObject.h: + * runtime/NumberConstructor.cpp: + (JSC::NumberConstructor::getOwnPropertySlot): + * runtime/NumberConstructor.h: + * runtime/NumberPrototype.cpp: + (JSC::NumberPrototype::getOwnPropertySlot): + * runtime/NumberPrototype.h: + * runtime/ObjectConstructor.cpp: + (JSC::ObjectConstructor::getOwnPropertySlot): + * runtime/ObjectConstructor.h: + * runtime/ObjectPrototype.cpp: + (JSC::ObjectPrototype::getOwnPropertySlot): + * runtime/ObjectPrototype.h: + * runtime/RegExpConstructor.cpp: + (JSC::RegExpConstructor::getOwnPropertySlot): + * runtime/RegExpConstructor.h: + * runtime/RegExpMatchesArray.h: + (JSC::RegExpMatchesArray::getOwnPropertySlot): + * runtime/RegExpObject.cpp: + (JSC::RegExpObject::getOwnPropertySlot): + * runtime/RegExpObject.h: + * runtime/RegExpPrototype.cpp: + (JSC::RegExpPrototype::getOwnPropertySlot): + * runtime/RegExpPrototype.h: + * runtime/StringConstructor.cpp: + (JSC::StringConstructor::getOwnPropertySlot): + * runtime/StringConstructor.h: + * runtime/StringObject.cpp: + (JSC::StringObject::getOwnPropertySlot): + * runtime/StringObject.h: + * runtime/StringPrototype.cpp: + (JSC::StringPrototype::getOwnPropertySlot): + * runtime/StringPrototype.h: + +2011-10-08 Yuqiang Xian <yuqiang.xian@intel.com> + + JSVALUE32_64 DFG JIT - GetLocal should produce a cell result for Array predictions + https://bugs.webkit.org/show_bug.cgi?id=69699 + + Reviewed by Filip Pizlo. + + It should match SetLocal where only payload is stored for array predictions. + + * dfg/DFGSpeculativeJIT32_64.cpp: + (JSC::DFG::SpeculativeJIT::compile): + +2011-10-08 Yuqiang Xian <yuqiang.xian@intel.com> + + JSVALUE32_64 DFG JIT - Bug fixes for Branch and LogicalNot + https://bugs.webkit.org/show_bug.cgi?id=69702 + + Reviewed by Filip Pizlo. + + There are some errors in generating code for Branch and LogicalNot, + when the operand is predicted as ObjectOrOther. + + * dfg/DFGSpeculativeJIT32_64.cpp: + (JSC::DFG::SpeculativeJIT::compileObjectOrOtherLogicalNot): + (JSC::DFG::SpeculativeJIT::emitObjectOrOtherBranch): + +2011-10-08 Sheriff Bot <webkit.review.bot@gmail.com> + + Unreviewed, rolling out r96996. + http://trac.webkit.org/changeset/96996 + https://bugs.webkit.org/show_bug.cgi?id=69697 + + It broke all tests on the Qt bot (Requested by Ossy_night on + #webkit). + + * API/JSCallbackFunction.cpp: + (JSC::JSCallbackFunction::getCallDataVirtual): + * API/JSCallbackFunction.h: + * API/JSCallbackObject.h: + * API/JSCallbackObjectFunctions.h: + (JSC::::getCallDataVirtual): + * API/JSObjectRef.cpp: + (JSObjectIsFunction): + (JSObjectCallAsFunction): + * JavaScriptCore.exp: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * interpreter/Interpreter.cpp: + (JSC::Interpreter::privateExecute): + * jit/JITStubs.cpp: + (JSC::DEFINE_STUB_FUNCTION): + * runtime/ArrayConstructor.cpp: + (JSC::ArrayConstructor::getCallDataVirtual): + * runtime/ArrayConstructor.h: + * runtime/BooleanConstructor.cpp: + (JSC::BooleanConstructor::getCallDataVirtual): + * runtime/BooleanConstructor.h: + * runtime/DateConstructor.cpp: + (JSC::DateConstructor::getCallDataVirtual): + * runtime/DateConstructor.h: + * runtime/Error.cpp: + (JSC::StrictModeTypeErrorFunction::StrictModeTypeErrorFunction): + (JSC::StrictModeTypeErrorFunction::create): + (JSC::StrictModeTypeErrorFunction::constructThrowTypeError): + (JSC::StrictModeTypeErrorFunction::getConstructData): + (JSC::StrictModeTypeErrorFunction::callThrowTypeError): + (JSC::StrictModeTypeErrorFunction::getCallDataVirtual): + (JSC::StrictModeTypeErrorFunction::getCallData): + (JSC::StrictModeTypeErrorFunction::createStructure): + (JSC::createTypeErrorFunction): + * runtime/Error.h: + * runtime/ErrorConstructor.cpp: + (JSC::ErrorConstructor::getCallDataVirtual): + * runtime/ErrorConstructor.h: + * runtime/FunctionConstructor.cpp: + (JSC::FunctionConstructor::getCallDataVirtual): + * runtime/FunctionConstructor.h: + * runtime/FunctionPrototype.cpp: + (JSC::FunctionPrototype::getCallDataVirtual): + * runtime/FunctionPrototype.h: + * runtime/InternalFunction.cpp: + (JSC::InternalFunction::finishCreation): + * runtime/InternalFunction.h: + * runtime/JSCell.cpp: + (JSC::JSCell::getCallDataVirtual): + * runtime/JSCell.h: + (JSC::getCallData): + * runtime/JSFunction.cpp: + (JSC::JSFunction::getCallDataVirtual): + * runtime/JSFunction.h: + * runtime/JSGlobalObject.cpp: + (JSC::JSGlobalObject::reset): + (JSC::JSGlobalObject::visitChildren): + * runtime/JSGlobalObject.h: + * runtime/JSONObject.cpp: + (JSC::Stringifier::Stringifier): + (JSC::Stringifier::toJSON): + (JSC::Stringifier::appendStringifiedValue): + * runtime/JSObject.cpp: + (JSC::JSObject::put): + * runtime/JSObject.h: + * runtime/NativeErrorConstructor.cpp: + (JSC::NativeErrorConstructor::getCallDataVirtual): + * runtime/NativeErrorConstructor.h: + * runtime/NumberConstructor.cpp: + (JSC::NumberConstructor::getCallDataVirtual): + * runtime/NumberConstructor.h: + * runtime/ObjectConstructor.cpp: + (JSC::ObjectConstructor::getCallDataVirtual): + * runtime/ObjectConstructor.h: + * runtime/Operations.cpp: + (JSC::jsTypeStringForValue): + (JSC::jsIsObjectType): + (JSC::jsIsFunctionType): + * runtime/PropertySlot.cpp: + (JSC::PropertySlot::functionGetter): + * runtime/RegExpConstructor.cpp: + (JSC::RegExpConstructor::getCallDataVirtual): + * runtime/RegExpConstructor.h: + * runtime/StringConstructor.cpp: + (JSC::StringConstructor::getCallDataVirtual): + * runtime/StringConstructor.h: + * runtime/Structure.h: + +2011-10-08 Yuqiang Xian <yuqiang.xian@intel.com> + + DFG JIT - only Array predictions can result in unboxed cells in register file + https://bugs.webkit.org/show_bug.cgi?id=69695 + + Reviewed by Filip Pizlo. + + In current DFG JIT, only array predictions can result in unboxed cells + in register file, not for the other cell predictions. + + * dfg/DFGSpeculativeJIT.h: + (JSC::DFG::ValueSource::forPrediction): + +2011-10-07 Yuqiang Xian <yuqiang.xian@intel.com> + + bug fixes for ArrayPush and ArrayPop in 32_64 DFG JIT + https://bugs.webkit.org/show_bug.cgi?id=69696 + + Reviewed by Filip Pizlo. + + On 32-bit, we should use TimesEight (8) instead of ScalePtr (4) + to compute the address of a JS array element. + + * dfg/DFGSpeculativeJIT32_64.cpp: + (JSC::DFG::SpeculativeJIT::compile): + +2011-10-07 Mark Hahnenberg <mhahnenberg@apple.com> + + Add static version of JSCell::deleteProperty + https://bugs.webkit.org/show_bug.cgi?id=69659 + + Reviewed by Geoffrey Garen. + + Added static version of both versions of put to all classes that + override them and changed the virtual versions to call the static + versions. This is the first step in de-virtualizing JSCell::deleteProperty. + + * API/JSCallbackObject.h: + * API/JSCallbackObjectFunctions.h: + (JSC::::deleteProperty): + * debugger/DebuggerActivation.cpp: + (JSC::DebuggerActivation::deleteProperty): + * debugger/DebuggerActivation.h: + * runtime/Arguments.cpp: + (JSC::Arguments::deleteProperty): + * runtime/Arguments.h: + * runtime/JSActivation.cpp: + (JSC::JSActivation::deleteProperty): + * runtime/JSActivation.h: + * runtime/JSArray.cpp: + (JSC::JSArray::deleteProperty): + * runtime/JSArray.h: + * runtime/JSCell.cpp: + (JSC::JSCell::deleteProperty): + * runtime/JSCell.h: + * runtime/JSFunction.cpp: + (JSC::JSFunction::deleteProperty): + * runtime/JSFunction.h: + * runtime/JSNotAnObject.cpp: + (JSC::JSNotAnObject::deleteProperty): + * runtime/JSNotAnObject.h: + * runtime/JSObject.cpp: + (JSC::JSObject::deleteProperty): + * runtime/JSObject.h: + * runtime/JSVariableObject.cpp: + (JSC::JSVariableObject::deleteProperty): + * runtime/JSVariableObject.h: + * runtime/RegExpMatchesArray.h: + (JSC::RegExpMatchesArray::deleteProperty): + * runtime/StrictEvalActivation.cpp: + (JSC::StrictEvalActivation::deleteProperty): + * runtime/StrictEvalActivation.h: + * runtime/StringObject.cpp: + (JSC::StringObject::deleteProperty): + * runtime/StringObject.h: + +2011-10-07 Mark Hahnenberg <mhahnenberg@apple.com> + + Remove getCallDataVirtual methods + https://bugs.webkit.org/show_bug.cgi?id=69186 + + Reviewed by Geoffrey Garen. + + Removed all getCallDataVirtual methods and replaced their call sites + with an explicit lookup in the MethodTable. + + * API/JSCallbackFunction.cpp: + * API/JSCallbackFunction.h: + * API/JSCallbackObject.h: + * API/JSCallbackObjectFunctions.h: + * API/JSObjectRef.cpp: + (JSObjectIsFunction): + (JSObjectCallAsFunction): + * JavaScriptCore.exp: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * interpreter/Interpreter.cpp: + (JSC::Interpreter::privateExecute): + * jit/JITStubs.cpp: + (JSC::DEFINE_STUB_FUNCTION): + * runtime/ArrayConstructor.cpp: + * runtime/ArrayConstructor.h: + * runtime/BooleanConstructor.cpp: + * runtime/BooleanConstructor.h: + * runtime/DateConstructor.cpp: + * runtime/DateConstructor.h: + * runtime/Error.cpp: + (JSC::createTypeErrorFunction): + + Moved StrictModeTypeErrorFunction to Error.h in order to be able to include + the class definition in JSGlobalObject.cpp. + * runtime/Error.h: + (JSC::StrictModeTypeErrorFunction::StrictModeTypeErrorFunction): + (JSC::StrictModeTypeErrorFunction::create): + (JSC::StrictModeTypeErrorFunction::constructThrowTypeError): + (JSC::StrictModeTypeErrorFunction::getConstructData): + (JSC::StrictModeTypeErrorFunction::callThrowTypeError): + (JSC::StrictModeTypeErrorFunction::getCallData): + (JSC::StrictModeTypeErrorFunction::createStructure): + * runtime/ErrorConstructor.cpp: + * runtime/ErrorConstructor.h: + * runtime/FunctionConstructor.cpp: + * runtime/FunctionConstructor.h: + * runtime/FunctionPrototype.cpp: + * runtime/FunctionPrototype.h: + + To allow subclasses of InternalFunction (e.g. QtRuntimeMethod) to not have + to declare their own ClassInfo if they don't override getCallData, provided + an implementation that calls ASSERT_NOT_REACHED if called, providing roughly the same + functionality as of the pure virtual method InternalFunction used to have. + Also made this new implementation protected rather than private for the same reason. + Also added an ASSERT in InternalFunction::finishCreation to make sure that whatever + object is being created provides their own implementation of getCallData. This + just makes execution fail earlier in a place where the source of the error is + easy to trace. These ASSERTs are better than putting a null in the MethodTable because + they appear much more intentional to anybody who fails to provide their own + implementation or who tries to explicitly call InternalFunction::getCallData. + * runtime/InternalFunction.cpp: + (JSC::InternalFunction::finishCreation): + (JSC::InternalFunction::getCallData): + * runtime/InternalFunction.h: + * runtime/JSCell.cpp: + * runtime/JSCell.h: + * runtime/JSFunction.cpp: + * runtime/JSFunction.h: + + Added a global structure to JSGlobalObject for StrictModeTypeErrorFunction to enable + it to be reused rather than creating a new Structure every time we instantiate it. + * runtime/JSGlobalObject.cpp: + (JSC::JSGlobalObject::reset): + (JSC::JSGlobalObject::visitChildren): + * runtime/JSGlobalObject.h: + (JSC::JSGlobalObject::strictModeTypeErrorFunctionStructure): + * runtime/JSONObject.cpp: + (JSC::Stringifier::Stringifier): + (JSC::Stringifier::toJSON): + (JSC::Stringifier::appendStringifiedValue): + * runtime/JSObject.cpp: + (JSC::JSObject::put): + * runtime/JSObject.h: + (JSC::getCallData): + * runtime/NativeErrorConstructor.cpp: + * runtime/NativeErrorConstructor.h: + * runtime/NumberConstructor.cpp: + * runtime/NumberConstructor.h: + * runtime/ObjectConstructor.cpp: + * runtime/ObjectConstructor.h: + * runtime/Operations.cpp: + (JSC::jsTypeStringForValue): + (JSC::jsIsObjectType): + (JSC::jsIsFunctionType): + * runtime/PropertySlot.cpp: + (JSC::PropertySlot::functionGetter): + * runtime/RegExpConstructor.cpp: + * runtime/RegExpConstructor.h: + * runtime/StringConstructor.cpp: + * runtime/StringConstructor.h: + * runtime/Structure.h: + +2011-10-07 Oliver Hunt <oliver@apple.com> + + Add missing break statement. + + Reviewed by Gavin Barraclough. + + * dfg/DFGPropagator.cpp: + (JSC::DFG::Propagator::propagateNodePredictions): + +2011-10-07 Oliver Hunt <oliver@apple.com> + + Support some string intrinsics in the DFG JIT + https://bugs.webkit.org/show_bug.cgi?id=69678 + + Reviewed by Gavin Barraclough. + + Add support for charAt and charCodeAt intrinsics in the DFG. + + * create_hash_table: + * dfg/DFGByteCodeParser.cpp: + (JSC::DFG::ByteCodeParser::handleIntrinsic): + * dfg/DFGIntrinsic.h: + * dfg/DFGNode.h: + * dfg/DFGPropagator.cpp: + (JSC::DFG::Propagator::propagateNodePredictions): + (JSC::DFG::Propagator::performNodeCSE): + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::compileGetCharCodeAt): + * dfg/DFGSpeculativeJIT.h: + * dfg/DFGSpeculativeJIT32_64.cpp: + (JSC::DFG::SpeculativeJIT::compile): + * dfg/DFGSpeculativeJIT64.cpp: + (JSC::DFG::SpeculativeJIT::compile): + +2011-10-07 Mark Hahnenberg <mhahnenberg@apple.com> + + Add static version of JSCell::put + https://bugs.webkit.org/show_bug.cgi?id=69382 + + Reviewed by Geoffrey Garen. + + Added static version of both versions of put to all classes that + override them and changed the virtual versions to call the static + versions. + + * API/JSCallbackObject.h: + * API/JSCallbackObjectFunctions.h: + (JSC::::put): + * JavaScriptCore.exp: + * debugger/DebuggerActivation.cpp: + (JSC::DebuggerActivation::put): + * debugger/DebuggerActivation.h: + * runtime/Arguments.cpp: + (JSC::Arguments::put): + * runtime/Arguments.h: + * runtime/JSActivation.cpp: + (JSC::JSActivation::put): + * runtime/JSActivation.h: + * runtime/JSArray.cpp: + (JSC::JSArray::put): + * runtime/JSArray.h: + * runtime/JSByteArray.cpp: + (JSC::JSByteArray::put): + * runtime/JSByteArray.h: + * runtime/JSCell.cpp: + (JSC::JSCell::put): + * runtime/JSCell.h: + * runtime/JSFunction.cpp: + (JSC::JSFunction::put): + * runtime/JSFunction.h: + * runtime/JSGlobalObject.cpp: + (JSC::JSGlobalObject::put): + * runtime/JSGlobalObject.h: + * runtime/JSNotAnObject.cpp: + (JSC::JSNotAnObject::put): + * runtime/JSNotAnObject.h: + * runtime/JSObject.cpp: + (JSC::JSObject::put): + * runtime/JSObject.h: + * runtime/JSStaticScopeObject.cpp: + (JSC::JSStaticScopeObject::put): + * runtime/JSStaticScopeObject.h: + * runtime/ObjectPrototype.cpp: + (JSC::ObjectPrototype::put): + * runtime/ObjectPrototype.h: + * runtime/RegExpConstructor.cpp: + (JSC::RegExpConstructor::put): + * runtime/RegExpConstructor.h: + * runtime/RegExpMatchesArray.h: + (JSC::RegExpMatchesArray::put): + * runtime/RegExpObject.cpp: + (JSC::RegExpObject::put): + * runtime/RegExpObject.h: + * runtime/StringObject.cpp: + (JSC::StringObject::put): + * runtime/StringObject.h: + +2011-10-07 Gavin Barraclough <barraclough@apple.com> + + Refactor DFG to make for use of callOperation + https://bugs.webkit.org/show_bug.cgi?id=69672 + + Reviewed by Oliver Hunt. + + * dfg/DFGJITCodeGenerator.h: + (JSC::DFG::callOperation): + - Added new callOperation calls, don't ASSERT flushed (use helpers for unexpected calls, too). + * dfg/DFGOperations.cpp: + * dfg/DFGOperations.h: + - Switch operationNewObject/operationCreateThis to return Cells, + - Added C_DFGOperation_E/C_DFGOperation_EC/J_DFGOperation_EA/J_DFGOperation_EJA call types. + * dfg/DFGSpeculativeJIT32_64.cpp: + (JSC::DFG::SpeculativeJIT::compileLogicalNot): + (JSC::DFG::SpeculativeJIT::emitBranch): + (JSC::DFG::SpeculativeJIT::compile): + - Replace code plating calls to operations to with calls to callOperation. + * dfg/DFGSpeculativeJIT64.cpp: + (JSC::DFG::SpeculativeJIT::compileLogicalNot): + (JSC::DFG::SpeculativeJIT::emitBranch): + (JSC::DFG::SpeculativeJIT::compile): + - Replace code plating calls to operations to with calls to callOperation. + +2011-10-07 Oliver Hunt <oliver@apple.com> + + Support string indexing in the DFG + https://bugs.webkit.org/show_bug.cgi?id=69671 + + Reviewed by Gavin Barraclough. + + Emit code to support inline indexing of strings + + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::compileGetByValOnString): + Shared code to perform string indexing. + * dfg/DFGSpeculativeJIT.h: + * dfg/DFGSpeculativeJIT32_64.cpp: + (JSC::DFG::SpeculativeJIT::compile): + * dfg/DFGSpeculativeJIT64.cpp: + (JSC::DFG::SpeculativeJIT::compile): + Use compileGetByValOnString if we predict that the base object + is a string in GetByVal. + * runtime/JSString.h: + (JSC::JSString::offsetOfFiberCount): + (JSC::JSString::offsetOfValue): + +2011-10-07 Filip Pizlo <fpizlo@apple.com> + + DFG ConvertThis speculation logic is wrong + https://bugs.webkit.org/show_bug.cgi?id=69663 + + Reviewed by Oliver Hunt. + + * dfg/DFGPropagator.cpp: + (JSC::DFG::Propagator::fixupNode): + * dfg/DFGSpeculativeJIT32_64.cpp: + (JSC::DFG::SpeculativeJIT::compile): + * dfg/DFGSpeculativeJIT64.cpp: + (JSC::DFG::SpeculativeJIT::compile): + +2011-10-07 Oliver Hunt <oliver@apple.com> + + Verify that our call speculation is valid. + + Reviewed by Filip Pizlo. + + Before specialising an intrinsic we need to verify that + we our speculation is correct. + + * dfg/DFGByteCodeParser.cpp: + (JSC::DFG::ByteCodeParser::parseBlock): + +2011-10-07 Brent Fulgham <bfulgham@webkit.org> + + [WinCairo] Unreviewed build correction for the build bot. + + * JavaScriptCore.vcproj/JavaScriptCore.sln: Add the missing + Release_Cairo_CFLite and Debug_Cairo_CFLite targets so that + build-jsc can find the target it needs to run the JSC tests. + +2011-10-07 Oliver Hunt <oliver@apple.com> + + Fix 32-bit build. + + * jit/JITCall32_64.cpp: + (JSC::JIT::compileOpCall): + +2011-10-07 Oliver Hunt <oliver@apple.com> + + Support direct calls to intrinsic functions + https://bugs.webkit.org/show_bug.cgi?id=69646 + + Reviewed by Gavin Barraclough. + + Add support for optimising non-method_check calls + to intrinsic functions (eg. when Math.abs, etc are + cached in local variables). + + * bytecode/CodeBlock.h: + (JSC::getCallLinkInfoBytecodeIndex): + Support searching CallLinkInfos by bytecode index + * dfg/DFGByteCodeParser.cpp: + (JSC::DFG::ByteCodeParser::parseBlock): + Add support for linked calls in addition to method_check + when searching for intrinsics + * dfg/DFGNode.h: + (JSC::DFG::Node::hasFunctionCheckData): + (JSC::DFG::Node::function): + Add ability to store a JSFunction* in a node - this is safe + as the function will be marked by the codeblock we're compiling + * dfg/DFGPropagator.cpp: + (JSC::DFG::Propagator::propagateNodePredictions): + (JSC::DFG::Propagator::checkFunctionElimination): + (JSC::DFG::Propagator::performNodeCSE): + Add support for new CheckFunction node, and implement CSE pass. + * dfg/DFGSpeculativeJIT32_64.cpp: + (JSC::DFG::SpeculativeJIT::compile): + * dfg/DFGSpeculativeJIT64.cpp: + (JSC::DFG::SpeculativeJIT::compile): + Rather trivial implementation of CheckFunction + * jit/JIT.cpp: + (JSC::JIT::privateCompile): + * jit/JIT.h: + * jit/JITCall.cpp: + (JSC::JIT::compileOpCall): + * jit/JITCall32_64.cpp: + (JSC::JIT::compileOpCall): + Need to propagate bytecode index for calls now. + +2011-10-07 Dominic Cooney <dominicc@chromium.org> + + [JSC] Disable ThreadRestrictionVerifier for JIT ExecutableMemoryHandles + https://bugs.webkit.org/show_bug.cgi?id=69599 + + Reviewed by Sam Weinig. + + DFG JIT manipulates MetaAllocatorHandles across threads, eg in + allocating JITCode buffers on a background thread to execute a + proxy autoconfiguration PAC file but garbage collecting it in + response to allocation on the main thread. Disabling + ThreadRestrictionVerification until there is a verification scheme + that understands this handoff. + + * wtf/MetaAllocator.cpp: + (WTF::MetaAllocator::allocate): + +2011-10-06 Filip Pizlo <fpizlo@apple.com> + + DFG should not always speculate that ConvertThis is operating on an object + https://bugs.webkit.org/show_bug.cgi?id=69570 + + Reviewed by Oliver Hunt. + + Mostly neutral, but with a slight regression in Kraken since it increases + coverage in DFG and thus reveals some performance pathologies (which I + prefer to think of as performance opportunities, in a good way). + + * bytecode/PredictedType.cpp: + (JSC::predictionToString): + * bytecode/PredictedType.h: + (JSC::isOtherPrediction): + (JSC::mergePredictions): + * dfg/DFGPropagator.cpp: + (JSC::DFG::Propagator::propagateNodePredictions): + * dfg/DFGSpeculativeJIT32_64.cpp: + (JSC::DFG::SpeculativeJIT::compile): + * dfg/DFGSpeculativeJIT64.cpp: + (JSC::DFG::SpeculativeJIT::compile): + +2011-10-06 Mark Hahnenberg <mhahnenberg@apple.com> + + Windows build fix + + Unreviewed build fix. Weird runtime failures on Windows due to + linking issues caused by the ClassInfo struct in JSByteArray not + being declared with JS_EXPORTDATA. + + * runtime/JSByteArray.h: + +2011-10-06 Filip Pizlo <fpizlo@apple.com> + + Structure does not reset m_previous when pinning the property map + https://bugs.webkit.org/show_bug.cgi?id=69583 + + Reviewed by Gavin Barraclough. + + This is an 0.6% performance improvement in V8, and 0.2% overall. + + * runtime/Structure.cpp: + (JSC::Structure::changePrototypeTransition): + (JSC::Structure::despecifyFunctionTransition): + (JSC::Structure::getterSetterTransition): + (JSC::Structure::toDictionaryTransition): + (JSC::Structure::preventExtensionsTransition): + (JSC::Structure::addPropertyWithoutTransition): + (JSC::Structure::removePropertyWithoutTransition): + (JSC::Structure::pin): + * runtime/Structure.h: + +2011-10-06 Anders Carlsson <andersca@apple.com> + + When building with clang, enable -Wglobal-constructors and -Wexit-time-destructors + https://bugs.webkit.org/show_bug.cgi?id=69586 + + Reviewed by Darin Adler. + + * Configurations/Base.xcconfig: + Add -Wglobal-constructors and -Wexit-time-destructors when building with clang. + + * JavaScriptCore.xcodeproj/project.pbxproj: + When building with clang, we don't need to run the check-for-global-initializers and + check-for-exit-time-destructors anymore. + + * jsc.cpp: + (runInteractive): + Move interpreterName into runInteractive. + + * wtf/StdLibExtras.h: + When building with clang, disable the -Wglobal-constructors and -Wexit-time-destructors + warnings around the variable declaration. + +2011-10-06 Anders Carlsson <andersca@apple.com> + + Add DEFINE_DEBUG_ONLY_GLOBAL for globals that should be defined in debug builds + https://bugs.webkit.org/show_bug.cgi?id=69584 + + Reviewed by Darin Adler. + + Add DEFINE_DEBUG_ONLY_GLOBAL macro. + + * wtf/StdLibExtras.h: + +2011-10-06 Oliver Hunt <oliver@apple.com> + + Write barrier shouldn't allocate temporaries inside control flow + https://bugs.webkit.org/show_bug.cgi?id=69582 + + Reviewed by Gavin Barraclough. + + Reorder the code to avoid spill-related badness. + + * dfg/DFGJITCodeGenerator.cpp: + (JSC::DFG::JITCodeGenerator::writeBarrier): + +2011-10-06 Filip Pizlo <fpizlo@apple.com> + + DFG::shouldSpeculate methods are too complicated + https://bugs.webkit.org/show_bug.cgi?id=69560 + + Reviewed by Geoffrey Garen. + + Moved shouldSpeculate methods to DFG::Node, and cleaned them up to + just use node predictions. + + By itself this would have meant that SpeculativeJIT code would have + had to say things like m_jit.graph()[nodeIndex].shouldSpeculateXYZ(). + So this adds an at(NodeIndex) method to JITCodeGenerator. I replaced + all uses of the m_jit.graph()[nodeIndex] idiom with at(nodeIndex). + + This is an 0.4% progression overall that shows up in all benchmarks, + for reasons unknown. + + * dfg/DFGJITCodeGenerator.h: + (JSC::DFG::JITCodeGenerator::at): + (JSC::DFG::JITCodeGenerator::canReuse): + (JSC::DFG::JITCodeGenerator::isFilled): + (JSC::DFG::JITCodeGenerator::isFilledDouble): + (JSC::DFG::JITCodeGenerator::use): + (JSC::DFG::JITCodeGenerator::silentSpillFPR): + (JSC::DFG::JITCodeGenerator::silentFillGPR): + (JSC::DFG::JITCodeGenerator::silentFillFPR): + (JSC::DFG::detectPeepHoleBranch): + (JSC::DFG::integerResult): + (JSC::DFG::noResult): + (JSC::DFG::cellResult): + (JSC::DFG::jsValueResult): + (JSC::DFG::storageResult): + (JSC::DFG::doubleResult): + (JSC::DFG::initConstantInfo): + (JSC::DFG::appendCallWithExceptionCheck): + * dfg/DFGJITCodeGenerator32_64.cpp: + (JSC::DFG::JITCodeGenerator::fillInteger): + (JSC::DFG::JITCodeGenerator::fillDouble): + (JSC::DFG::JITCodeGenerator::fillJSValue): + (JSC::DFG::JITCodeGenerator::nonSpeculativeValueToNumber): + (JSC::DFG::JITCodeGenerator::nonSpeculativeValueToInt32): + (JSC::DFG::JITCodeGenerator::nonSpeculativeUInt32ToNumber): + (JSC::DFG::JITCodeGenerator::nonSpeculativeKnownConstantArithOp): + (JSC::DFG::JITCodeGenerator::nonSpeculativeBasicArithOp): + (JSC::DFG::JITCodeGenerator::nonSpeculativePeepholeBranchNull): + (JSC::DFG::JITCodeGenerator::nonSpeculativePeepholeBranch): + (JSC::DFG::JITCodeGenerator::nonSpeculativePeepholeStrictEq): + (JSC::DFG::JITCodeGenerator::emitCall): + * dfg/DFGJITCodeGenerator64.cpp: + (JSC::DFG::JITCodeGenerator::fillInteger): + (JSC::DFG::JITCodeGenerator::fillDouble): + (JSC::DFG::JITCodeGenerator::fillJSValue): + (JSC::DFG::JITCodeGenerator::nonSpeculativeValueToInt32): + (JSC::DFG::JITCodeGenerator::nonSpeculativePeepholeBranchNull): + (JSC::DFG::JITCodeGenerator::nonSpeculativePeepholeBranch): + (JSC::DFG::JITCodeGenerator::nonSpeculativePeepholeStrictEq): + (JSC::DFG::JITCodeGenerator::emitCall): + * dfg/DFGNode.h: + (JSC::DFG::Node::shouldSpeculateInteger): + (JSC::DFG::Node::shouldSpeculateDouble): + (JSC::DFG::Node::shouldSpeculateNumber): + (JSC::DFG::Node::shouldNotSpeculateInteger): + (JSC::DFG::Node::shouldSpeculateFinalObject): + (JSC::DFG::Node::shouldSpeculateFinalObjectOrOther): + (JSC::DFG::Node::shouldSpeculateArray): + (JSC::DFG::Node::shouldSpeculateArrayOrOther): + (JSC::DFG::Node::shouldSpeculateObject): + (JSC::DFG::Node::shouldSpeculateCell): + (JSC::DFG::Node::canSpeculateInteger): + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::compilePeepHoleDoubleBranch): + (JSC::DFG::SpeculativeJIT::compilePeepHoleObjectEquality): + (JSC::DFG::SpeculativeJIT::compilePeepHoleIntegerBranch): + (JSC::DFG::SpeculativeJIT::compilePeepHoleBranch): + (JSC::DFG::SpeculativeJIT::compile): + (JSC::DFG::SpeculativeJIT::checkArgumentTypes): + (JSC::DFG::SpeculativeJIT::computeValueRecoveryFor): + * dfg/DFGSpeculativeJIT.h: + (JSC::DFG::SpeculativeJIT::isInteger): + (JSC::DFG::SpeculativeJIT::isKnownArray): + (JSC::DFG::SpeculativeJIT::isKnownString): + * dfg/DFGSpeculativeJIT32_64.cpp: + (JSC::DFG::SpeculativeJIT::fillSpeculateIntInternal): + (JSC::DFG::SpeculativeJIT::fillSpeculateDouble): + (JSC::DFG::SpeculativeJIT::fillSpeculateCell): + (JSC::DFG::SpeculativeJIT::convertToDouble): + (JSC::DFG::SpeculativeJIT::compare): + (JSC::DFG::SpeculativeJIT::compileLogicalNot): + (JSC::DFG::SpeculativeJIT::emitBranch): + (JSC::DFG::SpeculativeJIT::compile): + * dfg/DFGSpeculativeJIT64.cpp: + (JSC::DFG::SpeculativeJIT::fillSpeculateIntInternal): + (JSC::DFG::SpeculativeJIT::fillSpeculateDouble): + (JSC::DFG::SpeculativeJIT::fillSpeculateCell): + (JSC::DFG::SpeculativeJIT::fillSpeculateBoolean): + (JSC::DFG::SpeculativeJIT::compare): + (JSC::DFG::SpeculativeJIT::compileLogicalNot): + (JSC::DFG::SpeculativeJIT::emitBranch): + (JSC::DFG::SpeculativeJIT::compile): + +2011-10-06 Gavin Peters <gavinp@chromium.org> + + REGRESSION (r96595): First frame in assertion backtraces is no longer labeled "1" + https://bugs.webkit.org/show_bug.cgi?id=69556 + + Reviewed by Adam Roben. + + * wtf/Assertions.cpp: + +2011-10-06 Filip Pizlo <fpizlo@apple.com> + + DFG implementation of UInt32ToNumber is missing a break statement + https://bugs.webkit.org/show_bug.cgi?id=69552 + + Reviewed by Oliver Hunt. + + * dfg/DFGSpeculativeJIT32_64.cpp: + (JSC::DFG::SpeculativeJIT::compile): + * dfg/DFGSpeculativeJIT64.cpp: + (JSC::DFG::SpeculativeJIT::compile): + +2011-10-06 Gavin Barraclough <barraclough@apple.com> + + Unreviewed build fix for DFG JIT 32_64 release builds. + + * dfg/DFGJITCompiler.cpp: + * dfg/DFGJITCompiler.h: + * dfg/DFGJITCompiler32_64.cpp: + - Remove three unused methods. + +2011-10-06 Gavin Barraclough <barraclough@apple.com> + + DFG JIT 32_64 should check type of values being filled by fillSpeculateInt + https://bugs.webkit.org/show_bug.cgi?id=69549 + + Reviewed by Oliver Hunt. + + This breaks sunspider/3d-cube. + + * dfg/DFGSpeculativeJIT32_64.cpp: + (JSC::DFG::SpeculativeJIT::fillSpeculateIntInternal): + - Speculation check on the tag. + +2011-10-06 Mark Hahnenberg <mhahnenberg@apple.com> + + Snow Leopard build fix + + Unreviewed build fix + + * JavaScriptCore.exp: + +2011-10-05 Gavin Barraclough <barraclough@apple.com> + + Add explicit JSGlobalThis type. + https://bugs.webkit.org/show_bug.cgi?id=69478 + + Reviewed by Darin Adler. + + JSC supports a split global object, as used by WebCore for the Window. As a stage + of making this visible to JSC, make it so that if the global this value is not the + global object itself, it must be a subclass of JSGlobalThis. + + * API/JSCallbackObjectFunctions.h: + (JSC::::finishCreation): + - Don't pass the thisValue to JSGlobalObject::finishCreation. + * JavaScriptCore.xcodeproj/project.pbxproj: + - Added JSGlobalThis.h + * jsc.cpp: + (GlobalObject::finishCreation): + - Don't pass the thisValue to JSGlobalObject::finishCreation. + * runtime/JSGlobalObject.h: + (JSC::JSGlobalObject::create): + (JSC::JSGlobalObject::finishCreation): + - finishCreation takes a JSGlobalThis, or thisValue is implicit. + * runtime/JSGlobalThis.h: Added. + (JSC::JSGlobalThis::create): + (JSC::JSGlobalThis::JSGlobalThis): + (JSC::JSGlobalThis::finishCreation): + - Thin wrapper on JSNonFinalObject to allow type checking. + * testRegExp.cpp: + (GlobalObject::finishCreation): + - Don't pass the thisValue to JSGlobalObject::finishCreation. + +2011-10-06 Mark Hahnenberg <mhahnenberg@apple.com> + + JSC objects need to know their own cell size at runtime. + https://bugs.webkit.org/show_bug.cgi?id=69390 + + Reviewed by Geoffrey Garen. + + Added the cellSize field to ClassInfo and the static calculation of + size of each class to the CREATE_METHOD_TABLE macro, which will be + renamed in a followup patch to make its name match its broader use. + + Also added a few ClassInfo structs so that each object that is allocated has its + correct size. + + * JavaScriptCore.exp: + * runtime/ClassInfo.h: + + Changed JSByteArray s_defaultInfo to s_info so that the template will get the + correct ClassInfo struct from it when it's allocated. + * runtime/JSByteArray.cpp: + * runtime/JSByteArray.h: + * runtime/JSCell.h: + (JSC::allocateCell): + * runtime/JSNotAnObject.cpp: + * runtime/JSNotAnObject.h: + * runtime/JSObject.cpp: + * runtime/JSObject.h: + (JSC::JSCell::cellSize): + * runtime/JSStaticScopeObject.cpp: + * runtime/JSStaticScopeObject.h: + * runtime/StrictEvalActivation.cpp: + * runtime/StrictEvalActivation.h: + +2011-10-06 Gavin Peters <gavinp@chromium.org> + + export new stack dumping method + https://bugs.webkit.org/show_bug.cgi?id=69018 + + The original landing of bug 69018 didn't export WTFGetBacktrace, so that when bug 69453 landed, the first use + of this function, many builds broke. So here we add the exports, so that the function is usable. + + Reviewed by Adam Roben. + + * JavaScriptCore.exp: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + +2011-10-06 Csaba Osztrogonác <ossy@webkit.org> + + REGRESSION(r96347): Build is broken with MSVC compiler if !PLATFORM(WINDOWS) + https://bugs.webkit.org/show_bug.cgi?id=69413 + + Reviewed by Darin Adler. + + * assembler/MacroAssemblerCodeRef.h: Define STDCALL for MSVC in a proper way. + +2011-10-05 Filip Pizlo <fpizlo@apple.com> + + SpeculativeJIT::isKnownString() is wrong + https://bugs.webkit.org/show_bug.cgi?id=69501 + + Reviewed by Oliver Hunt. + + Removed the wrong case (GetLocal predicted String) and added a case that + works (StrCat). + + * dfg/DFGSpeculativeJIT.h: + (JSC::DFG::SpeculativeJIT::isKnownString): + +2011-10-05 Ryosuke Niwa <rniwa@webkit.org> + + Windows build fix attempt after r96760. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + +2011-10-05 Chris Rogers <crogers@google.com> + + Define a log2f() function for Windows in wtf/MathExtras.h + https://bugs.webkit.org/show_bug.cgi?id=69491 + + Reviewed by Darin Adler. + + * wtf/MathExtras.h: + (log2f): + +2011-10-05 Jer Noble <jer.noble@apple.com> + + Enable WEB_AUDIO by default in the WebKit/mac port. + https://bugs.webkit.org/show_bug.cgi?id=68587 + + Reviewed by Simon Fraser. + + * Configurations/FeatureDefines.xcconfig: + * wtf/Platform.h: + +2011-10-05 Filip Pizlo <fpizlo@apple.com> + + Assertion hit in JSC::DFG::SpeculativeJIT::compile on SL bots + https://bugs.webkit.org/show_bug.cgi?id=69346 + + Reviewed by Oliver Hunt. + + Removed the assertion, since it was completely wrong for op_post_inc. + Short of having specialized PostInc nodes in the DFG, there is no + robust way of asserting what this assertion was trying to assert while + also supporting op_post_inc. + + * dfg/DFGByteCodeParser.cpp: + (JSC::DFG::ByteCodeParser::parseBlock): + * dfg/DFGSpeculativeJIT64.cpp: + (JSC::DFG::SpeculativeJIT::compile): + * dfg/DFGSpeculativeJIT32_64.cpp: + (JSC::DFG::SpeculativeJIT::compile): + +2011-10-05 Geoffrey Garen <ggaren@apple.com> + + Added a simpler mechanism for registering one-off finalizers + https://bugs.webkit.org/show_bug.cgi?id=69466 + + Reviewed by Oliver Hunt. + + * heap/Heap.cpp: + (JSC::Heap::addFinalizer): + (JSC::Heap::FinalizerOwner::finalize): + * heap/Heap.h: New function for adding an arbitrary finalizer for an + arbitrary cell without declaring any special classes or Handles yourself. + + * JavaScriptCore.exp: Fix build. + + * runtime/Executable.cpp: + (JSC::ExecutableBase::clearCode): + (JSC::ExecutableBase::clearCodeVirtual): + (JSC::EvalExecutable::clearCodeVirtual): + (JSC::ProgramExecutable::clearCodeVirtual): + (JSC::FunctionExecutable::discardCode): + (JSC::FunctionExecutable::clearCodeVirtual): + * runtime/Executable.h: + (JSC::ExecutableBase::finishCreation): Use the new mechanism for eager + finalization of executables. + + * runtime/JSGlobalObject.cpp: + (JSC::JSGlobalObject::clearRareData): + * runtime/JSGlobalObject.h: + (JSC::JSGlobalObject::createRareDataIfNeeded): + (JSC::JSGlobalObject::registerWeakMap): Use the new mechanism for eager + finalization of weak maps. + +2011-10-05 Adam Roben <aroben@apple.com> + + Ensure RetainPtr::hashTableDeletedValue returns a pointer, not a pointer to a pointer + + RetainPtr's behavior of allowing the template parameter to be either a pointer type or a + pointed-to type confused us when we implemented hashTableDeletedValue. + + Fixes <http://webkit.org/b/69414> <rdar://problem/10236833> Using RetainPtr as the key type + in HashMap/HashSet fails to compile + + Reviewed by John Sullivan. + + * wtf/RetainPtr.h: + (WTF::RetainPtr::hashTableDeletedValue): Changed to use the PtrType typedef rather than T*, + since T might itself be a pointer. + + (WTF::PtrHash<RetainPtr<P> >): Updated this to use PtrType everywhere, even though T* didn't + seem to be causing a problem. + +2011-10-05 Oliver Hunt <oliver@apple.com> + + Remove last vestiges of anonymous storage. + + Reviewed by Gavin Barraclough. + + One anonymous storage function escaped my prior purge of + this feature, this patch removes it. + + * runtime/JSGlobalObject.h: + (JSC::JSGlobalObject::finishCreation): + * runtime/JSObject.h: + +2011-10-04 Filip Pizlo <fpizlo@apple.com> + + DFG should be capable of a broader range of speculations on branch and not + https://bugs.webkit.org/show_bug.cgi?id=69322 + + Reviewed by Oliver Hunt. + + * bytecode/PredictedType.h: + (JSC::isFinalObjectOrOtherPrediction): + (JSC::isArrayOrOtherPrediction): + * dfg/DFGJITCodeGenerator.cpp: + * dfg/DFGJITCodeGenerator.h: + (JSC::DFG::JITCodeGenerator::JITCodeGenerator): + * dfg/DFGJITCodeGenerator32_64.cpp: + (JSC::DFG::JITCodeGenerator::fillDouble): + (JSC::DFG::JITCodeGenerator::fillJSValue): + * dfg/DFGJITCodeGenerator64.cpp: + (JSC::DFG::JITCodeGenerator::fillDouble): + (JSC::DFG::JITCodeGenerator::fillJSValue): + * dfg/DFGOperations.cpp: + * dfg/DFGSpeculativeJIT.h: + (JSC::DFG::SpeculativeJIT::shouldSpeculateFinalObjectOrOther): + (JSC::DFG::SpeculativeJIT::shouldSpeculateArrayOrOther): + (JSC::DFG::SpeculativeJIT::SpeculativeJIT): + * dfg/DFGSpeculativeJIT32_64.cpp: + (JSC::DFG::SpeculativeJIT::emitBranch): + * dfg/DFGSpeculativeJIT64.cpp: + (JSC::DFG::SpeculativeJIT::compileObjectOrOtherLogicalNot): + (JSC::DFG::SpeculativeJIT::compileLogicalNot): + (JSC::DFG::SpeculativeJIT::emitObjectOrOtherBranch): + (JSC::DFG::SpeculativeJIT::emitBranch): + +2011-10-05 Sheriff Bot <webkit.review.bot@gmail.com> + + Unreviewed, rolling out r96733. + http://trac.webkit.org/changeset/96733 + https://bugs.webkit.org/show_bug.cgi?id=69454 + + Broke GCC for some reason (Requested by andersca on #webkit). + + * wtf/ListHashSet.h: + (WTF::ListHashSetReverseIterator::ListHashSetReverseIterator): + (WTF::ListHashSetReverseIterator::get): + (WTF::ListHashSetReverseIterator::operator*): + (WTF::ListHashSetReverseIterator::operator->): + (WTF::ListHashSetReverseIterator::operator++): + (WTF::ListHashSetReverseIterator::operator--): + (WTF::ListHashSetReverseIterator::operator==): + (WTF::ListHashSetReverseIterator::operator!=): + (WTF::ListHashSetReverseIterator::operator const_reverse_iterator): + (WTF::ListHashSetReverseIterator::node): + (WTF::ListHashSetConstReverseIterator::ListHashSetConstReverseIterator): + (WTF::ListHashSetConstReverseIterator::get): + (WTF::ListHashSetConstReverseIterator::operator*): + (WTF::ListHashSetConstReverseIterator::operator->): + (WTF::ListHashSetConstReverseIterator::operator++): + (WTF::ListHashSetConstReverseIterator::operator--): + (WTF::ListHashSetConstReverseIterator::operator==): + (WTF::ListHashSetConstReverseIterator::operator!=): + (WTF::ListHashSetConstReverseIterator::node): + (WTF::::rbegin): + (WTF::::rend): + (WTF::::makeReverseIterator): + (WTF::::makeConstReverseIterator): + +2011-10-04 Oliver Hunt <oliver@apple.com> + + Add rudimentary filtering to write barriers + https://bugs.webkit.org/show_bug.cgi?id=69392 + + Reviewed by Filip Pizlo. + + Add approximate filtering for write barriers based on the + target's mark bit. Also add some macros to support dumping + GC phase timings. + + * dfg/DFGJITCodeGenerator.cpp: + (JSC::DFG::JITCodeGenerator::markCellCard): + * heap/Heap.cpp: + (JSC::GCTimer::GCTimerScope::GCTimerScope): + (JSC::GCTimer::GCTimerScope::~GCTimerScope): + (JSC::Heap::markRoots): + (JSC::Heap::collect): + Add phase timing information. + * heap/MarkedBlock.h: + (JSC::MarkedBlock::offsetOfMarks): + (JSC::MarkedBlock::gatherDirtyCells): + * jit/JITPropertyAccess.cpp: + (JSC::JIT::emitWriteBarrier): + +2011-10-05 Anders Carlsson <andersca@apple.com> + + Use std::reverse_iterator for ListHashSet reverse iterators + https://bugs.webkit.org/show_bug.cgi?id=69446 + + Reviewed by Darin Adler. + + * wtf/ListHashSet.h: + Use the std::reverse_iterator iterator adaptor for the ListHashSet reverse iterators + and get rid of the ListHashSetReverseIterator and ListHashSetConstReverseIterator classes. + +2011-10-04 Gavin Barraclough <barraclough@apple.com> + + Make Object.prototype getter/setter methods match ES5 behaviour + https://bugs.webkit.org/show_bug.cgi?id=69393 + + Reviewed by Sam Weinig. + + The rest of Object.prototype no longer substitute Null/Undefined with the global object, + this is old ES3 behaviour. Remove it here too. + + * runtime/ObjectPrototype.cpp: + (JSC::objectProtoFuncDefineGetter): + (JSC::objectProtoFuncDefineSetter): + (JSC::objectProtoFuncLookupGetter): + (JSC::objectProtoFuncLookupSetter): + +2011-10-05 Patrick Gansterer <paroga@webkit.org> + + Get rid of posixThread in MachineStackMarker::Thread + https://bugs.webkit.org/show_bug.cgi?id=54836 + + Reviewed by Oliver Hunt. + + * heap/MachineStackMarker.cpp: + (JSC::MachineThreads::Thread::Thread): + (JSC::getCurrentPlatformThread): + (JSC::equalThread): + (JSC::MachineThreads::addCurrentThread): + (JSC::MachineThreads::removeCurrentThread): + (JSC::MachineThreads::gatherConservativeRoots): + +2011-10-04 Geoffrey Garen <ggaren@apple.com> + + Removed JSValue::toJSNumber + https://bugs.webkit.org/show_bug.cgi?id=69399 + + No perf. change. + + toJSNumber() used to provide an implicit fast path for immediate numbers, + but those fast paths are all explicit now, so it's just cruft. + + * interpreter/Interpreter.cpp: + (JSC::Interpreter::privateExecute): + * jit/JITStubs.cpp: + (JSC::DEFINE_STUB_FUNCTION): + * runtime/JSValue.h: + * runtime/JSValueInlineMethods.h: + +2011-10-05 Gavin Peters <gavinp@chromium.org> + + REGRESSION (r96595): WTFReportBacktrace listed as the top frame in all assertion backtraces + https://bugs.webkit.org/show_bug.cgi?id=69424 + + Skip an extra frame in WTFReportBacktrace. As well, I now don't count skipped frames in maxFrames, + so I've updated maxFrames to 31, as with one skipped frame the previous value was effectively + 31 reported frames. + + Reviewed by Adam Roben. + + * wtf/Assertions.cpp: + * wtf/Assertions.h: + +2011-10-05 Patrick Gansterer <paroga@webkit.org> + + Unreviewed WinCE build fix for r96595. + + * wtf/Assertions.cpp: + RtlCaptureStackBackTrace() isn't available on WinCE. + +2011-10-04 Kent Tamura <tkent@chromium.org> + + Introduce feature flags for incomplete input types + https://bugs.webkit.org/show_bug.cgi?id=68971 + + Reviewed by Hajime Morita. + + * Configurations/FeatureDefines.xcconfig: + Add ENABLE_INPUT_TYPE_* flags. They are enabled only for iOS. + +2011-10-04 Geoffrey Garen <ggaren@apple.com> + + Build fix. + + * jit/JITStubs.cpp: + (JSC::DEFINE_STUB_FUNCTION): Use an explicit cast when shortening. + +2011-10-04 Mark Hahnenberg <mhahnenberg@apple.com> + + Add static ClassInfo structs to classes that override JSCell::getCallData + https://bugs.webkit.org/show_bug.cgi?id=69311 + + Reviewed by Darin Adler. + + Added ClassInfo structs to each class that defined its own getCallData + function but did not already have its own ClassInfo struct. This is a + necessary addition for when we switch over to looking up getCallData from + the MethodTable in ClassInfo rather than doing the virtual call (which we + are removing). These new ClassInfo structs are public because we often + use these structs in other areas of the code to uniquely identify JSC classes and + to enforce runtime invariants based on those class identities using ASSERTs. + Also added new createStructure methods to those classes that didn't have + them so that the new ClassInfo structs would be used when creating the Structures + in these classes. + + * runtime/BooleanConstructor.cpp: + * runtime/BooleanConstructor.h: + (JSC::BooleanConstructor::createStructure): + + getCallData was not marked as static in StrictModeTypeErrorFunction. + * runtime/Error.cpp: + (JSC::StrictModeTypeErrorFunction::getCallDataVirtual): + (JSC::StrictModeTypeErrorFunction::getCallData): + (JSC::StrictModeTypeErrorFunction::createStructure): + * runtime/ErrorConstructor.cpp: + * runtime/ErrorConstructor.h: + (JSC::ErrorConstructor::createStructure): + * runtime/FunctionConstructor.cpp: + * runtime/FunctionConstructor.h: + (JSC::FunctionConstructor::createStructure): + * runtime/FunctionPrototype.cpp: + * runtime/FunctionPrototype.h: + +2011-10-03 Geoffrey Garen <ggaren@apple.com> + + Some JSValue cleanup + https://bugs.webkit.org/show_bug.cgi?id=69320 + + Reviewed by Darin Adler. + + No measurable performance change. + + Removed some JSValue::get* functions. get* used to be an optimization + when every value operation was a virtual function call: get* would combine + two virtual calls into one. Now, with non-virtual, inlined functions, get* + isn't faster, and may be slightly slower. + + Merged getBoolean(bool&) and getBoolean() into asBoolean(). + + Merged uncheckedGetNumber(), getJSNumber() and getNumber() into + asNumber(). + + * runtime/JSValue.h: + * runtime/JSValueInlineMethods.h: + (JSC::JSValue::asNumber): + (JSC::JSValue::asBoolean): As promised! + + * runtime/NumberPrototype.cpp: + (JSC::toThisNumber): + (JSC::numberProtoFuncToExponential): + (JSC::numberProtoFuncToFixed): + (JSC::numberProtoFuncToPrecision): + (JSC::numberProtoFuncToString): + (JSC::numberProtoFuncToLocaleString): + (JSC::numberProtoFuncValueOf): Removed a bunch of uses of getJSNumber() + by switching to toThisNumber(). + + * API/JSCallbackObjectFunctions.h: + (JSC::::toNumber): + * dfg/DFGGraph.h: + (JSC::DFG::Graph::valueOfNumberConstant): + (JSC::DFG::Graph::valueOfBooleanConstant): + * dfg/DFGOperations.cpp: + (JSC::DFG::putByVal): + * interpreter/Interpreter.cpp: + (JSC::Interpreter::privateExecute): + * jit/JITStubs.cpp: + (JSC::DEFINE_STUB_FUNCTION): + * runtime/DateInstance.h: + (JSC::DateInstance::internalNumber): + * runtime/FunctionPrototype.cpp: + (JSC::functionProtoFuncBind): + * runtime/JSArray.cpp: + (JSC::compareNumbersForQSort): Replaced getNumber() => isNumber() / asNumber(). + getBoolean() => isBoolean() / asBoolean(), uncheckedGetNumber() => asNumber(). + + * runtime/JSCell.cpp: + * runtime/JSCell.h: Nixed getJSNumber(). + + * runtime/JSGlobalObjectFunctions.cpp: + (JSC::globalFuncParseInt): + * runtime/JSONObject.cpp: + (JSC::gap): + (JSC::Stringifier::Stringifier): + (JSC::Stringifier::appendStringifiedValue): + * runtime/NumberObject.cpp: + * runtime/NumberObject.h: + (JSC::NumberObject::createStructure): + * runtime/Operations.h: + (JSC::JSValue::equalSlowCaseInline): + (JSC::JSValue::strictEqual): + (JSC::jsLess): + (JSC::jsLessEq): + (JSC::jsAdd): Replaced getNumber() => isNumber() / asNumber(). + getBoolean() => isBoolean() / asBoolean(), uncheckedGetNumber() => asNumber(). + +2011-10-04 Scott Graham <scottmg@chromium.org> + + Add GAMEPAD feature flag + https://bugs.webkit.org/show_bug.cgi?id=66859 + + Reviewed by Darin Fisher. + + * Configurations/FeatureDefines.xcconfig: + +2011-10-03 Filip Pizlo <fpizlo@apple.com> + + JITCodeGenerator should no longer have code that tries too hard + to be both speculative and non-speculative + https://bugs.webkit.org/show_bug.cgi?id=69321 + + Reviewed by Gavin Barraclough. + + Removed m_isSpeculative and speculationCheck() from JITCodeGenerator. + This required moving emitBranch() to SpeculativeJIT, since it was + the main user of that field and method. Other than trvial clean-ups + in emitBranch(), the code is unchanged (and still has some disparity + between 64 and 32_64, and still lacks some obvious optimizations). + + * dfg/DFGJITCodeGenerator.cpp: + * dfg/DFGJITCodeGenerator.h: + (JSC::DFG::JITCodeGenerator::JITCodeGenerator): + * dfg/DFGJITCodeGenerator32_64.cpp: + (JSC::DFG::JITCodeGenerator::fillDouble): + (JSC::DFG::JITCodeGenerator::fillJSValue): + * dfg/DFGJITCodeGenerator64.cpp: + (JSC::DFG::JITCodeGenerator::fillDouble): + (JSC::DFG::JITCodeGenerator::fillJSValue): + * dfg/DFGSpeculativeJIT.h: + (JSC::DFG::SpeculativeJIT::SpeculativeJIT): + * dfg/DFGSpeculativeJIT32_64.cpp: + (JSC::DFG::SpeculativeJIT::emitBranch): + * dfg/DFGSpeculativeJIT64.cpp: + (JSC::DFG::SpeculativeJIT::emitBranch): + +2011-10-04 David Hyatt <hyatt@apple.com> + + https://bugs.webkit.org/show_bug.cgi?id=69372 + + [CSS3 Regions] Make sure overflow:visible lets content spill out of regions. + + Add support for reverse iteration to ListHashSet to support being able to walk them + backwards easily. + + Reviewed by Anders Carlsson. + + * wtf/ListHashSet.h: + (WTF::ListHashSetReverseIterator::ListHashSetReverseIterator): + (WTF::ListHashSetReverseIterator::get): + (WTF::ListHashSetReverseIterator::operator*): + (WTF::ListHashSetReverseIterator::operator->): + (WTF::ListHashSetReverseIterator::operator++): + (WTF::ListHashSetReverseIterator::operator--): + (WTF::ListHashSetReverseIterator::operator==): + (WTF::ListHashSetReverseIterator::operator!=): + (WTF::ListHashSetReverseIterator::operator const_reverse_iterator): + (WTF::ListHashSetReverseIterator::node): + (WTF::ListHashSetConstReverseIterator::ListHashSetConstReverseIterator): + (WTF::ListHashSetConstReverseIterator::get): + (WTF::ListHashSetConstReverseIterator::operator*): + (WTF::ListHashSetConstReverseIterator::operator->): + (WTF::ListHashSetConstReverseIterator::operator++): + (WTF::ListHashSetConstReverseIterator::operator--): + (WTF::ListHashSetConstReverseIterator::operator==): + (WTF::ListHashSetConstReverseIterator::operator!=): + (WTF::ListHashSetConstReverseIterator::node): + (WTF::::rbegin): + (WTF::::rend): + (WTF::::makeReverseIterator): + (WTF::::makeConstReverseIterator): + (WTF::::makeConstIterator): + +2011-10-04 Gavin Peters <gavinp@chromium.org> + + fix gtk breakage caused by changeset 96595 + https://bugs.webkit.org/show_bug.cgi?id=69371 + + ews did not catch build breakage in the gtk WebKitPluginProcess target; this patch removes + the pretty printer on gtk, which should fix the build on that platform. + + Reviewed by NOBODY, this is a build fix. + + * wtf/Assertions.cpp: + +2011-10-04 Sheriff Bot <webkit.review.bot@gmail.com> + + Unreviewed, rolling out r96630. + http://trac.webkit.org/changeset/96630 + https://bugs.webkit.org/show_bug.cgi?id=69368 + + Caused assertion failures in validateCell (Requested by + mhahnenberg on #webkit). + + * runtime/BooleanConstructor.cpp: + * runtime/BooleanConstructor.h: + * runtime/Error.cpp: + (JSC::StrictModeTypeErrorFunction::getCallDataVirtual): + (JSC::StrictModeTypeErrorFunction::getCallData): + * runtime/ErrorConstructor.cpp: + * runtime/ErrorConstructor.h: + * runtime/FunctionConstructor.cpp: + * runtime/FunctionConstructor.h: + * runtime/FunctionPrototype.cpp: + * runtime/FunctionPrototype.h: + +2011-10-04 Mark Hahnenberg <mhahnenberg@apple.com> + + Add static ClassInfo structs to classes that override JSCell::getCallData + https://bugs.webkit.org/show_bug.cgi?id=69311 + + Reviewed by Darin Adler. + + Added ClassInfo structs to each class that defined its own getCallData + function but did not already have its own ClassInfo struct. This is a + necessary addition for when we switch over to looking up getCallData from + the MethodTable in ClassInfo rather than doing the virtual call (which we + are removing). These new ClassInfo structs are public because we often + use these structs in other areas of the code to uniquely identify JSC classes and + to enforce runtime invariants based on those class identities using ASSERTs. + + * runtime/BooleanConstructor.cpp: + * runtime/BooleanConstructor.h: + + getCallData was not marked as static is StrictModeTypeErrorFunction. + * runtime/Error.cpp: + (JSC::StrictModeTypeErrorFunction::getCallDataVirtual): + (JSC::StrictModeTypeErrorFunction::getCallData): + * runtime/ErrorConstructor.cpp: + * runtime/ErrorConstructor.h: + * runtime/FunctionConstructor.cpp: + * runtime/FunctionConstructor.h: + * runtime/FunctionPrototype.cpp: + * runtime/FunctionPrototype.h: + +2011-10-04 Ryosuke Niwa <rniwa@webkit.org> + + Leopard build fix after r96613. + + * wtf/Platform.h: + +2011-10-04 Mark Hahnenberg <mhahnenberg@apple.com> + + Implicitly add toString and valueOf to prototype when convertToType callback is provided + https://bugs.webkit.org/show_bug.cgi?id=69156 + + Reviewed by Geoffrey Garen. + + Added callbacks for toString and valueOf which are implicitly added to a client object's + prototype if they provide a convertToType callback when declaring their class through + the JSC API. + + * API/JSCallbackFunction.cpp: + (JSC::JSCallbackFunction::toStringCallback): + (JSC::JSCallbackFunction::valueOfCallback): + * API/JSCallbackFunction.h: + * API/JSClassRef.cpp: + (OpaqueJSClass::prototype): + * API/tests/testapi.js: + +2011-10-03 Jon Lee <jonlee@apple.com> + + Extend DOM WheelEvent to differentiate between physical and logical scroll directions + https://bugs.webkit.org/show_bug.cgi?id=68959 + <rdar://problem/10036688> + + Reviewed by Sam Weinig. + + * wtf/Platform.h: Added HAVE_INVERTED_WHEEL_EVENTS for Lion and later. + +2011-10-04 Csaba Osztrogonác <ossy@webkit.org> + + MinGW warning fix after r96286. + + Avoid redefining STDCALL, because STDCALL is also defined in mingw32/include/windef.h: + #define __stdcall __attribute__((stdcall)) + #define STDCALL __stdcall + + Reviewed by Tor Arne Vestbø. + + * assembler/MacroAssemblerCodeRef.h: + +2011-10-04 Gavin Peters <gavinp@chromium.org> + + add more stack dumping methods + https://bugs.webkit.org/show_bug.cgi?id=69018 + + In addition to WTFReportBacktrace, this adds the cross-platform WTFGetBacktrace, which lets + WebKit programmatically retrieve the current stack. This is useful if you need to add more + reporting to field crash report uploads, if you're tracking down an irreproducable bug, + for instance. + + Reviewed by Darin Adler. + + * wtf/Assertions.cpp: + * wtf/Assertions.h: + +2011-10-03 Filip Pizlo <fpizlo@apple.com> + + DFG should inline Array.push and Array.pop + https://bugs.webkit.org/show_bug.cgi?id=69314 + + Reviewed by Geoff Garen. + + Fix 32-bit. + + * dfg/DFGSpeculativeJIT32_64.cpp: + (JSC::DFG::SpeculativeJIT::compile): + +2011-10-03 Filip Pizlo <fpizlo@apple.com> + + DFG should inline Array.push and Array.pop + https://bugs.webkit.org/show_bug.cgi?id=69314 + + Reviewed by Oliver Hunt. + + 1% speed-up in V8 due to 6% speed-up in V8-deltablue. + + * assembler/MacroAssemblerX86_64.h: + (JSC::MacroAssemblerX86_64::storePtr): + * create_hash_table: + * dfg/DFGByteCodeParser.cpp: + (JSC::DFG::ByteCodeParser::handleIntrinsic): + (JSC::DFG::ByteCodeParser::parseBlock): + * dfg/DFGGraph.cpp: + (JSC::DFG::Graph::dump): + * dfg/DFGIntrinsic.h: + * dfg/DFGNode.h: + (JSC::DFG::Node::hasHeapPrediction): + * dfg/DFGOperations.cpp: + * dfg/DFGOperations.h: + * dfg/DFGPropagator.cpp: + (JSC::DFG::Propagator::propagateNodePredictions): + (JSC::DFG::Propagator::getByValLoadElimination): + (JSC::DFG::Propagator::getMethodLoadElimination): + * dfg/DFGSpeculativeJIT32_64.cpp: + (JSC::DFG::SpeculativeJIT::compile): + * dfg/DFGSpeculativeJIT64.cpp: + (JSC::DFG::SpeculativeJIT::compile): + +2011-10-03 Filip Pizlo <fpizlo@apple.com> + + JSC ASSERT Opening the Web Inspector + https://bugs.webkit.org/show_bug.cgi?id=69293 + + Reviewed by Oliver Hunt. + + If a polymorphic access structure list has a duplicated structure, then + don't crash. + + * dfg/DFGByteCodeParser.cpp: + (JSC::DFG::ByteCodeParser::parseBlock): + +2011-10-03 Gavin Barraclough <barraclough@apple.com> + + On X86, switch bucketCount into a register, timeoutCheck into memory + https://bugs.webkit.org/show_bug.cgi?id=69299 + + Reviewed by Geoff Garen. + + We don't have sufficient registers to keep both in registers, and DFG JIT will trample esi; + it doesn't matter if the bucketCount gets stomped on (in fact it may add to randomness!), + but it if the timeoutCheck gets trashed we may make calls out to the timout_check stub + function too frequently (regressing performance). This patch has no perf impact on sunspider. + + * JavaScriptCore.xcodeproj/project.pbxproj: + * assembler/MacroAssemblerX86.h: + (JSC::MacroAssemblerX86::branchAdd32): + (JSC::MacroAssemblerX86::branchSub32): + - Added branchSub32 with AbsoluteAddress. + * jit/JIT.cpp: + (JSC::JIT::emitTimeoutCheck): + - Keep timeout count in memory on X86. + * jit/JITInlineMethods.h: + (JSC::JIT::emitValueProfilingSite): + - remove X86 specific code, switch bucket count back into a register. + * jit/JITStubs.cpp: + - Stop initializing esi (it is no longer the timeoutCheck!) + * jit/JSInterfaceJIT.h: + - change definition of esi to be the bucketCountRegister. + * runtime/JSGlobalData.cpp: + (JSC::JSGlobalData::JSGlobalData): + * runtime/JSGlobalData.h: + - Add timeoutCount as a property to global data (the counter should be per-thread). + +2011-10-03 Filip Pizlo <fpizlo@apple.com> + + DFG backends don't have access to per-node predictions from the propagator + https://bugs.webkit.org/show_bug.cgi?id=69291 + + Reviewed by Oliver Hunt. + + Nodes now have two notion of predictions: the heap prediction, which is + what came directly from value profiling, and the propagator's predictions, + which arise out of abstract interpretation. Every node has a propagator + prediction, but not every node has a heap prediction; and there is no + guarantee that a node that has both will keep them consistent as the + propagator may have additional information available to it. + + This is performance neutral. + + * dfg/DFGGraph.cpp: + (JSC::DFG::Graph::dump): + * dfg/DFGGraph.h: + * dfg/DFGJITCompiler.h: + (JSC::DFG::JITCompiler::getPrediction): + * dfg/DFGNode.h: + (JSC::DFG::Node::Node): + (JSC::DFG::Node::hasHeapPrediction): + (JSC::DFG::Node::getHeapPrediction): + (JSC::DFG::Node::predictHeap): + (JSC::DFG::Node::prediction): + (JSC::DFG::Node::predict): + * dfg/DFGPropagator.cpp: + (JSC::DFG::Propagator::Propagator): + (JSC::DFG::Propagator::setPrediction): + (JSC::DFG::Propagator::mergePrediction): + (JSC::DFG::Propagator::propagateNodePredictions): + (JSC::DFG::Propagator::fixupNode): + (JSC::DFG::Propagator::isPredictedNumerical): + (JSC::DFG::Propagator::logicalNotIsPure): + (JSC::DFG::Propagator::setReplacement): + +2011-10-03 Jer Noble <jer.noble@apple.com> + + Unreviewed, rolling out r96526. + http://trac.webkit.org/changeset/96526 + https://bugs.webkit.org/show_bug.cgi?id=68587 + + WEB_AUDIO has numerous 64->32 bit casting warnings, causing + build breakages where -Wall is enabled. + + * Configurations/FeatureDefines.xcconfig: + * wtf/Platform.h: + +2011-10-03 Gavin Barraclough <barraclough@apple.com> + + Unreviewed build fix for DFG JIT 32_64. + + * dfg/DFGJITCompiler32_64.cpp: + (JSC::DFG::JITCompiler::exitSpeculativeWithOSR): + * dfg/DFGSpeculativeJIT32_64.cpp: + (JSC::DFG::SpeculativeJIT::compile): + +2011-10-02 Filip Pizlo <fpizlo@apple.com> + + DFG should speculate more aggressively on obvious cases on + polymorphic get_by_id + https://bugs.webkit.org/show_bug.cgi?id=69235 + + Reviewed by Oliver Hunt. + + This implements trivial polymorphic get_by_id. It also fixes + problems in the CSE for CheckStructure in the put_by_id + transition case. + + Doing this required knowing whether a polymorphic get_by_id stub + was doing a direct access rather than a call of some kind. + + Slight speed-up on Kraken and SunSpider. 0.5% speed-up in the + scaled mean of all benchmarks. + + * GNUmakefile.list.am: + * JavaScriptCore.xcodeproj/project.pbxproj: + * bytecode/Instruction.h: + (JSC::PolymorphicAccessStructureList::PolymorphicStubInfo::set): + (JSC::PolymorphicAccessStructureList::PolymorphicAccessStructureList): + * dfg/DFGByteCodeParser.cpp: + (JSC::DFG::ByteCodeParser::cellConstant): + (JSC::DFG::ByteCodeParser::parseBlock): + * dfg/DFGGraph.cpp: + (JSC::DFG::Graph::dump): + * dfg/DFGGraph.h: + (JSC::DFG::Graph::addStructureSet): + (JSC::DFG::Graph::addStructureTransitionData): + * dfg/DFGNode.h: + (JSC::DFG::StructureTransitionData::StructureTransitionData): + (JSC::DFG::Node::hasStructureTransitionData): + (JSC::DFG::Node::structureTransitionData): + (JSC::DFG::Node::hasStructureSet): + (JSC::DFG::Node::structureSet): + * dfg/DFGPropagator.cpp: + (JSC::DFG::Propagator::checkStructureLoadElimination): + (JSC::DFG::Propagator::performNodeCSE): + * dfg/DFGRepatch.cpp: + (JSC::DFG::tryBuildGetByIDList): + (JSC::DFG::tryBuildGetByIDProtoList): + * dfg/DFGSpeculativeJIT32_64.cpp: + (JSC::DFG::SpeculativeJIT::compile): + * dfg/DFGSpeculativeJIT64.cpp: + (JSC::DFG::SpeculativeJIT::compile): + * dfg/DFGStructureSet.h: Added. + (JSC::DFG::StructureSet::StructureSet): + (JSC::DFG::StructureSet::add): + (JSC::DFG::StructureSet::addAll): + (JSC::DFG::StructureSet::remove): + (JSC::DFG::StructureSet::contains): + (JSC::DFG::StructureSet::isSubsetOf): + (JSC::DFG::StructureSet::isSupersetOf): + (JSC::DFG::StructureSet::size): + (JSC::DFG::StructureSet::at): + (JSC::DFG::StructureSet::operator[]): + (JSC::DFG::StructureSet::last): + * jit/JITPropertyAccess.cpp: + (JSC::JIT::privateCompileGetByIdSelfList): + (JSC::JIT::privateCompileGetByIdProtoList): + (JSC::JIT::privateCompileGetByIdChainList): + * jit/JITPropertyAccess32_64.cpp: + (JSC::JIT::privateCompileGetByIdSelfList): + (JSC::JIT::privateCompileGetByIdProtoList): + (JSC::JIT::privateCompileGetByIdChainList): + * jit/JITStubs.cpp: + (JSC::DEFINE_STUB_FUNCTION): + (JSC::getPolymorphicAccessStructureListSlot): + +2011-10-03 Jer Noble <jer.noble@apple.com> + + Enable WEB_AUDIO by default in the WebKit/mac port. + https://bugs.webkit.org/show_bug.cgi?id=68587 + + Reviewed by Simon Fraser. + + * Configurations/FeatureDefines.xcconfig: + * wtf/Platform.h: + +2011-10-03 Carlos Garcia Campos <cgarcia@igalia.com> + + [GTK] Fix make distcheck build + https://bugs.webkit.org/show_bug.cgi?id=69243 + + Reviewed by Martin Robinson. + + * GNUmakefile.list.am: + +2011-10-03 Pierre Rossi <pierre.rossi@gmail.com> + + [Qt] Build fix: Qt::escape is deprecated in Qt5 + https://bugs.webkit.org/show_bug.cgi?id=69162 + + Use QString::toHtmlEscaped in the Qt5 case. + + Reviewed by Andreas Kling. + + * JavaScriptCore.pri: + * wtf/qt/UtilsQt.h: Added. + (escapeHtml): + * wtf/wtf.pri: + +2011-10-03 Balazs Kelemen <kbalazs@webkit.org> + + libdispatch based ParallelJobs is not enough parallel + https://bugs.webkit.org/show_bug.cgi?id=66378 + + Reviewed by Zoltan Herczeg. + + Use the appropriate libdispatch API for our use case. + Throw away the hard coded limit of parallel threads + and use dispatch_apply with the default priority normal + queue istead of using our own custom serial queue (which + was a misuse of the API). Enabling PARALLEL_JOBS is now + a 60% win (2.63x as fast) on the methanol benchmark + (https://gitorious.org/methanol) with an SVG centric test set + while the old implementation was almost identical (less than 5% win). + + * wtf/ParallelJobsLibdispatch.h: + (WTF::ParallelEnvironment::ParallelEnvironment): + (WTF::ParallelEnvironment::execute): + +2011-10-02 Zoltan Herczeg <zherczeg@webkit.org> + + [Qt]REGRESSION(r95912): It made sputnik tests flakey + https://bugs.webkit.org/show_bug.cgi?id=68990 + + Reviewed by Geoffrey Garen. + + Changing signed char to int in r96354 solved the + problem. However transitionCount still returns + with a signed char and should be changed to int. + + * runtime/Structure.h: + (JSC::Structure::transitionCount): + +2011-10-02 Filip Pizlo <fpizlo@apple.com> + + DFG misses some obvious opportunities for common subexpression elimination + https://bugs.webkit.org/show_bug.cgi?id=69233 + + Reviewed by Oliver Hunt. + + 0.7% speed-up on SunSpider. + + * dfg/DFGPropagator.cpp: + (JSC::DFG::Propagator::getByValLoadElimination): + (JSC::DFG::Propagator::getMethodLoadElimination): + (JSC::DFG::Propagator::checkStructureLoadElimination): + (JSC::DFG::Propagator::getByOffsetLoadElimination): + (JSC::DFG::Propagator::getPropertyStorageLoadElimination): + (JSC::DFG::Propagator::performNodeCSE): + +2011-10-02 Gavin Barraclough <barraclough@apple.com> + + Bug 67455 - Different regular expression result + + Reviewed by Darin Adler. + + Fix a regression introduced in r72140. A return was added to the backtracking loop for + backtrackParentheses with QuantifierNonGreedy, so it always returns after one iteration. + This is incorrect. The additional return should only trigger to force an early return if + an error has occured. + + * yarr/YarrInterpreter.cpp: + (JSC::Yarr::Interpreter::matchParentheses): + - Simplify some nested if else logic. + (JSC::Yarr::Interpreter::backtrackParentheses): + - Simplify some nested if else logic. + - Only return early from backtrackParentheses on success/error, not on failure. + +2011-10-01 Geoffrey Garen <ggaren@apple.com> + + Removed redundant helper functions for allocating Strong handles + https://bugs.webkit.org/show_bug.cgi?id=69218 + + Reviewed by Sam Weinig. + + * heap/Heap.h: + (JSC::Heap::handleHeap): + * runtime/JSGlobalData.h: Removed these helper functions, since they + just created indirection. + + * heap/StrongInlines.h: Added. Broke out a header for inline functions + to resolve circular dependencies created by inlining. I'm told this is + the future for JavaScriptCore. + + * GNUmakefile.list.am: + * JavaScriptCore.gypi: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: Go forth and build. + + * API/JSCallbackObjectFunctions.h: + (JSC::::init): + * runtime/WeakGCMap.h: + (JSC::WeakGCMap::add): + (JSC::WeakGCMap::set): + * runtime/StructureTransitionTable.h: + (JSC::StructureTransitionTable::setSingleTransition): + * heap/Local.h: + (JSC::::Local): + * heap/Strong.h: + (JSC::::Strong): + (JSC::::set): + * heap/Weak.h: + (JSC::Weak::Weak): + (JSC::Weak::set): Allocate handles directly instead of going through a + chain of forwarding functions. + + * bytecompiler/BytecodeGenerator.cpp: + * runtime/JSGlobalData.cpp: + * runtime/LiteralParser.cpp: + * runtime/RegExpCache.cpp: Updated for header changes. + +2011-09-30 Filip Pizlo <fpizlo@apple.com> + + All of JSC's heuristics should be in one place for easier tuning + https://bugs.webkit.org/show_bug.cgi?id=69201 + + Reviewed by Oliver Hunt. + + This makes it possible to change tiered compilation heuristics in + one place (Heuristics.cpp) without recompiling the whole project. + + It also makes it possible to enable setting heuristics using + environment variables. This is off by default. When turned on, it + makes tuning the system much easier. + + * CMakeLists.txt: + * GNUmakefile.list.am: + * JavaScriptCore.pro: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * bytecode/CodeBlock.cpp: + (JSC::CodeBlock::shouldOptimizeNow): + * bytecode/CodeBlock.h: + * dfg/DFGJITCompiler.cpp: + (JSC::DFG::JITCompiler::exitSpeculativeWithOSR): + * jit/JIT.cpp: + (JSC::JIT::emitOptimizationCheck): + * runtime/Heuristics.cpp: Added. + (JSC::Heuristics::parse): + (JSC::Heuristics::setHeuristic): + (JSC::Heuristics::initializeHeuristics): + * runtime/Heuristics.h: Added. + * runtime/InitializeThreading.cpp: + (JSC::initializeThreadingOnce): + +2011-10-01 Oliver Hunt <oliver@apple.com> + + Support string length in the DFG + https://bugs.webkit.org/show_bug.cgi?id=69215 + + Reviewed by Geoff Garen. + + Adds a GetStringLength node to the DFG so that we can support + string.length inline. + + * dfg/DFGNode.h: + * dfg/DFGPropagator.cpp: + (JSC::DFG::Propagator::propagateNodePredictions): + (JSC::DFG::Propagator::fixupNode): + (JSC::DFG::Propagator::performNodeCSE): + * dfg/DFGSpeculativeJIT.h: + (JSC::DFG::SpeculativeJIT::isKnownString): + * dfg/DFGSpeculativeJIT32_64.cpp: + (JSC::DFG::SpeculativeJIT::compile): + * dfg/DFGSpeculativeJIT64.cpp: + (JSC::DFG::SpeculativeJIT::compile): + * runtime/JSString.h: + (JSC::JSString::offsetOfLength): + +2011-10-01 Yuqiang Xian <yuqiang.xian@intel.com> + + JSVALUE32_64 DFG JIT - unboxed integers and cells in register file must be reboxed before exiting from DFG JIT + https://bugs.webkit.org/show_bug.cgi?id=69205 + + Reviewed by Gavin Barraclough. + + If there are unboxed integers and cells in register file (e.g. by SetLocal), + they must be reboxed before exiting from the speculative DFG JIT execution. + This patch also adds a new ValueSourceKind (CellInRegisterFile) and a new + ValueRecoveryTechnique (AlreadyInRegisterFileAsCell). + + * dfg/DFGJITCompiler32_64.cpp: + (JSC::DFG::JITCompiler::exitSpeculativeWithOSR): + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::ValueSource::dump): + (JSC::DFG::ValueRecovery::dump): + (JSC::DFG::SpeculativeJIT::computeValueRecoveryFor): + * dfg/DFGSpeculativeJIT.h: + (JSC::DFG::ValueSource::forPrediction): + (JSC::DFG::ValueRecovery::alreadyInRegisterFileAsUnboxedCell): + +2011-10-01 Sheriff Bot <webkit.review.bot@gmail.com> + + Unreviewed, rolling out r96421. + http://trac.webkit.org/changeset/96421 + https://bugs.webkit.org/show_bug.cgi?id=69206 + + It broke Qt-WK2 build (Requested by ossy on #webkit). + + * JavaScriptCore.pri: + * wtf/qt/UtilsQt.h: Removed. + * wtf/wtf.pri: + +2011-09-30 Daniel Bates <dbates@webkit.org> + + Attempt to fix the Apple Windows and WinCairo Debug builds after + <http://trac.webkit.org/changeset/96446> (https://bugs.webkit.org/show_bug.cgi?id=69203). + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Remove the symbol + ?toStrictThisObject@JSObject@JSC@@UBE?AVJSValue@2@PAVExecState@2@@Z since the + corresponding function, JSValue::toStrictThisObject(), was removed. + +2011-09-30 Yuqiang Xian <yuqiang.xian@intel.com> + + DFG operation results are not set correctly in JSVALUE32_64 DFG JIT + https://bugs.webkit.org/show_bug.cgi?id=69126 + + Reviewed by Gavin Barraclough. + + The setupResults routine has the bug of reversing the source and destination. + Also some other trivial (but stupid) bugs need to be fixed in JSVALUE32_64 DFG JIT. + + * dfg/DFGJITCodeGenerator.h: + (JSC::DFG::setupTwoStubArgs): + (JSC::DFG::setupResults): + * dfg/DFGJITCodeGenerator32_64.cpp: + (JSC::DFG::JITCodeGenerator::fillJSValue): + (JSC::DFG::JITCodeGenerator::nonSpeculativeValueToInt32): + (JSC::DFG::JITCodeGenerator::nonSpeculativeNonPeepholeCompare): + +2011-09-30 Gavin Barraclough <barraclough@apple.com> + + Remove toStrictThisObject, toThisString, toThisJSString + https://bugs.webkit.org/show_bug.cgi?id=69203 + + Rubber stamped by Sam Weinig + + These are no longer used. + + * JavaScriptCore.exp: + * runtime/JSActivation.cpp: + * runtime/JSActivation.h: + * runtime/JSObject.cpp: + * runtime/JSObject.h: + * runtime/JSStaticScopeObject.cpp: + * runtime/JSStaticScopeObject.h: + * runtime/JSValue.h: + * runtime/StrictEvalActivation.cpp: + * runtime/StrictEvalActivation.h: + +2011-09-30 Filip Pizlo <fpizlo@apple.com> + + DFG does not speculate aggressively enough on put_by_id + https://bugs.webkit.org/show_bug.cgi?id=69114 + + Reviewed by Oliver Hunt. + + This adds new nodes along with optimizations for those nodes: + + GetPropertyStorage: CheckStructure used to do both the structure + check and retrieve the storage pointer. Now CheckStructure just + checks the structure, and GetPropertyStorage retrieves the + storage pointer. + + PutStructure: Changes the structure, and has the expected store + to load optimization with CheckStructure. + + PutByOffset: Directly sets the value. Has store to load + optimization with GetByOffset. + + * dfg/DFGByteCodeParser.cpp: + (JSC::DFG::ByteCodeParser::cellConstant): + (JSC::DFG::ByteCodeParser::parseBlock): + * dfg/DFGGraph.cpp: + (JSC::DFG::Graph::dump): + * dfg/DFGJITCodeGenerator.cpp: + (JSC::DFG::JITCodeGenerator::writeBarrier): + * dfg/DFGJITCodeGenerator.h: + * dfg/DFGNode.h: + (JSC::DFG::Node::hasStructure): + (JSC::DFG::Node::hasStorageAccessData): + * dfg/DFGPropagator.cpp: + (JSC::DFG::Propagator::propagateNodePredictions): + (JSC::DFG::Propagator::impureCSE): + (JSC::DFG::Propagator::checkStructureLoadElimination): + (JSC::DFG::Propagator::getByOffsetLoadElimination): + (JSC::DFG::Propagator::getPropertyStorageLoadElimination): + (JSC::DFG::Propagator::eliminate): + (JSC::DFG::Propagator::performNodeCSE): + * dfg/DFGSpeculativeJIT32_64.cpp: + (JSC::DFG::SpeculativeJIT::compile): + * dfg/DFGSpeculativeJIT64.cpp: + (JSC::DFG::SpeculativeJIT::compile): + +2011-09-30 Gavin Barraclough <barraclough@apple.com> + + StringRecursionChecker should not work in terms of EncodedJSValue + https://bugs.webkit.org/show_bug.cgi?id=69188 + + Reviewed by Oliver Hunt. + + 0 is not the empty value on 32_64. + Code that casts literals to EncodedJSValues may be unsafe if we change our internal representation. + + * runtime/ArrayPrototype.cpp: + (JSC::arrayProtoFuncToString): + (JSC::arrayProtoFuncToLocaleString): + (JSC::arrayProtoFuncJoin): + * runtime/ErrorPrototype.cpp: + (JSC::errorProtoFuncToString): + * runtime/RegExpPrototype.cpp: + (JSC::regExpProtoFuncToString): + * runtime/StringRecursionChecker.cpp: + (JSC::StringRecursionChecker::throwStackOverflowError): + (JSC::StringRecursionChecker::emptyString): + * runtime/StringRecursionChecker.h: + (JSC::StringRecursionChecker::performCheck): + (JSC::StringRecursionChecker::earlyReturnValue): + +2011-09-30 Gavin Barraclough <barraclough@apple.com> + + DFG JIT, Branch on integer can always be a 32-bit compare. + https://bugs.webkit.org/show_bug.cgi?id=69174 + + Reviewed by Sam Weinig. + + if (shouldSpeculateInteger(node.child1()) && !isStrictInt32(node.child1())), + the JSVALUE64 JIT will currently compare all 64bits in the register, but in + these cases the DataFormat is always a JS boxed integer. In these cases we + can just compare the low 32bits anyway - no need to check the tag. + This allows the code to be unified with the JSVALUE32_64 JIT. + + * dfg/DFGSpeculativeJIT32_64.cpp: + (JSC::DFG::SpeculativeJIT::compile): + * dfg/DFGSpeculativeJIT64.cpp: + (JSC::DFG::SpeculativeJIT::compile): + +2011-09-30 Oliver Hunt <oliver@apple.com> + + Need a sensible GGC policy + + Reviewed by Geoff Garen. + + This replaces the existing random collection policy + with a deterministic policy based on nursery size. + + * heap/AllocationSpace.cpp: + (JSC::AllocationSpace::allocateSlowCase): + * heap/Heap.cpp: + (JSC::Heap::Heap): + (JSC::Heap::markRoots): + (JSC::Heap::collect): + * heap/Heap.h: + * heap/MarkedSpace.cpp: + (JSC::MarkedSpace::MarkedSpace): + (JSC::MarkedSpace::resetAllocator): + * heap/MarkedSpace.h: + (JSC::MarkedSpace::nurseryWaterMark): + (JSC::MarkedSpace::allocate): + +2011-09-30 Filip Pizlo <fpizlo@apple.com> + + DFG 32-bit support for op_call and op_construct causes + run-javascriptcore-tests to fail + https://bugs.webkit.org/show_bug.cgi?id=69171 + + Reviewed by Gavin Barraclough. + + This fixes one obvious bug that was causing test failures (no + support for dummy slow case for op_add in 32_64), and disables + op_call and op_construct by default. + + * dfg/DFGCapabilities.h: + (JSC::DFG::canCompileOpcode): + * jit/JITArithmetic32_64.cpp: + (JSC::JIT::emit_op_add): + (JSC::JIT::emitSlow_op_add): + +2011-09-30 Geoffrey Garen <ggaren@apple.com> + + Crash due to out of bounds read/write in MarkedSpace + https://bugs.webkit.org/show_bug.cgi?id=69148 + + This was a case of being surprised by a poorly aritulcated cell size limit, + plus an incorrect ASSERT guarding the cell size limit. + + Reviewed by Oliver Hunt. + + * heap/MarkedSpace.h: + (JSC::MarkedSpace::sizeClassFor): Changed heap size ranges to be inclusive, + since it makes the ranges easier to understand. + + Bumped up the max cell size to support the use case in this bug. Since the + atomSize is much bigger than it used to be, there isn't much accounting + cost to handling more size classes. + + Switched to FixedArray, to help catch SizeClass indexing bugs in the future. + + * heap/MarkedSpace.cpp: + (JSC::MarkedSpace::MarkedSpace): + (JSC::MarkedSpace::resetAllocator): + (JSC::MarkedSpace::canonicalizeCellLivenessData): Updated for size ranges + being inclusive. + +2011-09-30 Pierre Rossi <pierre.rossi@gmail.com> + + [Qt] Build fix: Qt::escape is deprecated in Qt5 + https://bugs.webkit.org/show_bug.cgi?id=69162 + + Use QString::toHtmlEscaped in the Qt5 case. + + Reviewed by Andreas Kling. + + * JavaScriptCore.pri: + * wtf/qt/UtilsQt.h: Added. + (escapeHtml): + * wtf/wtf.pri: + +2011-09-30 Yuqiang Xian <yuqiang.xian@intel.com> + + Fix bug in getHostCallReturnValue of DFG JIT on X86 + https://bugs.webkit.org/show_bug.cgi?id=69133 + + Reviewed by Gavin Barraclough. + + We need to insert the additional argument in the stack slot before + return address instead of simply pushing it afterwards. + Also getHostCallReturnValue* should be attributed as stdcall + to make the stack cleaned up by the callee. + + * dfg/DFGOperations.cpp: + +2011-09-30 Pierre Rossi <pierre.rossi@gmail.com> + + [Qt] wtf header files are unknown to Qt Creator + https://bugs.webkit.org/show_bug.cgi?id=69158 + + Adding the HEADERS variable in wtf.pri so that + the header files can be accessed easily. + + Reviewed by Andreas Kling. + + * wtf/wtf.pri: + +2011-09-30 Gavin Barraclough <barraclough@apple.com> + + Merge some more of DFGSpeculativeJIT 32_64/64 + https://bugs.webkit.org/show_bug.cgi?id=69164 + + Reviewed by Oliver Hunt. + + * dfg/DFGJITCodeGenerator.h: + * dfg/DFGJITCodeGenerator32_64.cpp: + * dfg/DFGJITCodeGenerator64.cpp: + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::compilePeepHoleBranch): + * dfg/DFGSpeculativeJIT.h: + * dfg/DFGSpeculativeJIT32_64.cpp: + (JSC::DFG::SpeculativeJIT::fillSpeculateIntInternal): + (JSC::DFG::SpeculativeJIT::compare): + (JSC::DFG::SpeculativeJIT::compileValueAdd): + (JSC::DFG::SpeculativeJIT::compileLogicalNot): + (JSC::DFG::SpeculativeJIT::compile): + * dfg/DFGSpeculativeJIT64.cpp: + (JSC::DFG::SpeculativeJIT::compare): + (JSC::DFG::SpeculativeJIT::compileValueAdd): + (JSC::DFG::SpeculativeJIT::compileLogicalNot): + (JSC::DFG::SpeculativeJIT::compile): + +2011-09-30 Mark Hahnenberg <mhahnenberg@apple.com> + + Add getCallData to MethodTable in ClassInfo + https://bugs.webkit.org/show_bug.cgi?id=69024 + + Reviewed by Sam Weinig. + + * JavaScriptCore.exp: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + + Added the getCallData to the MethodTable in the ClassInfo struct. + * runtime/ClassInfo.h: + +2011-09-29 Yuqiang Xian <yuqiang.xian@intel.com> + + Add op_call/op_constructor support to JSVALUE32_64 DFG JIT + https://bugs.webkit.org/show_bug.cgi?id=69120 + + Reviewed by Gavin Barraclough. + + Improve the coverage of JSVALUE32_64 DFG JIT. + + * dfg/DFGByteCodeParser.cpp: + (JSC::DFG::ByteCodeParser::parseBlock): + * dfg/DFGCapabilities.h: + (JSC::DFG::canCompileOpcode): + * dfg/DFGJITCodeGenerator.h: + (JSC::DFG::tagOfCallData): + (JSC::DFG::payloadOfCallData): + * dfg/DFGJITCodeGenerator32_64.cpp: + (JSC::DFG::JITCodeGenerator::emitCall): + +2011-09-29 Yuqiang Xian <yuqiang.xian@intel.com> + + DFG JIT - register not unlocked after usage in ArithDiv + https://bugs.webkit.org/show_bug.cgi?id=69122 + + Reviewed by Geoffrey Garen. + + Some allocated register is not unlocked after the usage in ArithDiv. + Also there's a typo in "ENBALE_DFG_CONSISTENTCY_CHECK". + + * dfg/DFGNode.h: + * dfg/DFGSpeculativeJIT32_64.cpp: + (JSC::DFG::SpeculativeJIT::compile): + * dfg/DFGSpeculativeJIT64.cpp: + (JSC::DFG::SpeculativeJIT::compile): + +2011-09-29 Mark Hahnenberg <mhahnenberg@apple.com> + + De-virtualize JSCell::toObject + https://bugs.webkit.org/show_bug.cgi?id=68937 + + Reviewed by Darin Adler. + + * JavaScriptCore.exp: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + + De-virtualized JSCell::toObject and changed its implementation to manually check the + cases for JSString and JSObject rather than leaving it up to the virtual method call. + * runtime/JSCell.cpp: + (JSC::JSCell::toObject): + * runtime/JSCell.h: + + Removed JSNotAnObject::toObject because the case for JSObject works for it. + Also removed JSObject::toObject because it was essentially the identity function, + which is not necessary since toObject is no longer virtual. + * runtime/JSNotAnObject.cpp: + * runtime/JSNotAnObject.h: + * runtime/JSObject.cpp: + * runtime/JSObject.h: + + De-virtualized JSObject::toObject and JSString::toObject. + * runtime/JSString.h: + +2011-09-29 Gavin Barraclough <barraclough@apple.com> + + Start refactoring DFGSpeculativeJIT + https://bugs.webkit.org/show_bug.cgi?id=69112 + + Reviewed by Oliver Hunt. + + Again, move JSVALUE64 code into a DFJSpeculativeJIT64.cpp + + * JavaScriptCore.xcodeproj/project.pbxproj: + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::ValueSource::dump): + (JSC::DFG::ValueRecovery::dump): + (JSC::DFG::OSRExit::OSRExit): + (JSC::DFG::OSRExit::dump): + (JSC::DFG::SpeculativeJIT::compilePeepHoleDoubleBranch): + (JSC::DFG::SpeculativeJIT::compilePeepHoleObjectEquality): + (JSC::DFG::SpeculativeJIT::compilePeepHoleIntegerBranch): + (JSC::DFG::SpeculativeJIT::compile): + (JSC::DFG::SpeculativeJIT::checkArgumentTypes): + (JSC::DFG::SpeculativeJIT::computeValueRecoveryFor): + * dfg/DFGSpeculativeJIT.h: + (JSC::DFG::SpeculativeJIT::emitAllocateJSFinalObject): + * dfg/DFGSpeculativeJIT32_64.cpp: + (JSC::DFG::SpeculativeJIT::compare): + * dfg/DFGSpeculativeJIT64.cpp: Copied from Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp. + (JSC::DFG::SpeculativeJIT::fillSpeculateIntInternal): + (JSC::DFG::SpeculativeJIT::fillSpeculateCell): + (JSC::DFG::SpeculativeJIT::compile): + +2011-09-29 Gavin Barraclough <barraclough@apple.com> + + Refactor out trivially duplicated code in DFGJITCodeGenerator. + https://bugs.webkit.org/show_bug.cgi?id=69109 + + Reviewed by Oliver Hunt. + + Some code is trivially redundant between DFGJITCodeGenerator.cpp & DFGJITCodeGenerator32_64.cpp + + Basically move a JSVALUE64 specific code into a new DFGJITCodeGenerator64.cpp, leave common code + in DFGJITCodeGenerator.cpp, and remove copies from DFGJITCodeGenerator32_64.cpp. + + For some function differences are trivial & make more sense to ifdef individually, and some + Operand methods make more sense left in DFGJITCodeGenerator.cpp alongside similar constructors. + + * JavaScriptCore.xcodeproj/project.pbxproj: + * dfg/DFGJITCodeGenerator.cpp: + (JSC::DFG::JITCodeGenerator::isKnownNotNumber): + (JSC::DFG::JITCodeGenerator::isKnownBoolean): + (JSC::DFG::JITCodeGenerator::writeBarrier): + (JSC::DFG::JITCodeGenerator::dump): + (JSC::DFG::JITCodeGenerator::checkConsistency): + (JSC::DFG::GPRTemporary::GPRTemporary): + (JSC::DFG::FPRTemporary::FPRTemporary): + * dfg/DFGJITCodeGenerator32_64.cpp: + * dfg/DFGJITCodeGenerator64.cpp: Copied from Source/JavaScriptCore/dfg/DFGJITCodeGenerator.cpp. + * dfg/DFGJITCompiler.h: + (JSC::DFG::JITCompiler::branchIfNotCell): + * dfg/DFGJITCompilerInlineMethods.h: + +2011-09-28 Filip Pizlo <fpizlo@apple.com> + + DFG JIT should infer which uses of a variable are not aliased + https://bugs.webkit.org/show_bug.cgi?id=68593 + + Reviewed by Oliver Hunt. + + This separates how a variable is stored (i.e. its virtual register) + from how it's predicted. Each variable now takes a + VariableAccessData as its operand, instead of the virtual register. + The VariableAccessData stores the operand and the prediction. If + multiple uses of a variable are aliased, their VariableAccessDatas + are unified. + + This also adds tracking of which argument values are used. It + correctly observes that an argument value is not used, if the + argument is assigned to inside the function before being used. + + This also adds tracking of which variables are live at the head of + a basic block, and separates that from a variable being live at the + tail. + + Finally, this communicates to both OSR entry and OSR exit code how + a variable is predicted at a particular point in the code, rather + than just communicating how it was predicted in the entire code + block (since with this patch there is no longer the notion of a + variable having just one prediction for a code block). + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * JavaScriptCore.vcproj/WTF/WTF.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * bytecode/ActionablePrediction.h: Added. + (JSC::actionablePredictionFromPredictedType): + (JSC::valueObeysPrediction): + (JSC::actionablePredictionToString): + (JSC::ActionablePredictions::ActionablePredictions): + (JSC::ActionablePredictions::setArgument): + (JSC::ActionablePredictions::argument): + (JSC::ActionablePredictions::setVariable): + (JSC::ActionablePredictions::variable): + (JSC::ActionablePredictions::argumentUpperBound): + (JSC::ActionablePredictions::variableUpperBound): + (JSC::ActionablePredictions::pack): + (JSC::ActionablePredictions::packVector): + * bytecode/CodeBlock.h: + * bytecode/PredictionTracker.h: + * dfg/DFGByteCodeParser.cpp: + (JSC::DFG::ByteCodeParser::newVariableAccessData): + (JSC::DFG::ByteCodeParser::getLocal): + (JSC::DFG::ByteCodeParser::setLocal): + (JSC::DFG::ByteCodeParser::getArgument): + (JSC::DFG::ByteCodeParser::setArgument): + (JSC::DFG::ByteCodeParser::parseBlock): + (JSC::DFG::ByteCodeParser::processPhiStack): + (JSC::DFG::ByteCodeParser::parse): + * dfg/DFGDriver.cpp: + (JSC::DFG::compile): + * dfg/DFGGraph.cpp: + (JSC::DFG::Graph::nameOfVariableAccessData): + (JSC::DFG::Graph::dump): + (JSC::DFG::Graph::predictArgumentTypes): + * dfg/DFGGraph.h: + (JSC::DFG::operandIsArgument): + (JSC::DFG::VariableRecord::setFirstTime): + (JSC::DFG::BasicBlock::BasicBlock): + (JSC::DFG::Graph::predict): + (JSC::DFG::Graph::getPrediction): + * dfg/DFGJITCompiler.h: + (JSC::DFG::JITCompiler::noticeOSREntry): + * dfg/DFGNode.h: + (JSC::DFG::Node::hasVariableAccessData): + (JSC::DFG::Node::hasLocal): + (JSC::DFG::Node::variableAccessData): + (JSC::DFG::Node::local): + * dfg/DFGOSREntry.cpp: + (JSC::DFG::prepareOSREntry): + * dfg/DFGOSREntry.h: + * dfg/DFGPropagator.cpp: + (JSC::DFG::Propagator::propagateNodePredictions): + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::ValueSource::dump): + (JSC::DFG::OSRExit::OSRExit): + (JSC::DFG::SpeculativeJIT::compile): + (JSC::DFG::SpeculativeJIT::checkArgumentTypes): + (JSC::DFG::SpeculativeJIT::computeValueRecoveryFor): + * dfg/DFGSpeculativeJIT.h: + (JSC::DFG::ValueSource::ValueSource): + (JSC::DFG::ValueSource::forPrediction): + (JSC::DFG::ValueSource::isSet): + (JSC::DFG::ValueSource::kind): + (JSC::DFG::ValueSource::nodeIndex): + (JSC::DFG::ValueSource::nodeIndexFromKind): + (JSC::DFG::ValueSource::kindFromNodeIndex): + (JSC::DFG::SpeculativeJIT::isKnownArray): + (JSC::DFG::SpeculativeJIT::computeValueRecoveryFor): + (JSC::DFG::SpeculativeJIT::SpeculativeJIT): + * dfg/DFGSpeculativeJIT32_64.cpp: + (JSC::DFG::OSRExit::OSRExit): + (JSC::DFG::SpeculativeJIT::compile): + (JSC::DFG::SpeculativeJIT::checkArgumentTypes): + (JSC::DFG::SpeculativeJIT::computeValueRecoveryFor): + * wtf/PackedIntVector.h: Added. + (WTF::PackedIntVector::PackedIntVector): + (WTF::PackedIntVector::operator=): + (WTF::PackedIntVector::size): + (WTF::PackedIntVector::ensureSize): + (WTF::PackedIntVector::resize): + (WTF::PackedIntVector::clearAll): + (WTF::PackedIntVector::get): + (WTF::PackedIntVector::set): + (WTF::PackedIntVector::mask): + * wtf/Platform.h: + * wtf/UnionFind.h: Added. + (WTF::UnionFind::UnionFind): + (WTF::UnionFind::find): + (WTF::UnionFind::unify): + +2011-09-29 Oliver Hunt <oliver@apple.com> + + Build fix. + + * heap/AllocationSpace.h: + +2011-09-29 Oliver Hunt <oliver@apple.com> + + Add logic to collect dirty objects as roots + https://bugs.webkit.org/show_bug.cgi?id=69100 + + Reviewed by Geoff Garen. + + This gives us the ability to walk all the MarkedBlocks in an + AllocationSpace and collect the dirty objects, and then use + them as GC roots. + + I also rearranged the order of these instructions because it + makes them smaller on some platforms with some card sizes. + + * dfg/DFGJITCodeGenerator.cpp: + (JSC::DFG::JITCodeGenerator::markCellCard): + * dfg/DFGJITCodeGenerator32_64.cpp: + (JSC::DFG::JITCodeGenerator::markCellCard): + * heap/AllocationSpace.cpp: + Tidy up the write barrier logic a bit. + (JSC::MarkedBlock::gatherDirtyObjects): + (JSC::TakeIfDirty::returnValue): + (JSC::TakeIfDirty::TakeIfDirty): + (JSC::TakeIfDirty::operator()): + (JSC::AllocationSpace::gatherDirtyObjects): + * heap/AllocationSpace.h: + * heap/CardSet.h: + (JSC::::isCardMarked): + (JSC::::clearCard): + * heap/Heap.cpp: + (JSC::Heap::markRoots): + * heap/Heap.h: + (JSC::Heap::writeBarrier): + * heap/MarkStack.cpp: + (JSC::SlotVisitor::visitChildren): + * heap/MarkedBlock.h: + (JSC::MarkedBlock::setDirtyObject): + (JSC::MarkedBlock::addressOfCardFor): + * heap/SlotVisitor.h: + * jit/JITPropertyAccess.cpp: + (JSC::JIT::emitWriteBarrier): + Tidy the write barrier a bit. + +2011-09-29 Gavin Barraclough <barraclough@apple.com> + + Unreviewed windows build fix. + + * assembler/MacroAssemblerCodeRef.h: + * dfg/DFGOperations.h: + +2011-09-29 Filip Pizlo <fpizlo@apple.com> + + Structure transitions involving many (> 64) properties sometimes cause structure corruption + https://bugs.webkit.org/show_bug.cgi?id=69102 + + Reviewed by Darin Adler. + + Made m_offset an int instead of a signed char. Changed the code to ensure that transitions + don't lead to the dictionary kind being forgotten. + + * runtime/Structure.cpp: + (JSC::Structure::Structure): + * runtime/Structure.h: + +2011-09-29 Yuqiang Xian <yuqiang.xian@intel.com> + + DFG operation calls should be stdcall in Linux JSVALUE32_64 DFG JIT + https://bugs.webkit.org/show_bug.cgi?id=69058 + + Reviewed by Gavin Barraclough. + + Also Fixed the stdcall FunctionPtr constructors to make them compiled correctly on Linux + + * assembler/MacroAssemblerCodeRef.h: + (JSC::FunctionPtr::FunctionPtr): + +2011-09-29 Mark Hahnenberg <mhahnenberg@apple.com> + + De-virtualize JSCell::visitChildrenVirtual and remove all other visitChildrenVirtual methods + https://bugs.webkit.org/show_bug.cgi?id=68839 + + Reviewed by Geoffrey Garen. + + Removed the remaining visitChildrenVirtual methods. This patch completes the process of + de-virtualizing visitChildren. + + * API/JSCallbackObject.h: + * JavaScriptCore.exp: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * debugger/DebuggerActivation.cpp: + * debugger/DebuggerActivation.h: + * runtime/Arguments.cpp: + * runtime/Arguments.h: + * runtime/Executable.cpp: + * runtime/Executable.h: + * runtime/GetterSetter.cpp: + * runtime/GetterSetter.h: + * runtime/JSActivation.cpp: + * runtime/JSActivation.h: + * runtime/JSArray.cpp: + * runtime/JSArray.h: + * runtime/JSFunction.cpp: + * runtime/JSFunction.h: + * runtime/JSGlobalObject.cpp: + * runtime/JSGlobalObject.h: + * runtime/JSObject.cpp: + * runtime/JSPropertyNameIterator.cpp: + * runtime/JSPropertyNameIterator.h: + * runtime/JSStaticScopeObject.cpp: + * runtime/JSStaticScopeObject.h: + * runtime/JSValue.h: + * runtime/NativeErrorConstructor.cpp: + * runtime/NativeErrorConstructor.h: + * runtime/RegExpObject.cpp: + * runtime/RegExpObject.h: + * runtime/Structure.cpp: + * runtime/Structure.h: + * runtime/StructureChain.cpp: + * runtime/StructureChain.h: + + Inlined the method table access and call to the visitChildren function (the only call sites + to visitChildren are here). + * heap/MarkStack.cpp: + (JSC::SlotVisitor::visitChildren): + + Changed the field name for the visitChildren function pointer to visitChildren (from + visitChildrenFunctionPtr) to make call sites less verbose. + * runtime/ClassInfo.h: + + Discovered JSBoundFunction doesn't have its own ClassInfo (it used JSFunction's ClassInfo) but + overrides visitChildren, so it needs to have its own ClassInfo. + * runtime/JSBoundFunction.cpp: + * runtime/JSBoundFunction.h: + + Had to move className up to make sure that the virtual destructor in JSObject wasn't + the first non-inline virtual method in JSObject (as per the comment in the file). + Also moved JSCell::visitChildrenVirtual into JSObject.h in order for it be inline-able + to mitigate the cost of an extra method call. + + Also added a convenience accessor function methodTable() to JSCell to return the MethodTable to make + call sites more concise. Implementation is inline in JSObject.h. + * runtime/JSObject.h: + (JSC::JSCell::methodTable): + * runtime/JSCell.h: + + Added an out of line virtual destructor to JSWrapperObject and ScopeChainNode to + appease the vtable gods. It refused to compile if there were no virtual methods in + both of these classes due to the presence of a weak vtable pointer. + * runtime/JSWrapperObject.cpp: + (JSC::JSWrapperObject::~JSWrapperObject): + * runtime/JSWrapperObject.h: + * runtime/ScopeChain.cpp: + (JSC::ScopeChainNode::~ScopeChainNode): + * runtime/ScopeChain.h: + +2011-09-29 Yuqiang Xian <yuqiang.xian@intel.com> + + Bug fixes for CreateThis, NewObject and GetByOffset in JSVALUE32_64 DFG JIT + https://bugs.webkit.org/show_bug.cgi?id=69075 + + Reviewed by Gavin Barraclough. + + * dfg/DFGSpeculativeJIT32_64.cpp: + (JSC::DFG::SpeculativeJIT::compile): + +2011-09-29 Yuqiang Xian <yuqiang.xian@intel.com> + + JSVALUE32_64 DFG JIT failed to be built on 32-bit Linux due to incorrect overloaded OpInfo constructor + https://bugs.webkit.org/show_bug.cgi?id=69054 + + Reviewed by Gavin Barraclough. + + size_t is equal to uint32_t on most 32-bit platforms, except for Mac OS. + + * dfg/DFGNode.h: + +2011-09-28 Filip Pizlo <fpizlo@apple.com> + + DFG checkArgumentTypes fails to check boolean predictions + https://bugs.webkit.org/show_bug.cgi?id=69059 + + Reviewed by Gavin Barraclough. + + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::checkArgumentTypes): + * dfg/DFGSpeculativeJIT32_64.cpp: + (JSC::DFG::SpeculativeJIT::checkArgumentTypes): + +2011-09-28 Gavin Barraclough <barraclough@apple.com> + + Build fix pt 2 for r96286. + + * assembler/MacroAssemblerCodeRef.h: + +2011-09-28 Ryosuke Niwa <rniwa@webkit.org> + + Build fix attempt for r96286. + + * assembler/MacroAssemblerCodeRef.h: + +2011-09-28 Gavin Barraclough <barraclough@apple.com> + + DFG JIT Operations on 32_64 should use stdcall calling convention. + https://bugs.webkit.org/show_bug.cgi?id=69046 + + Reviewed by Sam Weinig. + + All calls out are expecting stdcall conventions, but the default on OS X are cdecl. + Leave D_DFGOperation_DD calls as the one exception, since we want to be able to link + directly to std library functions like fmod - leave these calls obeying the default + platform calling convention. + + * assembler/MacroAssemblerCodeRef.h: + (JSC::FunctionPtr::FunctionPtr): + - Add implicit constructors for std calls. + * dfg/DFGJITCodeGenerator.h: + (JSC::DFG::callOperation): + - Make this work non-Mac platforms. + * dfg/DFGOperations.cpp: + (JSC::DFG::operationPutByValInternal): + * dfg/DFGOperations.h: + - Mark all operations as stdcalls. + +2011-09-28 Filip Pizlo <fpizlo@apple.com> + + DFG JIT falls back on numerical comparisons when it does not + recognize a prediction + https://bugs.webkit.org/show_bug.cgi?id=68977 + + Reviewed by Geoffrey Garen. + + This fixes both the way comparison implementations are selected. It + also fixes a bug where comparisons other than equality (like < or >) + on objects are compiled as if the comparison was equality. + + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::compare): + +2011-09-28 Gavin Barraclough <barraclough@apple.com> + + Implement callOperation(D_DFGOperation_DD) for DFG JIT 32_64 + https://bugs.webkit.org/show_bug.cgi?id=69026 + + Reviewed by Sam Weinig. + + * assembler/X86Assembler.h: + (JSC::X86Assembler::fstpl): + * dfg/DFGJITCodeGenerator.h: + (JSC::DFG::callOperation): + +2011-09-28 Gavin Barraclough <barraclough@apple.com> + + Merge bug#68580, bug#68932 for DFG JIT with JSVALUE32_64 + https://bugs.webkit.org/show_bug.cgi?id=69017 + + Reviewed by Oliver Hunt. + + * dfg/DFGJITCodeGenerator.h: + (JSC::DFG::callOperation): + * dfg/DFGOperations.cpp: + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::compile): + * dfg/DFGSpeculativeJIT32_64.cpp: + (JSC::DFG::SpeculativeJIT::emitAllocateJSFinalObject): + (JSC::DFG::SpeculativeJIT::compile): + +2011-09-28 Gavin Barraclough <barraclough@apple.com> + + https://bugs.webkit.org/show_bug.cgi?id=64679 + Fix bugs in Array.prototype this handling. + + Reviewed by Oliver Hunt. + + * runtime/ArrayPrototype.cpp: + (JSC::arrayProtoFuncJoin): + (JSC::arrayProtoFuncConcat): + (JSC::arrayProtoFuncPop): + (JSC::arrayProtoFuncPush): + (JSC::arrayProtoFuncReverse): + (JSC::arrayProtoFuncShift): + (JSC::arrayProtoFuncSlice): + (JSC::arrayProtoFuncSort): + (JSC::arrayProtoFuncSplice): + (JSC::arrayProtoFuncUnShift): + (JSC::arrayProtoFuncFilter): + (JSC::arrayProtoFuncMap): + (JSC::arrayProtoFuncEvery): + (JSC::arrayProtoFuncForEach): + (JSC::arrayProtoFuncSome): + (JSC::arrayProtoFuncReduce): + (JSC::arrayProtoFuncReduceRight): + (JSC::arrayProtoFuncIndexOf): + (JSC::arrayProtoFuncLastIndexOf): + - These methods should throw if this value is undefined. + +2011-09-27 Yuqiang Xian <yuqiang.xian@intel.com> + + Value profiling in baseline JIT for JSVALUE32_64 + https://bugs.webkit.org/show_bug.cgi?id=68750 + + Reviewed by Geoff Garen. + + * jit/JITArithmetic32_64.cpp: + (JSC::JIT::emit_op_mul): + (JSC::JIT::emit_op_div): + * jit/JITCall32_64.cpp: + (JSC::JIT::emit_op_call_put_result): + * jit/JITOpcodes32_64.cpp: + (JSC::JIT::emit_op_resolve): + (JSC::JIT::emit_op_resolve_base): + (JSC::JIT::emit_op_resolve_skip): + (JSC::JIT::emit_op_resolve_global): + (JSC::JIT::emitSlow_op_resolve_global): + (JSC::JIT::emit_op_resolve_with_base): + (JSC::JIT::emit_op_resolve_with_this): + * jit/JITPropertyAccess32_64.cpp: + (JSC::JIT::emit_op_method_check): + (JSC::JIT::emit_op_get_by_val): + (JSC::JIT::emitSlow_op_get_by_val): + (JSC::JIT::emit_op_get_by_id): + (JSC::JIT::emitSlow_op_get_by_id): + (JSC::JIT::emit_op_get_scoped_var): + (JSC::JIT::emit_op_get_global_var): + * jit/JITStubCall.h: + (JSC::JITStubCall::callWithValueProfiling): + +2011-09-28 Yuqiang Xian <yuqiang.xian@intel.com> + + Wrong integer checks in JSVALUE32_64 DFG JIT + https://bugs.webkit.org/show_bug.cgi?id=68985 + + Reviewed by Geoffrey Garen. + + * dfg/DFGJITCodeGenerator32_64.cpp: + (JSC::DFG::JITCodeGenerator::fillDouble): + * dfg/DFGSpeculativeJIT32_64.cpp: + (JSC::DFG::SpeculativeJIT::fillSpeculateDouble): + +2011-09-28 Adam Barth <abarth@webkit.org> + + Remove empty directories. + + * wtf/brew: Removed. + * wtf/unicode/brew: Removed. + +2011-09-27 Filip Pizlo <fpizlo@apple.com> + + DFG JIT cannot compile op_new_object, op_new_array, + op_new_array_buffer, or op_new_regexp + https://bugs.webkit.org/show_bug.cgi?id=68580 + + Reviewed by Oliver Hunt. + + This implements all four opcodes, but has op_new_regexp turns off + by default because it unveils some bad speculation logic when + compiling string-validate-input. + + With op_new_regexp turned off, this is a 5% win on Kraken and a + 0.7% speed-up on V8. Neutral on SunSpider. + + * dfg/DFGByteCodeParser.cpp: + (JSC::DFG::ByteCodeParser::parseBlock): + * dfg/DFGCapabilities.h: + (JSC::DFG::canCompileOpcode): + * dfg/DFGJITCodeGenerator.h: + (JSC::DFG::callOperation): + * dfg/DFGNode.h: + (JSC::DFG::Node::hasConstantBuffer): + (JSC::DFG::Node::startConstant): + (JSC::DFG::Node::numConstants): + (JSC::DFG::Node::hasRegexpIndex): + (JSC::DFG::Node::regexpIndex): + * dfg/DFGOperations.cpp: + * dfg/DFGOperations.h: + * dfg/DFGPropagator.cpp: + (JSC::DFG::Propagator::propagateNodePredictions): + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::emitAllocateJSFinalObject): + (JSC::DFG::SpeculativeJIT::compile): + * dfg/DFGSpeculativeJIT.h: + (JSC::DFG::SpeculativeJIT::isKnownArray): + +2011-09-27 Filip Pizlo <fpizlo@apple.com> + + DFG JIT should speculate more aggressively on reads of array.length + https://bugs.webkit.org/show_bug.cgi?id=68932 + + Reviewed by Oliver Hunt. + + This is a 2% speed-up on Kraken, neutral elsewhere. + + * dfg/DFGNode.h: + * dfg/DFGPropagator.cpp: + (JSC::DFG::Propagator::propagateNodePredictions): + (JSC::DFG::Propagator::fixupNode): + (JSC::DFG::Propagator::performNodeCSE): + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::compile): + +2011-09-27 Gavin Barraclough <barraclough@apple.com> + + DFG JIT - merge changes between 95905 - 96175 + https://bugs.webkit.org/show_bug.cgi?id=68963 + + Reviewed by Sam Weinig. + + Merge missing changes from bug#68677, bug#68784, bug#68785. + + * dfg/DFGJITCompiler32_64.cpp: + (JSC::DFG::JITCompiler::exitSpeculativeWithOSR): + (JSC::DFG::JITCompiler::compileEntry): + (JSC::DFG::JITCompiler::compileBody): + * dfg/DFGSpeculativeJIT32_64.cpp: + (JSC::DFG::SpeculativeJIT::compile): + +2011-09-27 Gavin Barraclough <barraclough@apple.com> + + Get JSVALUE32_64 DFG JIT building on OS X. + https://bugs.webkit.org/show_bug.cgi?id=68961 + + Reviewed by Geoff Garen. + + * Merge bug #68763 (DFG JIT should not eagerly initialize integer tags in the register file). + * Forward-declare functions in DFGOperations.cpp + * UNUSED_PARAM for unused arguments + * NO_RETURN for unimplemented function that ASSERT_NOT_REACHED + * Fix argument types handled by OpInfo constructor. + * Use SYMBOL_STRING instead of STRINGIZE for asm symbols. + * Add files to Xcode project. + +2011-09-27 Yuqiang Xian <yuqiang.xian@intel.com> + + Bug fixes for GetById, PutById, and GetByOffset in JSVALUE32_64 DFG JIT + https://bugs.webkit.org/show_bug.cgi?id=68755 + + Reviewed by Gavin Barraclough. + + We need to load/store and repatch both tag and payload of a property + for GetById/PutById. Also reorder the loads of tag and payload for + GetByOffset as the result tag GPR could reuse the storage GPR. + + * bytecode/StructureStubInfo.h: + * dfg/DFGJITCodeGenerator32_64.cpp: + (JSC::DFG::JITCodeGenerator::cachedGetById): + (JSC::DFG::JITCodeGenerator::cachedPutById): + * dfg/DFGJITCompiler.h: + (JSC::DFG::JITCompiler::addPropertyAccess): + (JSC::DFG::JITCompiler::PropertyAccessRecord::PropertyAccessRecord): + * dfg/DFGJITCompiler32_64.cpp: + (JSC::DFG::JITCompiler::link): + * dfg/DFGRepatch.cpp: + (JSC::DFG::dfgRepatchByIdSelfAccess): + * dfg/DFGSpeculativeJIT32_64.cpp: + (JSC::DFG::SpeculativeJIT::compile): + +2011-09-24 Gavin Barraclough <barraclough@apple.com> + + Macro assembler branch8 & 16 methods vary in treatment of upper bits + https://bugs.webkit.org/show_bug.cgi?id=68301 + + Reviewed by Sam Weinig. + + Fix for branch16 - remove it! + No performance impact. + + * assembler/MacroAssembler.h: + * assembler/MacroAssemblerARM.h: + * assembler/MacroAssemblerARMv7.h: + * assembler/MacroAssemblerMIPS.h: + * assembler/MacroAssemblerSH4.h: + * assembler/MacroAssemblerX86Common.h: + * yarr/YarrJIT.cpp: + (JSC::Yarr::YarrGenerator::jumpIfCharNotEquals): + (JSC::Yarr::YarrGenerator::generatePatternCharacterOnce): + (JSC::Yarr::YarrGenerator::generatePatternCharacterFixed): + (JSC::Yarr::YarrGenerator::generatePatternCharacterGreedy): + (JSC::Yarr::YarrGenerator::backtrackPatternCharacterNonGreedy): + +2011-09-27 Mark Hahnenberg <mhahnenberg@apple.com> + + Add static version of JSCell::getCallData + https://bugs.webkit.org/show_bug.cgi?id=68741 + + Reviewed by Darin Adler. + + In this patch we just extract the bodies of the virtual getCallData methods + throughout the JSCell inheritance hierarchy out into static methods, which are + now called from the virtual methods. This is an intermediate step in trying to + move the virtual-ness of getCallData into our own method table stored in + ClassInfo. We need to convert the methods to static methods because static methods + can be represented as function pointers rather than pointers to member functions, and + function pointers are smaller and faster to call than pointers to member functions. + + * API/JSCallbackFunction.cpp: + (JSC::JSCallbackFunction::getCallDataVirtual): + (JSC::JSCallbackFunction::getCallData): + * API/JSCallbackFunction.h: + * API/JSCallbackObject.h: + * API/JSCallbackObjectFunctions.h: + (JSC::::getCallDataVirtual): + (JSC::::getCallData): + * API/JSObjectRef.cpp: + (JSObjectIsFunction): + (JSObjectCallAsFunction): + * JavaScriptCore.exp: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * interpreter/Interpreter.cpp: + (JSC::Interpreter::privateExecute): + * jit/JITStubs.cpp: + (JSC::DEFINE_STUB_FUNCTION): + * runtime/ArrayConstructor.cpp: + (JSC::ArrayConstructor::getCallDataVirtual): + (JSC::ArrayConstructor::getCallData): + * runtime/ArrayConstructor.h: + * runtime/BooleanConstructor.cpp: + (JSC::BooleanConstructor::getCallDataVirtual): + (JSC::BooleanConstructor::getCallData): + * runtime/BooleanConstructor.h: + * runtime/DateConstructor.cpp: + (JSC::DateConstructor::getCallDataVirtual): + (JSC::DateConstructor::getCallData): + * runtime/DateConstructor.h: + * runtime/Error.cpp: + (JSC::StrictModeTypeErrorFunction::getCallDataVirtual): + (JSC::StrictModeTypeErrorFunction::getCallData): + * runtime/ErrorConstructor.cpp: + (JSC::ErrorConstructor::getCallDataVirtual): + (JSC::ErrorConstructor::getCallData): + * runtime/ErrorConstructor.h: + * runtime/FunctionConstructor.cpp: + (JSC::FunctionConstructor::getCallDataVirtual): + (JSC::FunctionConstructor::getCallData): + * runtime/FunctionConstructor.h: + * runtime/FunctionPrototype.cpp: + (JSC::FunctionPrototype::getCallDataVirtual): + (JSC::FunctionPrototype::getCallData): + * runtime/FunctionPrototype.h: + * runtime/InternalFunction.h: + * runtime/JSCell.cpp: + (JSC::JSCell::getCallDataVirtual): + (JSC::JSCell::getCallData): + * runtime/JSCell.h: + (JSC::getCallData): + * runtime/JSFunction.cpp: + (JSC::JSFunction::getCallDataVirtual): + (JSC::JSFunction::getCallData): + * runtime/JSFunction.h: + * runtime/JSONObject.cpp: + (JSC::Stringifier::Stringifier): + (JSC::Stringifier::toJSON): + (JSC::Stringifier::appendStringifiedValue): + * runtime/JSObject.cpp: + (JSC::JSObject::put): + * runtime/NativeErrorConstructor.cpp: + (JSC::NativeErrorConstructor::getCallDataVirtual): + (JSC::NativeErrorConstructor::getCallData): + * runtime/NativeErrorConstructor.h: + * runtime/NumberConstructor.cpp: + (JSC::NumberConstructor::getCallDataVirtual): + (JSC::NumberConstructor::getCallData): + * runtime/NumberConstructor.h: + * runtime/ObjectConstructor.cpp: + (JSC::ObjectConstructor::getCallDataVirtual): + (JSC::ObjectConstructor::getCallData): + * runtime/ObjectConstructor.h: + * runtime/Operations.cpp: + (JSC::jsTypeStringForValue): + (JSC::jsIsObjectType): + (JSC::jsIsFunctionType): + * runtime/PropertySlot.cpp: + (JSC::PropertySlot::functionGetter): + * runtime/RegExpConstructor.cpp: + (JSC::RegExpConstructor::getCallDataVirtual): + (JSC::RegExpConstructor::getCallData): + * runtime/RegExpConstructor.h: + * runtime/StringConstructor.cpp: + (JSC::StringConstructor::getCallDataVirtual): + (JSC::StringConstructor::getCallData): + * runtime/StringConstructor.h: + +2011-09-27 Tim Horton <timothy_horton@apple.com> + + Rapidly refreshing a feMorphology[erode] with r=0 can sometimes cause display corruption + https://bugs.webkit.org/show_bug.cgi?id=68816 + <rdar://problem/10186468> + + Reviewed by Simon Fraser. + + Add ByteArray::clear, which zeros the memory in the ByteArray. + + * wtf/ByteArray.h: + (WTF::ByteArray::clear): Added. + +2011-09-27 Sheriff Bot <webkit.review.bot@gmail.com> + + Unreviewed, rolling out r96131. + http://trac.webkit.org/changeset/96131 + https://bugs.webkit.org/show_bug.cgi?id=68927 + + It made 18+ tests crash on all platform (Requested by + Ossy_night on #webkit). + + * JavaScriptCore.exp: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * interpreter/Interpreter.cpp: + (JSC::Interpreter::throwException): + * interpreter/Interpreter.h: + * jsc.cpp: + (GlobalObject::finishCreation): + * parser/Parser.h: + (JSC::Parser::parse): + * runtime/CommonIdentifiers.h: + * runtime/Error.cpp: + (JSC::addErrorInfo): + * runtime/Error.h: + +2011-09-27 Mark Hahnenberg <mhahnenberg@apple.com> + + De-virtualize JSCell::getPrimitiveNumber + https://bugs.webkit.org/show_bug.cgi?id=68851 + + Reviewed by Darin Adler. + + * JavaScriptCore.exp: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + + Changed JSCell::getPrimitiveNumber to manually handle the dispatch for + JSCells (JSObject and JSString in this case). + * runtime/JSCell.cpp: + (JSC::JSCell::getPrimitiveNumber): + * runtime/JSCell.h: + + Removed JSNotAnObject::getPrimitiveNumber since its return value doesn't + matter and it already implements defaultValue, so JSObject::getPrimitiveNumber + can cover the case for JSNotAnObject. + * runtime/JSNotAnObject.cpp: + * runtime/JSNotAnObject.h: + + De-virtualized JSObject::getPrimitiveNumber and JSString::getPrimitiveNumber + and changed them to be const. Also made JSString::getPrimitiveNumber public + because it needs to be called from JSCell::getPrimitiveNumber and also since it's + no longer virtual, we want people who have a more specific pointer (JSString* + instead of JSCell*) to not have to pay the cost of a virtual method call. + * runtime/JSObject.cpp: + (JSC::JSObject::getPrimitiveNumber): + * runtime/JSObject.h: + * runtime/JSString.cpp: + (JSC::JSString::getPrimitiveNumber): + * runtime/JSString.h: + +2011-09-27 Juan Carlos Montemayor Elosua <j.mont@me.com> + + Implement Error.stack + https://bugs.webkit.org/show_bug.cgi?id=66994 + + Reviewed by Oliver Hunt. + + This patch utilizes topCallFrame to create a stack trace when + an error is thrown. Users will also be able to use the stack() + command in jsc to get arrays with stack trace information. + + * JavaScriptCore.exp: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * interpreter/Interpreter.cpp: + (JSC::getCallerLine): + (JSC::getSourceURLFromCallFrame): + (JSC::getStackFrameCodeType): + (JSC::Interpreter::getStackTrace): + (JSC::Interpreter::throwException): + * interpreter/Interpreter.h: + (JSC::StackFrame::toString): + * jsc.cpp: + (GlobalObject::finishCreation): + (functionJSCStack): + * parser/Parser.h: + (JSC::Parser::parse): + * runtime/CommonIdentifiers.h: + * runtime/Error.cpp: + (JSC::addErrorInfo): + * runtime/Error.h: + +2011-09-27 Carlos Garcia Campos <cgarcia@igalia.com> + + [GTK] Reorganize header files + https://bugs.webkit.org/show_bug.cgi?id=65616 + + Reviewed by Martin Robinson. + + Install header files under $libwebkitgtkincludedir/JavaScriptCore. + + * GNUmakefile.am: Use $libwebkitgtkincludedir. + * javascriptcoregtk.pc.in: Use webkitgtk-<api-version> as include dir. + +2011-09-26 Geoffrey Garen <ggaren@apple.com> + + REGRESSION (r95912): Conservative marking doesn't filter out pointers to + MarkedBlock metadata + https://bugs.webkit.org/show_bug.cgi?id=68860 + + Reviewed by Oliver Hunt. + + Bencher says no performance change, maybe a 7% speedup on kraken-imaging-darkroom. + + * heap/MarkedBlock.h: + (JSC::MarkedBlock::isAtomAligned): Renamed atomMask to atomAlignment mask + because the mask doesn't produce the actual atom number. + + (JSC::MarkedBlock::isLiveCell): Testing just for alignment isn't good + enough; we also need to test that a pointer is beyond the metadata section + of a MarkedBlock, to avoid treating random metadata as a JSCell. + +2011-09-26 Mark Hahnenberg <mhahnenberg@apple.com> + + Make JSCell::toBoolean non-virtual + https://bugs.webkit.org/show_bug.cgi?id=67727 + + Reviewed by Geoffrey Garen. + + JSCell::toBoolean now manually performs the toBoolean check for objects and strings (where + before it was simply virtual and would crash if its implementation was called). + Its descendants in JSObject and JSString have also been made non-virtual. JSCell now + explicitly covers all cases of toBoolean, so having a virtual implementation of + JSCell::toBoolean is no longer necessary. This is part of a larger process of un-virtualizing JSCell. + + * JavaScriptCore.exp: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * runtime/JSCell.cpp: + * runtime/JSCell.h: + * runtime/JSNotAnObject.cpp: + * runtime/JSNotAnObject.h: + * runtime/JSObject.h: + * runtime/JSString.h: + (JSC::JSCell::toBoolean): + (JSC::JSValue::toBoolean): + +2011-09-26 Chris Marrin <cmarrin@apple.com> + + Enable requestAnimationFrame on Windows + https://bugs.webkit.org/show_bug.cgi?id=68397 + + Reviewed by Simon Fraser. + + Enabled REQUEST_ANIMATION_FRAME_TIMER for Windows + + * wtf/Platform.h: + +2011-09-26 Noel Gordon <noel.gordon@gmail.com> + + [Chromium] Remove DFGAliasTracker.h references from gyp project files + https://bugs.webkit.org/show_bug.cgi?id=68787 + + Reviewed by Geoffrey Garen. + + DFG/DFGAliasTracker.h was removed in r95389. Cleanup (remove) references + to that file from the gyp project files. + + * JavaScriptCore.gypi: + +2011-09-26 Zoltan Herczeg <zherczeg@webkit.org> + + [Qt]REGRESSION(r95865): It made 4 tests crash + https://bugs.webkit.org/show_bug.cgi?id=68780 + + Reviewed by Oliver Hunt. + + emitJumpSlowCaseIfNotJSCell(...) cannot be moved + away since the next load depends on it. + + * jit/JITPropertyAccess32_64.cpp: + (JSC::JIT::emit_op_put_by_val): + +2011-09-25 Mark Hahnenberg <mhahnenberg@apple.com> + + Add custom vtable struct to ClassInfo struct + https://bugs.webkit.org/show_bug.cgi?id=68567 + + Reviewed by Oliver Hunt. + + Declared/defined the MethodTable struct and added it to the ClassInfo struct. + Also defined the CREATE_METHOD_TABLE macro to generate these method tables + succinctly where they need to be defined. + + Also added to it the first function to use this macro, visitChildren. + + This is part of the process of getting rid of all C++ virtual methods in JSCell. + Eventually all virtual functions in JSCell that can't easily be converted to + non-virtual functions will be put into this custom vtable structure. + * runtime/ClassInfo.h: + + Added the CREATE_METHOD_TABLE macro call as the last argument to each of the + ClassInfo structs declared in these classes. This saves us from having to visit + each s_info definition in the future when we add more methods to the MethodTable. + * API/JSCallbackConstructor.cpp: + * API/JSCallbackFunction.cpp: + * API/JSCallbackObject.cpp: + * JavaScriptCore.exp: + * runtime/Arguments.cpp: + * runtime/ArrayConstructor.cpp: + * runtime/ArrayPrototype.cpp: + * runtime/BooleanObject.cpp: + * runtime/BooleanPrototype.cpp: + * runtime/DateConstructor.cpp: + * runtime/DateInstance.cpp: + * runtime/DatePrototype.cpp: + * runtime/ErrorInstance.cpp: + * runtime/ErrorPrototype.cpp: + * runtime/ExceptionHelpers.cpp: + * runtime/Executable.cpp: + * runtime/GetterSetter.cpp: + * runtime/InternalFunction.cpp: + * runtime/JSAPIValueWrapper.cpp: + * runtime/JSActivation.cpp: + * runtime/JSArray.cpp: + * runtime/JSByteArray.cpp: + * runtime/JSFunction.cpp: + * runtime/JSGlobalObject.cpp: + * runtime/JSONObject.cpp: + * runtime/JSObject.cpp: + * runtime/JSPropertyNameIterator.cpp: + * runtime/JSString.cpp: + * runtime/MathObject.cpp: + * runtime/NativeErrorConstructor.cpp: + * runtime/NumberConstructor.cpp: + * runtime/NumberObject.cpp: + * runtime/NumberPrototype.cpp: + * runtime/ObjectConstructor.cpp: + * runtime/ObjectPrototype.cpp: + * runtime/RegExp.cpp: + * runtime/RegExpConstructor.cpp: + * runtime/RegExpObject.cpp: + * runtime/RegExpPrototype.cpp: + * runtime/ScopeChain.cpp: + * runtime/StringConstructor.cpp: + * runtime/StringObject.cpp: + * runtime/StringPrototype.cpp: + * runtime/Structure.cpp: + * runtime/StructureChain.cpp: + + Had to make visitChildren and visitChildrenVirtual protected instead of private + because some of the subclasses of JSWrapperObject need access to JSWrapperObject's + visitChildren function pointer in their vtable since they don't provide their own + implementation. Same for RegExpObject. + * runtime/JSWrapperObject.h: + * runtime/RegExpObject.h: + +2011-09-25 Adam Barth <abarth@webkit.org> + + Finish removing PLATFORM(BREWMP) by removing associated code + https://bugs.webkit.org/show_bug.cgi?id=68779 + + Reviewed by Sam Weinig. + + * JavaScriptCore.gyp/JavaScriptCore.gyp: + * JavaScriptCore.gypi: + * gyp/JavaScriptCore.gyp: + * wscript: + * wtf/FastMalloc.cpp: + (WTF::fastMallocSize): + * wtf/Vector.h: + * wtf/brew: Removed. + * wtf/brew/MainThreadBrew.cpp: Removed. + * wtf/brew/OwnPtrBrew.cpp: Removed. + * wtf/brew/RefPtrBrew.h: Removed. + * wtf/brew/ShellBrew.h: Removed. + * wtf/brew/StringBrew.cpp: Removed. + * wtf/brew/SystemMallocBrew.h: Removed. + * wtf/unicode/brew: Removed. + * wtf/unicode/brew/UnicodeBrew.cpp: Removed. + * wtf/unicode/brew/UnicodeBrew.h: Removed. + +2011-09-25 Filip Pizlo <fpizlo@apple.com> + + DFG JIT does not count speculation successes correctly + https://bugs.webkit.org/show_bug.cgi?id=68785 + + Reviewed by Geoffrey Garen. + + * dfg/DFGJITCompiler.cpp: + (JSC::DFG::JITCompiler::compileEntry): + (JSC::DFG::JITCompiler::compileBody): + * dfg/DFGOperations.cpp: + +2011-09-25 Filip Pizlo <fpizlo@apple.com> + + DFG support for op_resolve_global is not enabled + https://bugs.webkit.org/show_bug.cgi?id=68786 + + Reviewed by Geoffrey Garen. + + * dfg/DFGCapabilities.h: + (JSC::DFG::canCompileOpcode): + +2011-09-25 Filip Pizlo <fpizlo@apple.com> + + DFG static prediction code is no longer needed and should be removed + https://bugs.webkit.org/show_bug.cgi?id=68784 + + Reviewed by Oliver Hunt. + + This gets rid of static prediction code, and ensures that we do not + try to compile code where dynamic predictions are not available. + This is accomplished by immediately performing an OSR exit wherever + a value is retrieved for which no predictions exist. + + This also adds value profiling for this on functions used for calls. + + The heuristics for deciding when to optimize code are also tweaked, + since it is now profitable to optimize sooner. This may need to be + tweaked further, but this patch only makes minimal changes. + + This results in a 16% speed-up on Kraken/ai-astar, leading to a 3% + overall win on Kraken. It's neutral elsewhere. + + * bytecode/CodeBlock.cpp: + (JSC::CodeBlock::shouldOptimizeNow): + (JSC::CodeBlock::dumpValueProfiles): + * bytecode/CodeBlock.h: + * bytecode/PredictedType.cpp: + (JSC::predictionToString): + * bytecode/PredictedType.h: + (JSC::isCellPrediction): + (JSC::isObjectPrediction): + (JSC::isFinalObjectPrediction): + (JSC::isStringPrediction): + (JSC::isArrayPrediction): + (JSC::isInt32Prediction): + (JSC::isDoublePrediction): + (JSC::isNumberPrediction): + (JSC::isBooleanPrediction): + (JSC::mergePredictions): + * bytecode/PredictionTracker.h: + (JSC::PredictionTracker::predictArgument): + (JSC::PredictionTracker::predict): + (JSC::PredictionTracker::predictGlobalVar): + * bytecode/ValueProfile.cpp: + (JSC::ValueProfile::computeUpdatedPrediction): + * dfg/DFGByteCodeParser.cpp: + (JSC::DFG::ByteCodeParser::set): + (JSC::DFG::ByteCodeParser::addCall): + (JSC::DFG::ByteCodeParser::getPrediction): + (JSC::DFG::ByteCodeParser::parseBlock): + * dfg/DFGGraph.cpp: + (JSC::DFG::Graph::predictArgumentTypes): + * dfg/DFGGraph.h: + (JSC::DFG::Graph::predict): + (JSC::DFG::Graph::predictGlobalVar): + (JSC::DFG::Graph::getMethodCheckPrediction): + (JSC::DFG::Graph::getJSConstantPrediction): + (JSC::DFG::Graph::getPrediction): + * dfg/DFGJITCodeGenerator.cpp: + (JSC::DFG::JITCodeGenerator::writeBarrier): + (JSC::DFG::JITCodeGenerator::emitBranch): + * dfg/DFGJITCompiler.h: + (JSC::DFG::JITCompiler::getPrediction): + * dfg/DFGNode.h: + (JSC::DFG::Node::valueOfJSConstantNode): + (JSC::DFG::Node::isInt32Constant): + (JSC::DFG::Node::isDoubleConstant): + (JSC::DFG::Node::isNumberConstant): + (JSC::DFG::Node::isBooleanConstant): + (JSC::DFG::Node::predict): + * dfg/DFGPropagator.cpp: + (JSC::DFG::Propagator::Propagator): + (JSC::DFG::Propagator::propagateNodePredictions): + (JSC::DFG::Propagator::fixupNode): + (JSC::DFG::Propagator::isPredictedNumerical): + (JSC::DFG::Propagator::logicalNotIsPure): + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::compile): + * dfg/DFGSpeculativeJIT.h: + (JSC::DFG::SpeculativeJIT::shouldSpeculateInteger): + (JSC::DFG::SpeculativeJIT::shouldSpeculateDouble): + (JSC::DFG::SpeculativeJIT::shouldSpeculateNumber): + (JSC::DFG::SpeculativeJIT::shouldNotSpeculateInteger): + (JSC::DFG::SpeculativeJIT::shouldSpeculateFinalObject): + (JSC::DFG::SpeculativeJIT::shouldSpeculateArray): + (JSC::DFG::SpeculativeJIT::shouldSpeculateObject): + (JSC::DFG::SpeculativeJIT::shouldSpeculateCell): + * jit/JIT.cpp: + (JSC::JIT::privateCompile): + +2011-09-25 Filip Pizlo <fpizlo@apple.com> + + DFG JIT Construct opcode takes a this argument even though it's + not passed + https://bugs.webkit.org/show_bug.cgi?id=68782 + + Reviewed by Oliver Hunt. + + This is performance-neutral, mostly. It's a slight speed-up on + v8-splay. + + * dfg/DFGByteCodeParser.cpp: + (JSC::DFG::ByteCodeParser::addCall): + * dfg/DFGJITCodeGenerator.cpp: + (JSC::DFG::JITCodeGenerator::emitCall): + +2011-09-25 Filip Pizlo <fpizlo@apple.com> + + DFG tracking of the value in cachedResultRegister does not handle + op_mov correctly + https://bugs.webkit.org/show_bug.cgi?id=68781 + + Reviewed by Oliver Hunt. + + This takes the simplest approach: it makes the old JIT dumber rather + than making the DFG JIT smarter. This is performance-neutral. + + * jit/JIT.h: + (JSC::JIT::canBeOptimized): + * jit/JITOpcodes.cpp: + (JSC::JIT::emit_op_mov): + +2011-09-25 Adam Barth <abarth@webkit.org> + + Remove PLATFORM(HAIKU) and associated code + https://bugs.webkit.org/show_bug.cgi?id=68774 + + Reviewed by Sam Weinig. + + * JavaScriptCore.gyp/JavaScriptCore.gyp: + * JavaScriptCore.gypi: + * gyp/JavaScriptCore.gyp: + * heap/MachineStackMarker.cpp: + * wtf/PageAllocation.h: + * wtf/Platform.h: + * wtf/StackBounds.cpp: + * wtf/haiku: Removed. + * wtf/haiku/MainThreadHaiku.cpp: Removed. + * wtf/haiku/StringHaiku.cpp: Removed. + * wtf/text/WTFString.h: + +2011-09-24 Adam Barth <abarth@webkit.org> + + Always enable ENABLE(OFFLINE_WEB_APPLICATIONS) + https://bugs.webkit.org/show_bug.cgi?id=68767 + + Reviewed by Eric Seidel. + + * Configurations/FeatureDefines.xcconfig: + +2011-09-24 Filip Pizlo <fpizlo@apple.com> + + JIT implementation of put_by_val increments m_length instead of setting + it to index+1 + https://bugs.webkit.org/show_bug.cgi?id=68766 + + Reviewed by Geoffrey Garen. + + * jit/JITPropertyAccess.cpp: + (JSC::JIT::emit_op_put_by_val): + +2011-09-24 Geoffrey Garen <ggaren@apple.com> + + More build fixage. + + * heap/ConservativeRoots.cpp: Our system of #includes, it is chaos. + +2011-09-24 Filip Pizlo <fpizlo@apple.com> + + The DFG should not attempt to guess types in the absence of value + profiles + https://bugs.webkit.org/show_bug.cgi?id=68677 + + Reviewed by Oliver Hunt. + + This adds the ForceOSRExit node, which is ignored by the propagator + and virtual register allocator (and hence ensuring that liveness analysis + works correctly), but forces terminateSpeculativeExecution() in the + back-end. This appears to be a slight speed-up on benchmark averages, + with ~5% swings on individual benchmarks, in both directions. But it's + never a regression on any average, and appears to be a ~1% progression + in the SunSpider average. + + This also adds a bit better debugging support in the old JIT and in DFG, + as this was necessary to debug the much more frequent OSR transitions + that occur with this change. + + * dfg/DFGByteCodeParser.cpp: + (JSC::DFG::ByteCodeParser::addCall): + (JSC::DFG::ByteCodeParser::getStrongPrediction): + (JSC::DFG::ByteCodeParser::parseBlock): + * dfg/DFGJITCompiler.cpp: + (JSC::DFG::JITCompiler::exitSpeculativeWithOSR): + * dfg/DFGNode.h: + * dfg/DFGPropagator.cpp: + (JSC::DFG::Propagator::propagateNodePredictions): + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::compile): + * jit/JIT.cpp: + (JSC::JIT::privateCompileMainPass): + (JSC::JIT::privateCompileSlowCases): + (JSC::JIT::privateCompile): + * jit/JIT.h: + +2011-09-24 Geoffrey Garen <ggaren@apple.com> + + Some Windows build fixage. + + * heap/MarkedBlock.cpp: + (JSC::MarkedBlock::sweep): + * heap/MarkedBlock.h: + (JSC::MarkedBlock::isLive): Show the compiler that all control paths + return a value. There, there, compiler. Everything's going to be OK. + + * runtime/JSCell.h: + (JSC::JSCell::setVPtr): Oops! Unrename this function. + +2011-09-24 Geoffrey Garen <ggaren@apple.com> + + Allocate new objects unmarked + https://bugs.webkit.org/show_bug.cgi?id=68764 + + Reviewed by Oliver Hunt. + + This is a pre-requisite to using the mark bit to determine object age. + + ~2% v8 speedup, mostly due to a 12% v8-splay speedup. + + * heap/MarkedBlock.h: + (JSC::MarkedBlock::isLive): + (JSC::MarkedBlock::isLiveCell): These two functions are the reason for + this patch. They can now determine object liveness without relying on + newly allocated objects having their mark bits set. Each MarkedBlock + now has a state variable that tells us how to determine whether its + cells are live. (This new state variable supercedes the old one about + destructor state. The rest of this patch is just refactoring to support + the invariants of this new state variable without introducing a + performance regression.) + + (JSC::MarkedBlock::didConsumeFreeList): New function for updating interal + state when a block becomes fully allocated. + + (JSC::MarkedBlock::clearMarks): Folded a state change to 'Marked' into + this function because, logically, clearing all mark bits is the first + step in saying "mark bits now exactly reflect object liveness". + + (JSC::MarkedBlock::markCountIsZero): Renamed from isEmpty() to clarify + that this function only tells you about the mark bits, so it's only + meaningful if you've put the mark bits into a meaningful state before + calling it. + + (JSC::MarkedBlock::forEachCell): Changed to use isLive() helper function + instead of testing mark bits, since mark bits are not always the right + way to find out if an object is live anymore. (New objects are live, but + not marked.) + + * heap/MarkedBlock.cpp: + (JSC::MarkedBlock::recycle): + (JSC::MarkedBlock::MarkedBlock): Folded all initialization -- even + initialization when recycling an old block -- into the MarkedBlock + constructor, for simplicity. + + (JSC::MarkedBlock::callDestructor): Inlined for speed. Always check for + a zapped cell before running a destructor, and always zap after + running a destructor. This does not seem to be expensive, and the + alternative just creates a too-confusing matrix of possible cell states + ((zombie undestructed cell + zombie destructed cell + zapped destructed + cell) * 5! permutations for progressing through block states = "Oh my!"). + + (JSC::MarkedBlock::specializedSweep): + (JSC::MarkedBlock::sweep): Maintained and expanded a pre-existing + optimization to use template specialization to constant fold lots of + branches and elide certain operations entirely during a sweep. Merged + four or five functions that were logically about sweeping into this one + function pair, so there's only one way to do things now, it's + automatically correct, and it's always fast. + + (JSC::MarkedBlock::zapFreeList): Renamed this function to be more explicit + about exactly what it does, and to honor the new block state system. + + * heap/AllocationSpace.cpp: + (JSC::AllocationSpace::allocateBlock): Updated for rename. + + (JSC::AllocationSpace::freeBlocks): Updated for changed interface. + + (JSC::TakeIfUnmarked::TakeIfUnmarked): + (JSC::TakeIfUnmarked::operator()): + (JSC::TakeIfUnmarked::returnValue): Just like isEmpty() above, renamed + to clarify that this functor only tests the mark bits, so it's only + valid if you've put the mark bits into a meaningful state before + calling it. + + (JSC::AllocationSpace::shrink): Updated for rename. + + * heap/AllocationSpace.h: + (JSC::AllocationSpace::canonicalizeCellLivenessData): Renamed to be a + little more specific about what we're making canonical. + + (JSC::AllocationSpace::forEachCell): Updated for rename. + + (JSC::AllocationSpace::forEachBlock): No need to canonicalize cell + liveness data before iterating blocks -- clients that want iterated + blocks to have valid cell lieveness data should make this call for + themselves. (And not all clients want it.) + + * heap/ConservativeRoots.cpp: + (JSC::ConservativeRoots::genericAddPointer): Updated for rename. Removed + obsolete comment. + + * heap/Heap.cpp: + (JSC::CountFunctor::ClearMarks::operator()): Removed call to notify...() + because clearMarks() now does that implicitly. + + (JSC::Heap::destroy): Make sure to canonicalize before tear-down, since + tear-down tests cell liveness when running destructors. + + (JSC::Heap::markRoots): + (JSC::Heap::collect): Moved weak reference harvesting out of markRoots() + and into collect, since it strictly depends on root marking, and does + not contribute to root marking. + + (JSC::Heap::canonicalizeCellLivenessData): Renamed to be a little more + specific about what we're making canonical. + + * heap/Heap.h: + (JSC::Heap::forEachProtectedCell): No need to canonicalize cell liveness + data before iterating protected cells, since we know they're all live, + and don't need to test for it. + + * heap/Local.h: + (JSC::::set): Can't make the same ASSERT we used to because we just don't + have the mark bits for it anymore. Perhaps we can bring this ASSERT back + in a weaker form in the future. + + * heap/MarkedSpace.cpp: + (JSC::MarkedSpace::addBlock): + (JSC::MarkedSpace::removeBlock): Updated for interface change. + (JSC::MarkedSpace::canonicalizeCellLivenessData): Renamed to be a little more + specific about what we're making canonical. + + * heap/MarkedSpace.h: + (JSC::MarkedSpace::allocate): + (JSC::MarkedSpace::SizeClass::SizeClass): + (JSC::MarkedSpace::SizeClass::resetAllocator): + (JSC::MarkedSpace::SizeClass::zapFreeList): Simplified this allocator + functionality a bit. We now track only one block -- "currentBlock" -- + and rely on its internal state to know whether it has more cells to + allocate. + + * heap/Weak.h: + (JSC::Weak::set): Can't make the same ASSERT we used to because we just don't + have the mark bits for it anymore. Perhaps we can bring this ASSERT back + in a weaker form in the future. + + * runtime/JSCell.h: + (JSC::JSCell::vptr): + (JSC::JSCell::zap): + (JSC::JSCell::isZapped): + (JSC::isZapped): Made zapping a property of JSCell, for a little abstraction. + In the future, exactly how a JSCell zaps itself will change, as the + internal representation of JSCell changes. + +2011-09-24 Filip Pizlo <fpizlo@apple.com> + + DFG JIT should not eagerly initialize integer tags in the register file + https://bugs.webkit.org/show_bug.cgi?id=68763 + + Reviewed by Oliver Hunt. + + * dfg/DFGJITCompiler.cpp: + (JSC::DFG::JITCompiler::exitSpeculativeWithOSR): + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::ValueRecovery::dump): + (JSC::DFG::OSRExit::OSRExit): + (JSC::DFG::SpeculativeJIT::compile): + (JSC::DFG::SpeculativeJIT::computeValueRecoveryFor): + * dfg/DFGSpeculativeJIT.h: + (JSC::DFG::ValueRecovery::alreadyInRegisterFileAsUnboxedInt32): + (JSC::DFG::OSRExit::operandForArgument): + (JSC::DFG::OSRExit::operandForIndex): + (JSC::DFG::SpeculativeJIT::computeValueRecoveryFor): + +2011-09-23 Yuqiang Xian <yuqiang.xian@intel.com> + + Add JSVALUE32_64 support to DFG JIT + https://bugs.webkit.org/show_bug.cgi?id=67460 + + Reviewed by Gavin Barraclough. + + This is the initial attempt to add JSVALUE32_64 support to DFG JIT. + It's tested on IA32 Linux EFL port currently. It still cannot run + all the test cases and benchmarks so should be turned off now. + + The major work includes: + 1) dealing with JSVALUE32_64 data format in DFG JIT; + 2) bindings between 64-bit JS Value and 32-bit registers; + 3) handling of function calls. Currently for DFG operation function + calls we follow the X86 cdecl calling convention on Linux, and the + implementation is in a naive way by pushing the arguments into stack + one by one. + + The known issues include: + 1) some code duplicates unnecessarily, especially in Speculative JIT + code generation, where most of the operations on SpeculataInteger / + SpeculateDouble should be identical to the JSVALUE64 code. Refactoring + is needed in the future; + 2) lack of op_call and op_construct support, comparing to current + JSVALUE64 DFG; + 3) currently integer speculations assume to be StrictInt32; + 4) lack of JSBoolean speculations; + 5) boxing and unboxing doubles could be improved; + 6) DFG X86 register description is different with the baseline JIT, + the timeoutCheckRegister is used for general purpose usage; + 7) calls to runtime functions with primitive double parameters (e.g. + fmod) don't work. Support needs to be added to the assembler to + implement the mechanism of passing double parameters for X86 cdecl + convention. + + And there should be many other hidden bugs which should be exposed and + resolved in later debugging process. + + * CMakeListsEfl.txt: + * assembler/MacroAssemblerX86.h: + (JSC::MacroAssemblerX86::loadDouble): + (JSC::MacroAssemblerX86::storeDouble): + * assembler/X86Assembler.h: + (JSC::X86Assembler::movsd_rm): + * bytecode/StructureStubInfo.h: + * dfg/DFGByteCodeParser.cpp: + (JSC::DFG::ByteCodeParser::parseBlock): + * dfg/DFGCapabilities.h: + (JSC::DFG::canCompileOpcode): + * dfg/DFGFPRInfo.h: + (JSC::DFG::FPRInfo::debugName): + * dfg/DFGGPRInfo.h: + (JSC::DFG::GPRInfo::toRegister): + (JSC::DFG::GPRInfo::toIndex): + (JSC::DFG::GPRInfo::debugName): + * dfg/DFGGenerationInfo.h: + (JSC::DFG::needDataFormatConversion): + (JSC::DFG::GenerationInfo::initJSValue): + (JSC::DFG::GenerationInfo::initDouble): + (JSC::DFG::GenerationInfo::gpr): + (JSC::DFG::GenerationInfo::tagGPR): + (JSC::DFG::GenerationInfo::payloadGPR): + (JSC::DFG::GenerationInfo::fpr): + (JSC::DFG::GenerationInfo::fillJSValue): + (JSC::DFG::GenerationInfo::fillCell): + (JSC::DFG::GenerationInfo::fillDouble): + * dfg/DFGJITCodeGenerator.cpp: + * dfg/DFGJITCodeGenerator.h: + (JSC::DFG::JITCodeGenerator::allocate): + (JSC::DFG::JITCodeGenerator::use): + (JSC::DFG::JITCodeGenerator::registersMatched): + (JSC::DFG::JITCodeGenerator::silentSpillGPR): + (JSC::DFG::JITCodeGenerator::silentFillGPR): + (JSC::DFG::JITCodeGenerator::silentFillFPR): + (JSC::DFG::JITCodeGenerator::silentSpillAllRegisters): + (JSC::DFG::JITCodeGenerator::silentFillAllRegisters): + (JSC::DFG::JITCodeGenerator::boxDouble): + (JSC::DFG::JITCodeGenerator::unboxDouble): + (JSC::DFG::JITCodeGenerator::spill): + (JSC::DFG::addressOfDoubleConstant): + (JSC::DFG::integerResult): + (JSC::DFG::jsValueResult): + (JSC::DFG::setupResults): + (JSC::DFG::callOperation): + (JSC::JSValueOperand::JSValueOperand): + (JSC::JSValueOperand::~JSValueOperand): + (JSC::JSValueOperand::isDouble): + (JSC::JSValueOperand::fill): + (JSC::JSValueOperand::tagGPR): + (JSC::JSValueOperand::payloadGPR): + (JSC::JSValueOperand::fpr): + (JSC::GPRTemporary::~GPRTemporary): + (JSC::GPRTemporary::gpr): + (JSC::GPRResult2::GPRResult2): + * dfg/DFGJITCodeGenerator32_64.cpp: Added. + (JSC::DFG::JITCodeGenerator::clearGenerationInfo): + (JSC::DFG::JITCodeGenerator::fillInteger): + (JSC::DFG::JITCodeGenerator::fillDouble): + (JSC::DFG::JITCodeGenerator::fillJSValue): + (JSC::DFG::JITCodeGenerator::fillStorage): + (JSC::DFG::JITCodeGenerator::useChildren): + (JSC::DFG::JITCodeGenerator::isStrictInt32): + (JSC::DFG::JITCodeGenerator::isKnownInteger): + (JSC::DFG::JITCodeGenerator::isKnownNumeric): + (JSC::DFG::JITCodeGenerator::isKnownCell): + (JSC::DFG::JITCodeGenerator::isKnownNotInteger): + (JSC::DFG::JITCodeGenerator::isKnownNotNumber): + (JSC::DFG::JITCodeGenerator::isKnownBoolean): + (JSC::DFG::JITCodeGenerator::nonSpeculativeValueToNumber): + (JSC::DFG::JITCodeGenerator::nonSpeculativeValueToInt32): + (JSC::DFG::JITCodeGenerator::nonSpeculativeUInt32ToNumber): + (JSC::DFG::JITCodeGenerator::nonSpeculativeKnownConstantArithOp): + (JSC::DFG::JITCodeGenerator::nonSpeculativeBasicArithOp): + (JSC::DFG::JITCodeGenerator::nonSpeculativeArithMod): + (JSC::DFG::JITCodeGenerator::nonSpeculativeCheckHasInstance): + (JSC::DFG::JITCodeGenerator::nonSpeculativeInstanceOf): + (JSC::DFG::JITCodeGenerator::cachedGetById): + (JSC::DFG::JITCodeGenerator::writeBarrier): + (JSC::DFG::JITCodeGenerator::cachedPutById): + (JSC::DFG::JITCodeGenerator::cachedGetMethod): + (JSC::DFG::JITCodeGenerator::nonSpeculativeNonPeepholeCompareNull): + (JSC::DFG::JITCodeGenerator::nonSpeculativePeepholeBranchNull): + (JSC::DFG::JITCodeGenerator::nonSpeculativeCompareNull): + (JSC::DFG::JITCodeGenerator::nonSpeculativePeepholeBranch): + (JSC::DFG::JITCodeGenerator::nonSpeculativeNonPeepholeCompare): + (JSC::DFG::JITCodeGenerator::nonSpeculativeCompare): + (JSC::DFG::JITCodeGenerator::nonSpeculativePeepholeStrictEq): + (JSC::DFG::JITCodeGenerator::nonSpeculativeNonPeepholeStrictEq): + (JSC::DFG::JITCodeGenerator::nonSpeculativeStrictEq): + (JSC::DFG::JITCodeGenerator::emitBranch): + (JSC::DFG::JITCodeGenerator::nonSpeculativeLogicalNot): + (JSC::DFG::JITCodeGenerator::emitCall): + (JSC::DFG::JITCodeGenerator::speculationCheck): + (JSC::DFG::dataFormatString): + (JSC::DFG::JITCodeGenerator::dump): + (JSC::DFG::JITCodeGenerator::checkConsistency): + (JSC::DFG::GPRTemporary::GPRTemporary): + (JSC::DFG::FPRTemporary::FPRTemporary): + * dfg/DFGJITCompiler.cpp: + * dfg/DFGJITCompiler.h: + (JSC::DFG::JITCompiler::tagForGlobalVar): + (JSC::DFG::JITCompiler::payloadForGlobalVar): + (JSC::DFG::JITCompiler::appendCallWithExceptionCheck): + (JSC::DFG::JITCompiler::addressOfDoubleConstant): + (JSC::DFG::JITCompiler::boxDouble): + (JSC::DFG::JITCompiler::unboxDouble): + (JSC::DFG::JITCompiler::addPropertyAccess): + (JSC::DFG::JITCompiler::PropertyAccessRecord::PropertyAccessRecord): + * dfg/DFGJITCompiler32_64.cpp: Added. + (JSC::DFG::JITCompiler::fillNumericToDouble): + (JSC::DFG::JITCompiler::fillInt32ToInteger): + (JSC::DFG::JITCompiler::fillToJS): + (JSC::DFG::JITCompiler::exitSpeculativeWithOSR): + (JSC::DFG::JITCompiler::linkOSRExits): + (JSC::DFG::JITCompiler::compileEntry): + (JSC::DFG::JITCompiler::compileBody): + (JSC::DFG::JITCompiler::link): + (JSC::DFG::JITCompiler::compile): + (JSC::DFG::JITCompiler::compileFunction): + (JSC::DFG::JITCompiler::jitAssertIsInt32): + (JSC::DFG::JITCompiler::jitAssertIsJSInt32): + (JSC::DFG::JITCompiler::jitAssertIsJSNumber): + (JSC::DFG::JITCompiler::jitAssertIsJSDouble): + (JSC::DFG::JITCompiler::jitAssertIsCell): + (JSC::DFG::JITCompiler::emitCount): + (JSC::DFG::JITCompiler::setSamplingFlag): + (JSC::DFG::JITCompiler::clearSamplingFlag): + * dfg/DFGJITCompilerInlineMethods.h: Added. + (JSC::DFG::JITCompiler::emitLoadTag): + (JSC::DFG::JITCompiler::emitLoadPayload): + (JSC::DFG::JITCompiler::emitLoad): + (JSC::DFG::JITCompiler::emitLoad2): + (JSC::DFG::JITCompiler::emitLoadDouble): + (JSC::DFG::JITCompiler::emitLoadInt32ToDouble): + (JSC::DFG::JITCompiler::emitStore): + (JSC::DFG::JITCompiler::emitStoreInt32): + (JSC::DFG::JITCompiler::emitStoreCell): + (JSC::DFG::JITCompiler::emitStoreBool): + (JSC::DFG::JITCompiler::emitStoreDouble): + * dfg/DFGNode.h: + * dfg/DFGOperations.cpp: + * dfg/DFGRepatch.cpp: + (JSC::DFG::generateProtoChainAccessStub): + (JSC::DFG::tryCacheGetByID): + (JSC::DFG::tryBuildGetByIDList): + (JSC::DFG::tryCachePutByID): + * dfg/DFGSpeculativeJIT.cpp: + * dfg/DFGSpeculativeJIT.h: + (JSC::DFG::ValueRecovery::inGPR): + (JSC::DFG::ValueRecovery::inPair): + (JSC::DFG::ValueRecovery::tagGPR): + (JSC::DFG::ValueRecovery::payloadGPR): + * dfg/DFGSpeculativeJIT32_64.cpp: Added. + (JSC::DFG::SpeculativeJIT::fillSpeculateIntInternal): + (JSC::DFG::ValueSource::dump): + (JSC::DFG::ValueRecovery::dump): + (JSC::DFG::OSRExit::OSRExit): + (JSC::DFG::OSRExit::dump): + (JSC::DFG::SpeculativeJIT::fillSpeculateInt): + (JSC::DFG::SpeculativeJIT::fillSpeculateIntStrict): + (JSC::DFG::SpeculativeJIT::fillSpeculateDouble): + (JSC::DFG::SpeculativeJIT::fillSpeculateCell): + (JSC::DFG::SpeculativeJIT::fillSpeculateBoolean): + (JSC::DFG::SpeculativeJIT::compilePeepHoleIntegerBranch): + (JSC::DFG::SpeculativeJIT::convertToDouble): + (JSC::DFG::SpeculativeJIT::compilePeepHoleDoubleBranch): + (JSC::DFG::SpeculativeJIT::compilePeepHoleObjectEquality): + (JSC::DFG::SpeculativeJIT::compileObjectEquality): + (JSC::DFG::SpeculativeJIT::compare): + (JSC::DFG::SpeculativeJIT::compile): + (JSC::DFG::SpeculativeJIT::compileMovHint): + (JSC::DFG::SpeculativeJIT::checkArgumentTypes): + (JSC::DFG::SpeculativeJIT::initializeVariableTypes): + (JSC::DFG::SpeculativeJIT::computeValueRecoveryFor): + * runtime/JSValue.h: + +2011-09-23 Filip Pizlo <fpizlo@apple.com> + + wtf/BitVector.h has a variety of bugs which manifest when the + vector grows beyond 63 bits + https://bugs.webkit.org/show_bug.cgi?id=68746 + + Reviewed by Oliver Hunt. + + Out-of-lined slow path code in BitVector so that not every user + of CodeBlock ends up having to compile it. Fixed a variety of + index computation and size computation bugs. + + I have not seen these issues manifest themselves, but they are + blocking a patch that uses BitVector more aggressively. + + * GNUmakefile.list.am: + * JavaScriptCore.vcproj/WTF/WTF.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * wtf/BitVector.cpp: Added. + (BitVector::BitVector): + (BitVector::operator=): + (BitVector::resize): + (BitVector::clearAll): + (BitVector::OutOfLineBits::create): + (BitVector::OutOfLineBits::destroy): + (BitVector::resizeOutOfLine): + * wtf/BitVector.h: + (WTF::BitVector::ensureSize): + (WTF::BitVector::get): + (WTF::BitVector::set): + (WTF::BitVector::clear): + (WTF::BitVector::byteCount): + (WTF::BitVector::OutOfLineBits::numWords): + (WTF::BitVector::OutOfLineBits::bits): + (WTF::BitVector::outOfLineBits): + * wtf/CMakeLists.txt: + * wtf/wtf.pri: + +2011-09-23 Adam Klein <adamk@chromium.org> + + Add ENABLE_MUTATION_OBSERVERS feature flag + https://bugs.webkit.org/show_bug.cgi?id=68732 + + Reviewed by Ojan Vafai. + + This flag will guard an implementation of the "Mutation Observers" proposed in + http://lists.w3.org/Archives/Public/public-webapps/2011JulSep/1622.html + + * Configurations/FeatureDefines.xcconfig: + +2011-09-23 Mark Hahnenberg <mhahnenberg@apple.com> + + De-virtualize JSCell::getJSNumber + https://bugs.webkit.org/show_bug.cgi?id=68651 + + Reviewed by Oliver Hunt. + + Added a new JSType to check whether or not something is a + NumberObject (which includes NumberPrototype) in TypeInfo::isNumberObject because there's not + currently a better way to determine whether something is indeed a NumberObject. + Also de-virtualized JSCell::getJSNumber, having it check the TypeInfo + for whether the object is a NumberObject or not. This patch is part of + the larger process of de-virtualizing JSCell. + + * JavaScriptCore.exp: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * runtime/JSCell.cpp: + (JSC::JSCell::getJSNumber): + * runtime/JSCell.h: + (JSC::JSValue::getJSNumber): + * runtime/JSType.h: + * runtime/JSTypeInfo.h: + (JSC::TypeInfo::isNumberObject): + * runtime/JSValue.h: + * runtime/NumberObject.cpp: + (JSC::NumberObject::getJSNumber): + * runtime/NumberObject.h: + (JSC::NumberObject::createStructure): + * runtime/NumberPrototype.h: + (JSC::NumberPrototype::createStructure): + +2011-09-23 Filip Pizlo <fpizlo@apple.com> + + Resolve opcodes should have value profiling. + https://bugs.webkit.org/show_bug.cgi?id=68723 + + Reviewed by Oliver Hunt. + + This adds value profiling to all forms of op_resolve in the + old JIT, and patches that information into the DFG along with + performing the appropriate type propagation. + + * dfg/DFGByteCodeParser.cpp: + (JSC::DFG::ByteCodeParser::parseBlock): + * dfg/DFGGraph.h: + (JSC::DFG::Graph::predict): + * dfg/DFGNode.h: + (JSC::DFG::Node::hasIdentifier): + (JSC::DFG::Node::resolveGlobalDataIndex): + (JSC::DFG::Node::hasPrediction): + * dfg/DFGPropagator.cpp: + (JSC::DFG::Propagator::propagateNodePredictions): + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::compile): + * jit/JITOpcodes.cpp: + (JSC::JIT::emit_op_resolve): + (JSC::JIT::emit_op_resolve_base): + (JSC::JIT::emit_op_resolve_skip): + (JSC::JIT::emit_op_resolve_global): + (JSC::JIT::emitSlow_op_resolve_global): + (JSC::JIT::emit_op_resolve_with_base): + (JSC::JIT::emit_op_resolve_with_this): + (JSC::JIT::emitSlow_op_resolve_global_dynamic): + * jit/JITStubCall.h: + (JSC::JITStubCall::callWithValueProfiling): + +2011-09-23 Oliver Hunt <oliver@apple.com> + + Fix windows build. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + +2011-09-23 Gavin Barraclough <barraclough@apple.com> + + Strict mode does not work in non-trivial nested functions. + https://bugs.webkit.org/show_bug.cgi?id=68740 + + Reviewed by Oliver Hunt. + + Function-info caching does not preserve all state that it should. + + * parser/JSParser.cpp: + (JSC::JSParser::Scope::saveFunctionInfo): + (JSC::JSParser::Scope::restoreFunctionInfo): + (JSC::JSParser::parseFunctionInfo): + * parser/SourceProviderCacheItem.h: + +2011-09-23 Filip Pizlo <fpizlo@apple.com> + + ValueToDouble handling in prediction propagation should be ASSERT_NOT_REACHED + https://bugs.webkit.org/show_bug.cgi?id=68724 + + Reviewed by Oliver Hunt. + + * dfg/DFGPropagator.cpp: + (JSC::DFG::Propagator::propagateNodePredictions): + +2011-09-23 Oliver Hunt <oliver@apple.com> + + Build fix. + + * JavaScriptCore.xcodeproj/project.pbxproj: + +2011-09-23 Filip Pizlo <fpizlo@apple.com> + + DFG implementation of PutScopedVar corrupts register allocation + https://bugs.webkit.org/show_bug.cgi?id=68735 + + Reviewed by Oliver Hunt. + + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::compile): + +2011-09-23 Oliver Hunt <oliver@apple.com> + + Make write barriers actually do something when enabled + https://bugs.webkit.org/show_bug.cgi?id=68717 + + Reviewed by Geoffrey Garen. + + Add a basic card marking style write barrier to JSC (currently + turned off). This requires two scratch registers in the JIT + so there was some register re-arranging to satisfy that requirement. + Happily this produced a minor perf bump in sunspider (~0.5%). + + Turning the barriers on causes an overall regression of around 1.5% + + * JavaScriptCore.exp: + * JavaScriptCore.xcodeproj/project.pbxproj: + * assembler/MacroAssemblerX86Common.h: + (JSC::MacroAssemblerX86Common::store8): + * assembler/X86Assembler.h: + (JSC::X86Assembler::movb_i8m): + * dfg/DFGJITCodeGenerator.cpp: + (JSC::DFG::JITCodeGenerator::isKnownNotCell): + (JSC::DFG::JITCodeGenerator::writeBarrier): + (JSC::DFG::JITCodeGenerator::markCellCard): + (JSC::DFG::JITCodeGenerator::cachedPutById): + * dfg/DFGJITCodeGenerator.h: + * dfg/DFGRepatch.cpp: + (JSC::DFG::tryCachePutByID): + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::compile): + * heap/CardSet.h: Added. + (JSC::CardSet::CardSet): + (JSC::::cardForAtom): + (JSC::::cardMarkedForAtom): + (JSC::::markCardForAtom): + * heap/Heap.cpp: + * heap/Heap.h: + (JSC::Heap::addressOfCardFor): + (JSC::Heap::writeBarrierFastCase): + * heap/MarkedBlock.h: + (JSC::MarkedBlock::setDirtyObject): + (JSC::MarkedBlock::addressOfCardFor): + (JSC::MarkedBlock::offsetOfCards): + * jit/JIT.h: + * jit/JITPropertyAccess.cpp: + (JSC::JIT::emit_op_put_by_val): + (JSC::JIT::emit_op_put_by_id): + (JSC::JIT::privateCompilePutByIdTransition): + (JSC::JIT::emit_op_put_scoped_var): + (JSC::JIT::emit_op_put_global_var): + (JSC::JIT::emitWriteBarrier): + * jit/JITPropertyAccess32_64.cpp: + (JSC::JIT::emit_op_put_by_val): + (JSC::JIT::emit_op_put_by_id): + (JSC::JIT::emitSlow_op_put_by_id): + (JSC::JIT::privateCompilePutByIdTransition): + (JSC::JIT::emit_op_put_scoped_var): + (JSC::JIT::emit_op_put_global_var): + +2011-09-23 Thouraya ANDOLSI <thouraya.andolsi@st.com> + + https://bugs.webkit.org/show_bug.cgi?id=68077 + SH4 assemblers doesn't refer to executable memory handle. + + Reviewed by Gavin Barraclough. + + * assembler/MacroAssemblerSH4.h: + (JSC::MacroAssemblerSH4::branch8): + * assembler/SH4Assembler.h: + (JSC::SH4Assembler::executableCopy): + +2011-09-23 Oliver Hunt <oliver@apple.com> + + PutScopedVar nodes should report that it has a var number + https://bugs.webkit.org/show_bug.cgi?id=68721 + + Reviewed by Anders Carlsson. + + Another assertion fix. + + * dfg/DFGNode.h: + (JSC::DFG::Node::hasVarNumber): + +2011-09-23 Oliver Hunt <oliver@apple.com> + + Add a bunch of unhandled node types to the propagator + https://bugs.webkit.org/show_bug.cgi?id=68716 + + Reviewed by Darin Adler. + + Remove the ASSERT_NOT_REACHED() default for debug builds in the + prediction propagator, this way unhandled nodes will just cause + compile time failures rather than failing at some point in the + future. + + * dfg/DFGPropagator.cpp: + (JSC::DFG::Propagator::propagateNodePredictions): + +2011-09-23 Mark Hahnenberg <mhahnenberg@apple.com> + + Add static version of JSCell::visitChildren + https://bugs.webkit.org/show_bug.cgi?id=68404 + + Reviewed by Darin Adler. + + In this patch we just extract the bodies of the virtual visitChildren methods + throughout the JSCell inheritance hierarchy out into static methods, which are + now called from the virtual methods. This is an intermediate step in trying to + move the virtual-ness of visitChildren into our own custom vtable stored in + ClassInfo. We need to convert the methods to static methods in order to be + able to more easily store and refer to them in our custom vtable since normal + member methods store some implicit information in their types, making it + impossible to store them generically in ClassInfo. + + * API/JSCallbackObject.h: + (JSC::JSCallbackObject::visitChildrenVirtual): + (JSC::JSCallbackObject::visitChildren): + * JavaScriptCore.exp: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * debugger/DebuggerActivation.cpp: + (JSC::DebuggerActivation::visitChildrenVirtual): + (JSC::DebuggerActivation::visitChildren): + * debugger/DebuggerActivation.h: + * heap/MarkStack.cpp: + (JSC::SlotVisitor::visitChildren): + (JSC::SlotVisitor::drain): + * runtime/Arguments.cpp: + (JSC::Arguments::visitChildrenVirtual): + (JSC::Arguments::visitChildren): + * runtime/Arguments.h: + * runtime/Executable.cpp: + (JSC::EvalExecutable::visitChildrenVirtual): + (JSC::EvalExecutable::visitChildren): + (JSC::ProgramExecutable::visitChildrenVirtual): + (JSC::ProgramExecutable::visitChildren): + (JSC::FunctionExecutable::visitChildrenVirtual): + (JSC::FunctionExecutable::visitChildren): + * runtime/Executable.h: + * runtime/GetterSetter.cpp: + (JSC::GetterSetter::visitChildrenVirtual): + (JSC::GetterSetter::visitChildren): + * runtime/GetterSetter.h: + * runtime/JSActivation.cpp: + (JSC::JSActivation::visitChildrenVirtual): + (JSC::JSActivation::visitChildren): + * runtime/JSActivation.h: + * runtime/JSArray.cpp: + (JSC::JSArray::visitChildrenVirtual): + (JSC::JSArray::visitChildren): + * runtime/JSArray.h: + * runtime/JSBoundFunction.cpp: + (JSC::JSBoundFunction::visitChildrenVirtual): + (JSC::JSBoundFunction::visitChildren): + * runtime/JSBoundFunction.h: + * runtime/JSCell.h: + (JSC::JSCell::visitChildrenVirtual): + (JSC::JSCell::visitChildren): + * runtime/JSFunction.cpp: + (JSC::JSFunction::visitChildrenVirtual): + (JSC::JSFunction::visitChildren): + * runtime/JSFunction.h: + * runtime/JSGlobalObject.cpp: + (JSC::JSGlobalObject::visitChildrenVirtual): + (JSC::JSGlobalObject::visitChildren): + * runtime/JSGlobalObject.h: + * runtime/JSObject.cpp: + (JSC::JSObject::visitChildrenVirtual): + (JSC::JSObject::visitChildren): + * runtime/JSObject.h: + (JSC::JSObject::visitChildrenDirect): + * runtime/JSPropertyNameIterator.cpp: + (JSC::JSPropertyNameIterator::visitChildrenVirtual): + (JSC::JSPropertyNameIterator::visitChildren): + * runtime/JSPropertyNameIterator.h: + * runtime/JSStaticScopeObject.cpp: + (JSC::JSStaticScopeObject::visitChildrenVirtual): + (JSC::JSStaticScopeObject::visitChildren): + * runtime/JSStaticScopeObject.h: + * runtime/JSWrapperObject.cpp: + (JSC::JSWrapperObject::visitChildrenVirtual): + (JSC::JSWrapperObject::visitChildren): + * runtime/JSWrapperObject.h: + * runtime/NativeErrorConstructor.cpp: + (JSC::NativeErrorConstructor::visitChildrenVirtual): + (JSC::NativeErrorConstructor::visitChildren): + * runtime/NativeErrorConstructor.h: + * runtime/RegExpObject.cpp: + (JSC::RegExpObject::visitChildrenVirtual): + (JSC::RegExpObject::visitChildren): + * runtime/RegExpObject.h: + * runtime/ScopeChain.cpp: + (JSC::ScopeChainNode::visitChildrenVirtual): + (JSC::ScopeChainNode::visitChildren): + * runtime/ScopeChain.h: + * runtime/Structure.cpp: + (JSC::Structure::visitChildrenVirtual): + (JSC::Structure::visitChildren): + * runtime/Structure.h: + * runtime/StructureChain.cpp: + (JSC::StructureChain::visitChildrenVirtual): + (JSC::StructureChain::visitChildren): + * runtime/StructureChain.h: + +2011-09-23 Oliver Hunt <oliver@apple.com> + + Node propagation doesn't handle PutScopedVar + https://bugs.webkit.org/show_bug.cgi?id=68713 + + Reviewed by Sam Weinig. + + This was causing assertion failures. + + * dfg/DFGPropagator.cpp: + (JSC::DFG::Propagator::propagateNodePredictions): + +2011-09-23 Anders Carlsson <andersca@apple.com> + + Make sure to define OVERRIDE and FINAL for older builds of clang. + + * wtf/Compiler.h: + +2011-09-23 Gavin Barraclough <barraclough@apple.com> + + Implement op_resolve_global in the DFG JIT + https://bugs.webkit.org/show_bug.cgi?id=68704 + + Reviewed by Oliver Hunt. + + This is performance neutral, but increases coverage. + + * dfg/DFGByteCodeParser.cpp: + (JSC::DFG::ByteCodeParser::ByteCodeParser): + (JSC::DFG::ByteCodeParser::parseBlock): + * dfg/DFGNode.h: + (JSC::DFG::Node::hasIdentifier): + (JSC::DFG::Node::resolveInfoIndex): + * dfg/DFGOperations.cpp: + * dfg/DFGOperations.h: + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::compile): + +2011-09-23 Mark Rowe <mrowe@apple.com> + + Define BUILDING_ON_LION / TARGETING_LION when appropriate in Platform.h. + + * wtf/Platform.h: + +2011-09-22 Anders Carlsson <andersca@apple.com> + + We should add support for OVERRIDE and FINAL annotations + https://bugs.webkit.org/show_bug.cgi?id=68654 + + Reviewed by David Hyatt. + + Add OVERRIDE and FINAL macros for compilers that support them. + + * wtf/Compiler.h: + +2011-09-22 Filip Pizlo <fpizlo@apple.com> + + GetScopedVar should have value profiling + https://bugs.webkit.org/show_bug.cgi?id=68676 + + Reviewed by Oliver Hunt. + + Added GetScopedVar value profiling and predictin propagation. + Added GetScopeChain to CSE. + + * dfg/DFGByteCodeParser.cpp: + (JSC::DFG::ByteCodeParser::parseBlock): + * dfg/DFGGraph.h: + (JSC::DFG::Graph::predict): + * dfg/DFGNode.h: + (JSC::DFG::Node::hasPrediction): + * dfg/DFGPropagator.cpp: + (JSC::DFG::Propagator::propagateNodePredictions): + (JSC::DFG::Propagator::getScopeChainLoadElimination): + (JSC::DFG::Propagator::performNodeCSE): + * jit/JITPropertyAccess.cpp: + (JSC::JIT::emit_op_get_scoped_var): + +2011-09-22 Filip Pizlo <fpizlo@apple.com> + + PPC build fix, part 3. + + * runtime/Executable.cpp: + (JSC::FunctionExecutable::compileForConstructInternal): + +2011-09-22 Filip Pizlo <fpizlo@apple.com> + + Another PPC build fix. + + * runtime/Executable.cpp: + * runtime/Executable.h: + +2011-09-22 Dean Jackson <dino@apple.com> + + Add ENABLE_CSS_FILTERS + https://bugs.webkit.org/show_bug.cgi?id=68652 + + Reviewed by Simon Fraser. + + * Configurations/FeatureDefines.xcconfig: + +2011-09-22 Gavin Barraclough <barraclough@apple.com> + + Incorrect this value passed to callbacks. + https://bugs.webkit.org/show_bug.cgi?id=68668 + + Reviewed by Oliver Hunt. + + From Array/String prototype function. Should be undefined, but + global object is passed instead (this is visible for strict callbacks). + + * runtime/ArrayPrototype.cpp: + (JSC::arrayProtoFuncSort): + (JSC::arrayProtoFuncFilter): + (JSC::arrayProtoFuncMap): + (JSC::arrayProtoFuncEvery): + (JSC::arrayProtoFuncForEach): + (JSC::arrayProtoFuncSome): + * runtime/JSArray.cpp: + (JSC::AVLTreeAbstractorForArrayCompare::compare_key_key): + (JSC::JSArray::sort): + * runtime/StringPrototype.cpp: + (JSC::stringProtoFuncReplace): + +2011-09-22 Gavin Barraclough <barraclough@apple.com> + + Function.prototype.bind.length shoudl be 1. + + Rubber stamped by Olier Hunt. + + * runtime/FunctionPrototype.cpp: + (JSC::FunctionPrototype::addFunctionProperties): + +2011-09-22 Filip Pizlo <fpizlo@apple.com> + + PPC build fix. + + * bytecode/CodeBlock.h: + +2011-09-22 Gavin Barraclough <barraclough@apple.com> + + Windows build fix pt. 2 + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + +2011-09-22 Gavin Barraclough <barraclough@apple.com> + + Windows build fix pt. 1 + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + +2011-09-21 Filip Pizlo <fpizlo@apple.com> + + DFG JIT does not support to_primitive or strcat + https://bugs.webkit.org/show_bug.cgi?id=68582 + + Reviewed by Darin Adler. + + This adds functional support for to_primitive and strcat. It focuses + on minimizing the amount of code emitted on to_primitive (if we know + that it is a primitive or can speculate cheaply, then we omit the + slow path) and on keeping the implementation of strcat simple while + leveraging whatever optimizations we have already. In particular, + unlike the Call and Construct nodes which require extending the size + of the DFG's callee registers, StrCat takes advantage of the fact + that no JS code can run while StrCat is in progress and uses a + scratch buffer, rather than the register file, to store the list of + values to concatenate. This was done mainly to keep the code simple, + but there are probably other benefits to keeping call frame sizes + down. Essentially, this patch ensures that the presence of an + op_strcat does not mess up any other optimizations we might do while + ensuring that if you do execute it, it'll work about as well as you'd + expect. + + When combined with the previous patch for integer division, this is a + 14% speed-up on Kraken. Without it, it would have been a 2% loss. + + * assembler/AbstractMacroAssembler.h: + (JSC::AbstractMacroAssembler::TrustedImmPtr::TrustedImmPtr): + * dfg/DFGByteCodeParser.cpp: + (JSC::DFG::ByteCodeParser::parseBlock): + * dfg/DFGCapabilities.h: + (JSC::DFG::canCompileOpcode): + * dfg/DFGJITCodeGenerator.h: + (JSC::DFG::JITCodeGenerator::callOperation): + * dfg/DFGJITCompiler.cpp: + (JSC::DFG::JITCompiler::exitSpeculativeWithOSR): + * dfg/DFGNode.h: + * dfg/DFGOperations.cpp: + * dfg/DFGOperations.h: + * dfg/DFGPropagator.cpp: + (JSC::DFG::Propagator::propagateNodePredictions): + (JSC::DFG::Propagator::performNodeCSE): + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::compile): + * runtime/JSGlobalData.cpp: + (JSC::JSGlobalData::JSGlobalData): + (JSC::JSGlobalData::~JSGlobalData): + * runtime/JSGlobalData.h: + (JSC::JSGlobalData::scratchBufferForSize): + +2011-09-22 Filip Pizlo <fpizlo@apple.com> + + DFG JIT should support integer division + https://bugs.webkit.org/show_bug.cgi?id=68597 + + Reviewed by Darin Adler. + + This adds support for ArithDiv speculating integer, and speculating + that the result is integer (i.e. remainder = 0). + + This is a 4% win on Kraken and a 1% loss on V8. + + * bytecode/CodeBlock.h: + * dfg/DFGByteCodeParser.cpp: + (JSC::DFG::ByteCodeParser::makeDivSafe): + (JSC::DFG::ByteCodeParser::parseBlock): + * dfg/DFGNode.h: + (JSC::DFG::Node::hasArithNodeFlags): + * dfg/DFGPropagator.cpp: + (JSC::DFG::Propagator::propagateArithNodeFlags): + (JSC::DFG::Propagator::propagateNodePredictions): + (JSC::DFG::Propagator::fixupNode): + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::compile): + * jit/JITArithmetic.cpp: + (JSC::JIT::emit_op_div): + +2011-09-22 Oliver Hunt <oliver@apple.com> + + Implement put_scoped_var in the DFG jit + https://bugs.webkit.org/show_bug.cgi?id=68653 + + Reviewed by Gavin Barraclough. + + Naive implementation of put_scoped_var. Same story as the + get_scoped_var implementation, although I've hoisted scope + object acquisition into a separate dfg node. Ideally in the + future we would reuse the resolved scope chain object, but + for now we don't. + + * dfg/DFGByteCodeParser.cpp: + (JSC::DFG::ByteCodeParser::parseBlock): + * dfg/DFGCapabilities.h: + (JSC::DFG::canCompileOpcode): + * dfg/DFGNode.h: + (JSC::DFG::Node::hasScopeChainDepth): + (JSC::DFG::Node::scopeChainDepth): + * dfg/DFGPropagator.cpp: + (JSC::DFG::Propagator::propagateNodePredictions): + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::compile): + +2011-09-22 Gavin Barraclough <barraclough@apple.com> + + Implement Function.prototype.bind + https://bugs.webkit.org/show_bug.cgi?id=26382 + + Reviewed by Sam Weinig. + + This patch provides a basic functional implementation + for Function.bind. It should (hopefully!) be fully + functionally correct, and the bound functions can be + called to quickly (since they are a subclass of + JSFunction, not InternalFunction), but we'll probably + want to follow up with some optimization work to keep + bound calls in JIT code. + + * JavaScriptCore.JSVALUE32_64only.exp: + * JavaScriptCore.JSVALUE64only.exp: + * JavaScriptCore.exp: + * JavaScriptCore.xcodeproj/project.pbxproj: + * jit/JITStubs.cpp: + (JSC::JITThunks::hostFunctionStub): + * jit/JITStubs.h: + * jsc.cpp: + (GlobalObject::addFunction): + * runtime/CommonIdentifiers.h: + * runtime/ConstructData.h: + * runtime/Executable.h: + (JSC::NativeExecutable::NativeExecutable): + * runtime/FunctionPrototype.cpp: + (JSC::FunctionPrototype::addFunctionProperties): + (JSC::functionProtoFuncBind): + * runtime/FunctionPrototype.h: + * runtime/JSBoundFunction.cpp: Added. + (JSC::boundFunctionCall): + (JSC::boundFunctionConstruct): + (JSC::JSBoundFunction::create): + (JSC::JSBoundFunction::hasInstance): + (JSC::JSBoundFunction::getOwnPropertySlot): + (JSC::JSBoundFunction::getOwnPropertyDescriptor): + (JSC::JSBoundFunction::JSBoundFunction): + (JSC::JSBoundFunction::finishCreation): + * runtime/JSBoundFunction.h: Added. + (JSC::JSBoundFunction::targetFunction): + (JSC::JSBoundFunction::boundThis): + (JSC::JSBoundFunction::boundArgs): + (JSC::JSBoundFunction::createStructure): + * runtime/JSFunction.cpp: + (JSC::JSFunction::create): + (JSC::JSFunction::finishCreation): + (JSC::createDescriptorForThrowingProperty): + (JSC::JSFunction::getOwnPropertySlot): + * runtime/JSFunction.h: + * runtime/JSGlobalData.cpp: + (JSC::JSGlobalData::getHostFunction): + * runtime/JSGlobalData.h: + * runtime/JSGlobalObject.cpp: + (JSC::JSGlobalObject::reset): + (JSC::JSGlobalObject::visitChildren): + * runtime/JSGlobalObject.h: + (JSC::JSGlobalObject::boundFunctionStructure): + * runtime/Lookup.cpp: + (JSC::setUpStaticFunctionSlot): + +2011-09-22 Oliver Hunt <oliver@apple.com> + + Implement get_scoped_var in the DFG + https://bugs.webkit.org/show_bug.cgi?id=68640 + + Reviewed by Gavin Barraclough. + + Naive implementation of get_scoped_var in the DFG. Essentially this + is the bare minimum required to get correct behaviour, so there's no + load/store coalescing or type profiling involved, even though these + would be wins. No impact on SunSpider or V8. + + * dfg/DFGByteCodeParser.cpp: + (JSC::DFG::ByteCodeParser::parseBlock): + * dfg/DFGCapabilities.h: + (JSC::DFG::canCompileOpcode): + * dfg/DFGNode.h: + (JSC::DFG::Node::hasVarNumber): + (JSC::DFG::Node::hasScopeChainDepth): + (JSC::DFG::Node::scopeChainDepth): + * dfg/DFGPropagator.cpp: + (JSC::DFG::Propagator::propagateNodePredictions): + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::compile): + +2011-09-22 Adam Roben <aroben@apple.com> + + Remove FindSafari from all our .sln files + + It isn't used anymore, so there's no point in building it. + + Part of <http://webkit.org/b/68628> Remove FindSafari + + Reviewed by Steve Falkenburg. + + * JavaScriptCore.vcproj/JavaScriptCore.sln: + +2011-09-22 Filip Pizlo <fpizlo@apple.com> + + 32-bit call code clobbers the function cell tag + https://bugs.webkit.org/show_bug.cgi?id=68606 + + Reviewed by Csaba Osztrogonác. + + This is a minimalistic fix: it simply emits code to restore the + cell tag on the slow path, if we know that we failed due to + emitCallIfNotType. + + * jit/JITCall32_64.cpp: + (JSC::JIT::compileOpCallVarargsSlowCase): + (JSC::JIT::compileOpCallSlowCase): + +2011-09-21 Gavin Barraclough <barraclough@apple.com> + + Add missing addPtr->add32 mapping for X86. + + Rubber stamped by Sam Weinig. + + * assembler/MacroAssembler.h: + (JSC::MacroAssembler::addPtr): + +2011-09-21 Gavin Barraclough <barraclough@apple.com> + + Add missing addDouble for AbsoluteAddress to X86 + + Rubber stamped by Geoff Garen. + + * assembler/MacroAssemblerX86.h: + (JSC::MacroAssemblerX86::addDouble): + * assembler/X86Assembler.h: + (JSC::X86Assembler::addsd_mr): + (JSC::X86Assembler::cvtsi2sd_rr): + (JSC::X86Assembler::cvtsi2sd_mr): + +2011-09-21 Gavin Barraclough <barraclough@apple.com> + + Build fix following fix for bug #68586. + + * jit/JIT.cpp: + * jit/JITInlineMethods.h: + +2011-09-21 Filip Pizlo <fpizlo@apple.com> + + DFG JIT should be able to compile op_throw + https://bugs.webkit.org/show_bug.cgi?id=68571 + + Reviewed by Geoffrey Garen. + + This compiles op_throw in the simplest way possible: it's an OSR + point back to the old JIT. This is a good step towards increasing + coverage, particularly on Kraken, but it's neutral because the + same functions that do throw also use some other unsupported + opcodes. + + * dfg/DFGByteCodeParser.cpp: + (JSC::DFG::ByteCodeParser::parseBlock): + * dfg/DFGCapabilities.h: + (JSC::DFG::canCompileOpcode): + * dfg/DFGNode.h: + * dfg/DFGPropagator.cpp: + (JSC::DFG::Propagator::propagateNodePredictions): + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::compile): + +2011-09-21 Filip Pizlo <fpizlo@apple.com> + + DFG should support continuous optimization + https://bugs.webkit.org/show_bug.cgi?id=68329 + + Reviewed by Geoffrey Garen. + + This adds the ability to reoptimize a code block if speculation + failures happen frequently. 6% speed-up on Kraken, 1% slow-down + on V8, neutral on SunSpider. + + * CMakeLists.txt: + * GNUmakefile.list.am: + * JavaScriptCore.pro: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * JavaScriptCore.vcproj/WTF/WTF.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * bytecode/CodeBlock.cpp: + (JSC::CodeBlock::CodeBlock): + (JSC::ProgramCodeBlock::jettison): + (JSC::EvalCodeBlock::jettison): + (JSC::FunctionCodeBlock::jettison): + (JSC::CodeBlock::shouldOptimizeNow): + (JSC::CodeBlock::dumpValueProfiles): + * bytecode/CodeBlock.h: + * dfg/DFGByteCodeParser.cpp: + (JSC::DFG::ByteCodeParser::getStrongPrediction): + * dfg/DFGJITCompiler.cpp: + (JSC::DFG::JITCompiler::exitSpeculativeWithOSR): + (JSC::DFG::JITCompiler::compileEntry): + (JSC::DFG::JITCompiler::compileBody): + * dfg/DFGJITCompiler.h: + (JSC::DFG::JITCompiler::noticeOSREntry): + * dfg/DFGOSREntry.cpp: + (JSC::DFG::prepareOSREntry): + * dfg/DFGOSREntry.h: + (JSC::DFG::getOSREntryDataBytecodeIndex): + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::compile): + * heap/ConservativeRoots.cpp: + (JSC::ConservativeRoots::ConservativeRoots): + (JSC::ConservativeRoots::~ConservativeRoots): + (JSC::DummyMarkHook::mark): + (JSC::ConservativeRoots::genericAddPointer): + (JSC::ConservativeRoots::genericAddSpan): + (JSC::ConservativeRoots::add): + * heap/ConservativeRoots.h: + * heap/Heap.cpp: + (JSC::Heap::addJettisonCodeBlock): + (JSC::Heap::markRoots): + * heap/Heap.h: + * heap/JettisonedCodeBlocks.cpp: Added. + (JSC::JettisonedCodeBlocks::JettisonedCodeBlocks): + (JSC::JettisonedCodeBlocks::~JettisonedCodeBlocks): + (JSC::JettisonedCodeBlocks::addCodeBlock): + (JSC::JettisonedCodeBlocks::clearMarks): + (JSC::JettisonedCodeBlocks::deleteUnmarkedCodeBlocks): + (JSC::JettisonedCodeBlocks::traceCodeBlocks): + * heap/JettisonedCodeBlocks.h: Added. + (JSC::JettisonedCodeBlocks::mark): + * interpreter/RegisterFile.cpp: + (JSC::RegisterFile::gatherConservativeRoots): + * interpreter/RegisterFile.h: + * jit/JITStubs.cpp: + (JSC::DEFINE_STUB_FUNCTION): + * runtime/Executable.cpp: + (JSC::jettisonCodeBlock): + (JSC::EvalExecutable::jettisonOptimizedCode): + (JSC::ProgramExecutable::jettisonOptimizedCode): + (JSC::FunctionExecutable::jettisonOptimizedCodeForCall): + (JSC::FunctionExecutable::jettisonOptimizedCodeForConstruct): + * runtime/Executable.h: + (JSC::FunctionExecutable::jettisonOptimizedCodeFor): + * wtf/BitVector.h: Added. + (WTF::BitVector::BitVector): + (WTF::BitVector::~BitVector): + (WTF::BitVector::operator=): + (WTF::BitVector::size): + (WTF::BitVector::ensureSize): + (WTF::BitVector::resize): + (WTF::BitVector::clearAll): + (WTF::BitVector::get): + (WTF::BitVector::set): + (WTF::BitVector::clear): + (WTF::BitVector::bitsInPointer): + (WTF::BitVector::maxInlineBits): + (WTF::BitVector::byteCount): + (WTF::BitVector::makeInlineBits): + (WTF::BitVector::OutOfLineBits::numBits): + (WTF::BitVector::OutOfLineBits::numWords): + (WTF::BitVector::OutOfLineBits::bits): + (WTF::BitVector::OutOfLineBits::create): + (WTF::BitVector::OutOfLineBits::destroy): + (WTF::BitVector::OutOfLineBits::OutOfLineBits): + (WTF::BitVector::isInline): + (WTF::BitVector::outOfLineBits): + (WTF::BitVector::resizeOutOfLine): + (WTF::BitVector::bits): + +2011-09-21 Gavin Barraclough <barraclough@apple.com> + + Add X86 GPRInfo for DFG JIT. + https://bugs.webkit.org/show_bug.cgi?id=68586 + + Reviewed by Geoff Garen. + + * dfg/DFGGPRInfo.h: + (JSC::DFG::GPRInfo::toRegister): + (JSC::DFG::GPRInfo::toIndex): + (JSC::DFG::GPRInfo::debugName): + +2011-09-21 Gavin Barraclough <barraclough@apple.com> + + Should support value profiling on CPU(X86) + https://bugs.webkit.org/show_bug.cgi?id=68575 + + Reviewed by Sam Weinig. + + Fix verbose profiling in ToT (SlowCaseProfile had been + partially renamed to RareCaseProfile), add in-memory + bucket counter for CPU(X86), move JIT::m_canBeOptimized + out of the DFG_JIT ifdef. + + * bytecode/CodeBlock.cpp: + (JSC::CodeBlock::resetRareCaseProfiles): + (JSC::CodeBlock::dumpValueProfiles): + * bytecode/CodeBlock.h: + * dfg/DFGByteCodeParser.cpp: + (JSC::DFG::ByteCodeParser::makeSafe): + * jit/JIT.cpp: + (JSC::JIT::privateCompileSlowCases): + (JSC::JIT::privateCompile): + * jit/JIT.h: + * jit/JITInlineMethods.h: + (JSC::JIT::emitValueProfilingSite): + +2011-09-21 Filip Pizlo <fpizlo@apple.com> + + DFG does not support compiling functions as constructors + https://bugs.webkit.org/show_bug.cgi?id=68500 + + Reviewed by Oliver Hunt. + + This adds support for compiling constructors to the DFG. It's a + 1% speed-up on V8, mostly due to a 6% speed-up on early-boyer. + It's also a 13% win on access-binary-trees, but it's neutral in + the SunSpider and Kraken averages. + + * dfg/DFGByteCodeParser.cpp: + (JSC::DFG::ByteCodeParser::parseBlock): + * dfg/DFGCapabilities.h: + (JSC::DFG::mightCompileFunctionForConstruct): + (JSC::DFG::canCompileOpcode): + * dfg/DFGNode.h: + * dfg/DFGOperations.cpp: + * dfg/DFGOperations.h: + * dfg/DFGPropagator.cpp: + (JSC::DFG::Propagator::propagateNodePredictions): + (JSC::DFG::Propagator::performNodeCSE): + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::compile): + * runtime/Executable.cpp: + (JSC::FunctionExecutable::compileOptimizedForConstruct): + (JSC::FunctionExecutable::compileForConstructInternal): + * runtime/Executable.h: + (JSC::FunctionExecutable::compileForConstruct): + (JSC::FunctionExecutable::compileFor): + (JSC::FunctionExecutable::compileOptimizedFor): + +2011-09-21 Gavin Barraclough <barraclough@apple.com> + + Replace jsFunctionVPtr compares with a type check on the Structure. + https://bugs.webkit.org/show_bug.cgi?id=68557 + + Reviewed by Oliver Hunt. + + This will permit calls to still optimize to subclasses of JSFunction + that have the correct type (but a different C++ vptr). + + This patch stops passing the globalData into numerous functions. + + * dfg/DFGByteCodeParser.cpp: + (JSC::DFG::ByteCodeParser::parseBlock): + * dfg/DFGGraph.h: + (JSC::DFG::Graph::isFunctionConstant): + (JSC::DFG::Graph::valueOfFunctionConstant): + * dfg/DFGJITCompiler.h: + (JSC::DFG::JITCompiler::isFunctionConstant): + (JSC::DFG::JITCompiler::valueOfFunctionConstant): + * dfg/DFGOperations.cpp: + * interpreter/Interpreter.cpp: + (JSC::Interpreter::privateExecute): + * jit/JIT.h: + * jit/JITCall.cpp: + (JSC::JIT::compileOpCallVarargs): + (JSC::JIT::compileOpCallSlowCase): + * jit/JITCall32_64.cpp: + (JSC::JIT::compileOpCallVarargs): + (JSC::JIT::compileOpCallSlowCase): + * jit/JITInlineMethods.h: + (JSC::JIT::emitJumpIfNotType): + * jit/JITStubs.cpp: + (JSC::DEFINE_STUB_FUNCTION): + * runtime/Executable.h: + (JSC::isHostFunction): + * runtime/JSFunction.h: + (JSC::JSFunction::createStructure): + * runtime/JSObject.cpp: + (JSC::JSObject::put): + (JSC::JSObject::putWithAttributes): + * runtime/JSObject.h: + (JSC::getJSFunction): + (JSC::JSObject::putDirect): + (JSC::JSObject::putDirectWithoutTransition): + * runtime/JSType.h: + +2011-09-21 Geoffrey Garen <ggaren@apple.com> + + Removed WTFTHREADDATA_MULTITHREADED, making it always true + https://bugs.webkit.org/show_bug.cgi?id=68549 + + Reviewed by Darin Adler. + + Another part of making threads exist in WebKit. + + * wtf/WTFThreadData.cpp: + * wtf/WTFThreadData.h: + (WTF::wtfThreadData): + +2011-09-21 Dan Bernstein <mitz@apple.com> + + JavaScriptCore Part of: Prevent the WebKit frameworks from defining inappropriately-named Objective-C classes + https://bugs.webkit.org/show_bug.cgi?id=68451 + + Reviewed by Darin Adler. + + * JavaScriptCore.xcodeproj/project.pbxproj: Added a script build phase that invokes + check-for-inappropriate-objc-class-names, allowing only class names prefixed with "JS". + +2011-09-20 Gavin Barraclough <barraclough@apple.com> + + MacroAssembler fixes. + https://bugs.webkit.org/show_bug.cgi?id=68494 + + Reviewed by Sam Weinig. + + Add X86-64's 3 operand or32 to other MacroAssembler, fix load32's [const] void* mismatch + + * assembler/MacroAssembler.h: + (JSC::MacroAssembler::orPtr): + (JSC::MacroAssembler::loadPtr): + * assembler/MacroAssemblerARM.h: + (JSC::MacroAssemblerARM::or32): + * assembler/MacroAssemblerARMv7.h: + (JSC::MacroAssemblerARMv7::or32): + * assembler/MacroAssemblerMIPS.h: + (JSC::MacroAssemblerMIPS::or32): + * assembler/MacroAssemblerSH4.h: + (JSC::MacroAssemblerSH4::or32): + (JSC::MacroAssemblerSH4::load32): + * assembler/MacroAssemblerX86.h: + (JSC::MacroAssemblerX86::load32): + * assembler/MacroAssemblerX86_64.h: + (JSC::MacroAssemblerX86_64::load32): + +2011-09-20 Geoffrey Garen <ggaren@apple.com> + + Some Heap cleanup. + + Reviewed by Beth Dakin. + + * heap/MarkedBlock.cpp: + (JSC::MarkedBlock::blessNewBlock): Removed blessNewBlockForSlowPath() + because it was unused; renamed blessNewBlockForFastPath() to blessNewBlock() + since there is only one now. + + * heap/MarkedBlock.h: Removed ownerSet-related stuff since it was unused. + Updated mark bit overhead calculation. Deployed atomsPerBlock in one + place where we were recalculating it. + + * heap/MarkedSpace.cpp: + (JSC::MarkedSpace::addBlock): Updated for rename. + +2011-09-20 Filip Pizlo <fpizlo@apple.com> + + DFG JIT always speculates integer on modulo + https://bugs.webkit.org/show_bug.cgi?id=68485 + + Reviewed by Oliver Hunt. + + Added support for double modulo, which is a call to fmod(). + Also added support for recording the old JIT's statistics + on op_mod and propagating them along the graph. Finally, + fixed a goof in the ArithNodeFlags propagation logic that + was made obvious when I started testing ArithMod. + + * dfg/DFGByteCodeParser.cpp: + (JSC::DFG::ByteCodeParser::makeSafe): + (JSC::DFG::ByteCodeParser::parseBlock): + * dfg/DFGNode.h: + (JSC::DFG::Node::hasArithNodeFlags): + * dfg/DFGPropagator.cpp: + (JSC::DFG::Propagator::propagateArithNodeFlags): + (JSC::DFG::Propagator::propagateNodePredictions): + (JSC::DFG::Propagator::fixupNode): + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::compile): + +2011-09-20 ChangSeok Oh <shivamidow@gmail.com> + + [GTK] requestAnimationFrame support for gtk port + https://bugs.webkit.org/show_bug.cgi?id=66280 + + Reviewed by Martin Robinson. + + Let GTK port use REQUEST_ANIMATION_FRAME_TIMER. + + * wtf/Platform.h: + +2011-09-20 Filip Pizlo <fpizlo@apple.com> + + DFG JIT performs too many negative zero checks, and too many + overflow checks + https://bugs.webkit.org/show_bug.cgi?id=68430 + + Reviewed by Oliver Hunt. + + This adds comprehensive support for deciding how to perform an + arithmetic operations based on a combination of overflow profiling, + negative zero profiling, value profiling, and a static analysis of + how the results of these operations get used. + + This is a 72% speed-up on stanford-crypto-sha256-iterative, and a + 2.5% speed-up on the Kraken average, a 1.4% speed-up on the V8 + geomean, and neutral on SunSpider. It's also an 8.5% speed-up on + V8-crypto, because apparenty everything we do speeds up crypto. + + * dfg/DFGByteCodeParser.cpp: + (JSC::DFG::ByteCodeParser::toInt32): + (JSC::DFG::ByteCodeParser::toNumber): + (JSC::DFG::ByteCodeParser::isSmallInt32Constant): + (JSC::DFG::ByteCodeParser::valueOfInt32Constant): + (JSC::DFG::ByteCodeParser::weaklyPredictInt32): + (JSC::DFG::ByteCodeParser::makeSafe): + (JSC::DFG::ByteCodeParser::handleMinMax): + (JSC::DFG::ByteCodeParser::handleIntrinsic): + (JSC::DFG::ByteCodeParser::parseBlock): + (JSC::DFG::ByteCodeParser::processPhiStack): + (JSC::DFG::ByteCodeParser::parse): + * dfg/DFGGraph.cpp: + (JSC::DFG::Graph::dump): + * dfg/DFGJITCodeGenerator.cpp: + (JSC::DFG::JITCodeGenerator::nonSpeculativeBasicArithOp): + * dfg/DFGNode.h: + (JSC::DFG::nodeUsedAsNumber): + (JSC::DFG::nodeCanTruncateInteger): + (JSC::DFG::nodeCanIgnoreNegativeZero): + (JSC::DFG::nodeCanSpeculateInteger): + (JSC::DFG::arithNodeFlagsAsString): + (JSC::DFG::Node::Node): + (JSC::DFG::Node::hasArithNodeFlags): + (JSC::DFG::Node::rawArithNodeFlags): + (JSC::DFG::Node::arithNodeFlags): + (JSC::DFG::Node::arithNodeFlagsForCompare): + (JSC::DFG::Node::setArithNodeFlag): + (JSC::DFG::Node::mergeArithNodeFlags): + * dfg/DFGPropagator.cpp: + (JSC::DFG::Propagator::fixpoint): + (JSC::DFG::Propagator::isNotNegZero): + (JSC::DFG::Propagator::isNotZero): + (JSC::DFG::Propagator::propagateArithNodeFlags): + (JSC::DFG::Propagator::propagateArithNodeFlagsForward): + (JSC::DFG::Propagator::propagateArithNodeFlagsBackward): + (JSC::DFG::Propagator::propagateNodePredictions): + (JSC::DFG::Propagator::propagatePredictionsForward): + (JSC::DFG::Propagator::propagatePredictionsBackward): + (JSC::DFG::Propagator::toDouble): + (JSC::DFG::Propagator::fixupNode): + (JSC::DFG::Propagator::fixup): + (JSC::DFG::Propagator::startIndexForChildren): + (JSC::DFG::Propagator::endIndexForPureCSE): + (JSC::DFG::Propagator::pureCSE): + (JSC::DFG::Propagator::clobbersWorld): + (JSC::DFG::Propagator::setReplacement): + (JSC::DFG::Propagator::performNodeCSE): + (JSC::DFG::Propagator::localCSE): + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::compile): + (JSC::DFG::SpeculativeJIT::computeValueRecoveryFor): + +2011-09-19 Oliver Hunt <oliver@apple.com> + + Refactor Heap allocation logic into separate AllocationSpace class + https://bugs.webkit.org/show_bug.cgi?id=68409 + + Reviewed by Gavin Barraclough. + + This patch hoists direct manipulation of the MarkedSpace and related + data out of Heap and into a separate class. This will allow us to + have multiple allocation spaces in future, so easing the way towards + having GC'd backing stores for objects. + + * CMakeLists.txt: + * GNUmakefile.list.am: + * JavaScriptCore.exp: + * JavaScriptCore.gypi: + * JavaScriptCore.pro: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * debugger/Debugger.cpp: + (JSC::Debugger::recompileAllJSFunctions): + * heap/AllocationSpace.cpp: Added. + (JSC::AllocationSpace::tryAllocate): + (JSC::AllocationSpace::allocateSlowCase): + (JSC::AllocationSpace::allocateBlock): + (JSC::AllocationSpace::freeBlocks): + (JSC::TakeIfEmpty::TakeIfEmpty): + (JSC::TakeIfEmpty::operator()): + (JSC::TakeIfEmpty::returnValue): + (JSC::AllocationSpace::shrink): + * heap/AllocationSpace.h: Added. + (JSC::AllocationSpace::AllocationSpace): + (JSC::AllocationSpace::blocks): + (JSC::AllocationSpace::sizeClassFor): + (JSC::AllocationSpace::setHighWaterMark): + (JSC::AllocationSpace::highWaterMark): + (JSC::AllocationSpace::canonicalizeBlocks): + (JSC::AllocationSpace::resetAllocator): + (JSC::AllocationSpace::forEachCell): + (JSC::AllocationSpace::forEachBlock): + (JSC::AllocationSpace::allocate): + * heap/Heap.cpp: + (JSC::Heap::Heap): + (JSC::Heap::reportExtraMemoryCostSlowCase): + (JSC::Heap::getConservativeRegisterRoots): + (JSC::Heap::markRoots): + (JSC::Heap::clearMarks): + (JSC::Heap::sweep): + (JSC::Heap::objectCount): + (JSC::Heap::size): + (JSC::Heap::capacity): + (JSC::Heap::globalObjectCount): + (JSC::Heap::objectTypeCounts): + (JSC::Heap::collect): + (JSC::Heap::canonicalizeBlocks): + (JSC::Heap::resetAllocator): + (JSC::Heap::freeBlocks): + (JSC::Heap::shrink): + * heap/Heap.h: + (JSC::Heap::objectSpace): + (JSC::Heap::sizeClassForObject): + (JSC::Heap::allocate): + * jit/JITInlineMethods.h: + (JSC::JIT::emitAllocateBasicJSObject): + * runtime/JSGlobalData.cpp: + (JSC::JSGlobalData::recompileAllJSFunctions): + (JSC::JSGlobalData::releaseExecutableMemory): + +2011-09-19 Geoffrey Garen <ggaren@apple.com> + + Removed BREWMP* platform #ifdefs + https://bugs.webkit.org/show_bug.cgi?id=68425 + + BREWMP* has no maintainer, and this is dead code. + + Reviewed by Darin Adler. + + * heap/MarkStack.h: + (JSC::::shrinkAllocation): + * jit/ExecutableAllocator.h: + (JSC::ExecutableAllocator::cacheFlush): + * runtime/TimeoutChecker.cpp: + (JSC::getCPUTime): + * wtf/Assertions.cpp: + * wtf/Assertions.h: + * wtf/CurrentTime.cpp: + * wtf/DateMath.cpp: + (WTF::calculateUTCOffset): + * wtf/FastMalloc.cpp: + (WTF::fastMalloc): + (WTF::fastCalloc): + (WTF::fastMallocSize): + * wtf/FastMalloc.h: + * wtf/MainThread.cpp: + * wtf/MathExtras.h: + * wtf/OwnPtrCommon.h: + * wtf/Platform.h: + * wtf/RandomNumber.cpp: + (WTF::randomNumber): + * wtf/RandomNumberSeed.h: + (WTF::initializeRandomNumberGenerator): + * wtf/text/WTFString.h: + * wtf/unicode/Unicode.h: + +2011-09-20 Adam Roben <aroben@apple.com> + + Windows build fix after r95523 + + * wtf/CheckedArithmetic.h: Added stdint.h so we can have int64_t defined. + +2011-09-18 Filip Pizlo <fpizlo@apple.com> + + DFG JIT does not speculate aggressively enough on GetById + https://bugs.webkit.org/show_bug.cgi?id=68320 + + Reviewed by Oliver Hunt. + + This adds the ability to access properties directly, by offset. + This optimization kicks in when at the time of DFG compilation, + it appears that the given get_by_id is self-cached by the old JIT. + Two new opcodes get introduced: CheckStructure and GetByOffset. + CheckStructure performs a speculation check on the object's + structure, and returns the storage pointer. GetByOffset performs + a direct read of the field from the storage pointer. Both + CheckStructure and GetByOffset can be CSE'd, so that we can + eliminate redundant structure checks, and redundant reads of the + same field. + + This is a 4% speed-up on V8, a 2% slow-down on Kraken, and + neutral on SunSpider. + + * bytecode/PredictedType.cpp: + (JSC::predictionFromClassInfo): + (JSC::predictionFromStructure): + (JSC::predictionFromCell): + * bytecode/PredictedType.h: + * dfg/DFGByteCodeParser.cpp: + (JSC::DFG::ByteCodeParser::parseBlock): + * dfg/DFGGenerationInfo.h: + (JSC::DFG::dataFormatToString): + (JSC::DFG::needDataFormatConversion): + (JSC::DFG::GenerationInfo::initStorage): + (JSC::DFG::GenerationInfo::spill): + (JSC::DFG::GenerationInfo::fillStorage): + * dfg/DFGGraph.h: + (JSC::DFG::Graph::predict): + (JSC::DFG::Graph::getPrediction): + * dfg/DFGJITCodeGenerator.cpp: + (JSC::DFG::JITCodeGenerator::fillInteger): + (JSC::DFG::JITCodeGenerator::fillDouble): + (JSC::DFG::JITCodeGenerator::fillJSValue): + (JSC::DFG::JITCodeGenerator::fillStorage): + (JSC::DFG::GPRTemporary::GPRTemporary): + * dfg/DFGJITCodeGenerator.h: + (JSC::DFG::JITCodeGenerator::silentSpillGPR): + (JSC::DFG::JITCodeGenerator::silentFillGPR): + (JSC::DFG::JITCodeGenerator::spill): + (JSC::DFG::JITCodeGenerator::storageResult): + (JSC::DFG::StorageOperand::StorageOperand): + (JSC::DFG::StorageOperand::~StorageOperand): + (JSC::DFG::StorageOperand::index): + (JSC::DFG::StorageOperand::gpr): + (JSC::DFG::StorageOperand::use): + * dfg/DFGNode.h: + (JSC::DFG::OpInfo::OpInfo): + (JSC::DFG::Node::Node): + (JSC::DFG::Node::hasPrediction): + (JSC::DFG::Node::hasStructure): + (JSC::DFG::Node::structure): + (JSC::DFG::Node::hasStorageAccessData): + (JSC::DFG::Node::storageAccessDataIndex): + * dfg/DFGPropagator.cpp: + (JSC::DFG::Propagator::propagateNode): + (JSC::DFG::Propagator::globalVarLoadElimination): + (JSC::DFG::Propagator::getMethodLoadElimination): + (JSC::DFG::Propagator::checkStructureLoadElimination): + (JSC::DFG::Propagator::getByOffsetLoadElimination): + (JSC::DFG::Propagator::performNodeCSE): + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::fillSpeculateIntInternal): + (JSC::DFG::SpeculativeJIT::fillSpeculateDouble): + (JSC::DFG::SpeculativeJIT::fillSpeculateCell): + (JSC::DFG::SpeculativeJIT::fillSpeculateBoolean): + (JSC::DFG::SpeculativeJIT::compile): + * wtf/StdLibExtras.h: + (WTF::safeCast): + +2011-09-19 Mark Hahnenberg <mhahnenberg@apple.com> + + Remove toPrimitive from JSCell + https://bugs.webkit.org/show_bug.cgi?id=67875 + + Reviewed by Darin Adler. + + Part of the refactoring process to un-virtualize JSCell. We move + all of the implicit functionality provided by the virtual toPrimitive method + in JSCell to be explicit in JSValue::toPrimitive and JSCell:toPrimitive while + also de-virtualizing JSCell::toPrimitive. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * runtime/JSCell.cpp: + (JSC::JSCell::toPrimitive): + * runtime/JSCell.h: + + We replace JSNotAnObject::toPrimitive with defaultValue, which it overrides from + JSObject. This pushes the virtual method further down, enabling us to get rid + of the virtual call in JSCell. Eventually we'll probably have to deal with this + again, but we'll cross that bridge when we come to it. + * runtime/JSNotAnObject.cpp: + (JSC::JSNotAnObject::defaultValue): + * runtime/JSNotAnObject.h: + * runtime/JSObject.h: + * runtime/JSString.h: + +2011-09-19 Geoffrey Garen <ggaren@apple.com> + + Removed ENABLE_LAZY_BLOCK_FREEING and related #ifdefs + https://bugs.webkit.org/show_bug.cgi?id=68424 + + As discussed on webkit-dev. All ports build with threads enabled in JSC now. + + This may break WinCE and other ports that have not built and tested with + this configuration. I've filed bugs for port maintainers. It's time for + WebKit to move forward. + + Reviewed by Mark Rowe. + + * heap/Heap.cpp: + (JSC::Heap::Heap): + (JSC::Heap::~Heap): + (JSC::Heap::destroy): + (JSC::Heap::blockFreeingThreadMain): + (JSC::Heap::allocateBlock): + (JSC::Heap::freeBlocks): + (JSC::Heap::releaseFreeBlocks): + * heap/Heap.h: + * wtf/Platform.h: + +2011-09-19 Geoffrey Garen <ggaren@apple.com> + + Removed ENABLE_WTF_MULTIPLE_THREADS and related #ifdefs + https://bugs.webkit.org/show_bug.cgi?id=68423 + + As discussed on webkit-dev. All ports build with threads enabled in WTF now. + + This may break WinCE and other ports that have not built and tested with + this configuration. I've filed bugs for port maintainers. It's time for + WebKit to move forward. + + Reviewed by Mark Rowe. + + * wtf/CryptographicallyRandomNumber.cpp: + (WTF::ARC4Stream::ARC4RandomNumberGenerator::randomNumber): + (WTF::ARC4Stream::ARC4RandomNumberGenerator::randomValues): + * wtf/FastMalloc.cpp: + * wtf/Platform.h: + * wtf/RandomNumber.cpp: + (WTF::randomNumber): + * wtf/RefCountedLeakCounter.cpp: + (WTF::RefCountedLeakCounter::increment): + (WTF::RefCountedLeakCounter::decrement): + * wtf/ThreadingPthreads.cpp: + (WTF::initializeThreading): + * wtf/ThreadingWin.cpp: + (WTF::initializeThreading): + * wtf/dtoa.cpp: + (WTF::pow5mult): + * wtf/gtk/ThreadingGtk.cpp: + (WTF::initializeThreading): + * wtf/qt/ThreadingQt.cpp: + (WTF::initializeThreading): + +2011-09-19 Geoffrey Garen <ggaren@apple.com> + + Removed ENABLE_JSC_MULTIPLE_THREADS and related #ifdefs. + https://bugs.webkit.org/show_bug.cgi?id=68422 + + As discussed on webkit-dev. All ports build with threads enabled in JSC now. + + This may break WinCE and other ports that have not built and tested with + this configuration. I've filed bugs for port maintainers. It's time for + WebKit to move forward. + + Reviewed by Sam Weinig. + + * API/APIShims.h: + (JSC::APIEntryShimWithoutLock::APIEntryShimWithoutLock): + * API/JSContextRef.cpp: + * heap/MachineStackMarker.cpp: + (JSC::MachineThreads::MachineThreads): + (JSC::MachineThreads::~MachineThreads): + (JSC::MachineThreads::gatherConservativeRoots): + * heap/MachineStackMarker.h: + * runtime/InitializeThreading.cpp: + (JSC::initializeThreadingOnce): + (JSC::initializeThreading): + * runtime/JSGlobalData.cpp: + (JSC::JSGlobalData::sharedInstance): + * runtime/JSGlobalData.h: + (JSC::JSGlobalData::makeUsableFromMultipleThreads): + * runtime/JSLock.cpp: + * runtime/Structure.cpp: + * wtf/Platform.h: + +2011-09-19 Sheriff Bot <webkit.review.bot@gmail.com> + + Unreviewed, rolling out r95493 and r95496. + http://trac.webkit.org/changeset/95493 + http://trac.webkit.org/changeset/95496 + https://bugs.webkit.org/show_bug.cgi?id=68418 + + Broke Windows build (Requested by rniwa on #webkit). + + * CMakeLists.txt: + * GNUmakefile.list.am: + * JavaScriptCore.exp: + * JavaScriptCore.gypi: + * JavaScriptCore.pro: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * debugger/Debugger.cpp: + (JSC::Debugger::recompileAllJSFunctions): + * heap/AllocationSpace.cpp: Removed. + * heap/AllocationSpace.h: Removed. + * heap/Heap.cpp: + (JSC::CountFunctor::TakeIfEmpty::TakeIfEmpty): + (JSC::CountFunctor::TakeIfEmpty::operator()): + (JSC::CountFunctor::TakeIfEmpty::returnValue): + (JSC::Heap::Heap): + (JSC::Heap::reportExtraMemoryCostSlowCase): + (JSC::Heap::tryAllocate): + (JSC::Heap::allocateSlowCase): + (JSC::Heap::getConservativeRegisterRoots): + (JSC::Heap::markRoots): + (JSC::Heap::clearMarks): + (JSC::Heap::sweep): + (JSC::Heap::objectCount): + (JSC::Heap::size): + (JSC::Heap::capacity): + (JSC::Heap::globalObjectCount): + (JSC::Heap::objectTypeCounts): + (JSC::Heap::collect): + (JSC::Heap::canonicalizeBlocks): + (JSC::Heap::resetAllocator): + (JSC::Heap::allocateBlock): + (JSC::Heap::freeBlocks): + (JSC::Heap::shrink): + * heap/Heap.h: + (JSC::Heap::markedSpace): + (JSC::Heap::forEachCell): + (JSC::Heap::forEachBlock): + (JSC::Heap::sizeClassFor): + (JSC::Heap::allocate): + * jit/JITInlineMethods.h: + (JSC::JIT::emitAllocateBasicJSObject): + * runtime/JSGlobalData.cpp: + (JSC::JSGlobalData::recompileAllJSFunctions): + (JSC::JSGlobalData::releaseExecutableMemory): + +2011-09-19 Gavin Barraclough <barraclough@apple.com> + + Errrk, missed stylebot comments in last commit. + + * runtime/StringPrototype.cpp: + (JSC::stringProtoFuncSplit): + +2011-09-19 Gavin Barraclough <barraclough@apple.com> + + String#split is buggy + https://bugs.webkit.org/show_bug.cgi?id=68348 + + Reviewed by Sam Weinig. + + * runtime/StringPrototype.cpp: + (JSC::jsStringWithReuse): + - added helper function to reuse original JSString value. + (JSC::stringProtoFuncSplit): + - Rewritten from the spec. + * tests/mozilla/ecma/String/15.5.4.8-2.js: + (getTestCases): + - This test is not ES5 compliant. + +2011-09-19 Geoffrey Garen <ggaren@apple.com> + + Removed lots of friend declarations from JSCell, so we can more + effectively make use of private and protected. + + Reviewed by Sam Weinig. + + * runtime/JSCell.h: Removed MSVCBugWorkaround because it was a lot of + confusion for not much safety. + (JSC::JSCell::operator new): Made this public because it is used by a + few clients, and not really dangerous. + + * runtime/JSObject.cpp: + (JSC::JSObject::put): + (JSC::JSObject::deleteProperty): + (JSC::JSObject::defineGetter): + (JSC::JSObject::defineSetter): + (JSC::JSObject::getPropertySpecificValue): + (JSC::JSObject::getOwnPropertyNames): + (JSC::JSObject::seal): + (JSC::JSObject::freeze): + (JSC::JSObject::preventExtensions): + (JSC::JSObject::removeDirect): + (JSC::JSObject::createInheritorID): + (JSC::JSObject::allocatePropertyStorage): + (JSC::JSObject::getOwnPropertyDescriptor): + * runtime/JSObject.h: + (JSC::JSObject::getDirect): + (JSC::JSObject::getDirectLocation): + (JSC::JSObject::hasCustomProperties): + (JSC::JSObject::hasGetterSetterProperties): + (JSC::JSObject::isSealed): + (JSC::JSObject::isFrozen): + (JSC::JSObject::isExtensible): + (JSC::JSObject::flattenDictionaryObject): + (JSC::JSObject::finishCreation): + (JSC::JSObject::prototype): + (JSC::JSObject::setPrototype): + (JSC::JSObject::inlineGetOwnPropertySlot): + (JSC::JSCell::fastGetOwnProperty): + (JSC::JSObject::putDirectInternal): + (JSC::JSObject::putDirectWithoutTransition): + (JSC::JSObject::transitionTo): + (JSC::JSObject::visitChildrenDirect): Changed all use of m_structure to + structure() / setStructure(), so we don't have to be a friend of JSCell. + + * runtime/Structure.h: + (JSC::JSCell::setStructure): Added, to avoid direct access by JSObject + to JSCell::m_structure. + +2011-09-19 Adam Barth <abarth@webkit.org> + + Always enable ENABLE(EVENTSOURCE) + https://bugs.webkit.org/show_bug.cgi?id=68414 + + Reviewed by Eric Seidel. + + * Configurations/FeatureDefines.xcconfig: + +2011-09-19 Eli Fidler <efidler@rim.com> + + Enable JSC_MULTIPLE_THREADS for OS(QNX). + https://bugs.webkit.org/show_bug.cgi?id=68047 + + Reviewed by Daniel Bates. + + SA_RESTART was required for SIGUSR2-based debugging, but is not + present on QNX. This debugging doesn't seem critical to + JSC_MULTIPLE_THREADS, so allow it to proceed. + + * heap/MachineStackMarker.cpp: + (JSC::MachineThreads::Thread::Thread): + (JSC::getPlatformThreadRegisters): + (JSC::otherThreadStackPointer): + (JSC::freePlatformThreadRegisters): + * wtf/Platform.h: enable PTHREADS for OS(QNX) + +2011-09-19 Oliver Hunt <oliver@apple.com> + + Windows build fix. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + +2011-09-19 Oliver Hunt <oliver@apple.com> + + Refactor Heap allocation logic into separate AllocationSpace class + https://bugs.webkit.org/show_bug.cgi?id=68409 + + Reviewed by Gavin Barraclough. + + This patch hoists direct manipulation of the MarkedSpace and related + data out of Heap and into a separate class. This will allow us to + have multiple allocation spaces in future, so easing the way towards + having GC'd backing stores for objects. + + * CMakeLists.txt: + * GNUmakefile.list.am: + * JavaScriptCore.exp: + * JavaScriptCore.gypi: + * JavaScriptCore.pro: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * debugger/Debugger.cpp: + (JSC::Debugger::recompileAllJSFunctions): + * heap/AllocationSpace.cpp: Added. + (JSC::AllocationSpace::tryAllocate): + (JSC::AllocationSpace::allocateSlowCase): + (JSC::AllocationSpace::allocateBlock): + (JSC::AllocationSpace::freeBlocks): + (JSC::TakeIfEmpty::TakeIfEmpty): + (JSC::TakeIfEmpty::operator()): + (JSC::TakeIfEmpty::returnValue): + (JSC::AllocationSpace::shrink): + * heap/AllocationSpace.h: Added. + (JSC::AllocationSpace::AllocationSpace): + (JSC::AllocationSpace::blocks): + (JSC::AllocationSpace::sizeClassFor): + (JSC::AllocationSpace::setHighWaterMark): + (JSC::AllocationSpace::highWaterMark): + (JSC::AllocationSpace::canonicalizeBlocks): + (JSC::AllocationSpace::resetAllocator): + (JSC::AllocationSpace::forEachCell): + (JSC::AllocationSpace::forEachBlock): + (JSC::AllocationSpace::allocate): + * heap/Heap.cpp: + (JSC::Heap::Heap): + (JSC::Heap::reportExtraMemoryCostSlowCase): + (JSC::Heap::getConservativeRegisterRoots): + (JSC::Heap::markRoots): + (JSC::Heap::clearMarks): + (JSC::Heap::sweep): + (JSC::Heap::objectCount): + (JSC::Heap::size): + (JSC::Heap::capacity): + (JSC::Heap::globalObjectCount): + (JSC::Heap::objectTypeCounts): + (JSC::Heap::collect): + (JSC::Heap::canonicalizeBlocks): + (JSC::Heap::resetAllocator): + (JSC::Heap::freeBlocks): + (JSC::Heap::shrink): + * heap/Heap.h: + (JSC::Heap::objectSpace): + (JSC::Heap::sizeClassForObject): + (JSC::Heap::allocate): + * jit/JITInlineMethods.h: + (JSC::JIT::emitAllocateBasicJSObject): + * runtime/JSGlobalData.cpp: + (JSC::JSGlobalData::recompileAllJSFunctions): + (JSC::JSGlobalData::releaseExecutableMemory): + +2011-09-19 Adam Roben <aroben@apple.com> + + Windows build fix after r95310 + + * JavaScriptCore.vcproj/testRegExp/testRegExpCommon.vsprops: Added + include\private\JavaScriptCore to the include path so DFGIntrinsic.h can be found. + +2011-09-19 Filip Pizlo <fpizlo@apple.com> + + DFG speculation failures should act as additional value profiles + https://bugs.webkit.org/show_bug.cgi?id=68335 + + Reviewed by Oliver Hunt. + + This adds slow-case counters to the old JIT. It also ensures that + negative zero in multiply is handled carefully. The old JIT + previously took slow path if the result of a multiply was zero, + which, without any changes, would cause the DFG to think that + every such multiply produced a double result. + + This also fixes a bug in the old JIT's handling of decrements. It + would take the slow path if the result was zero, but not if it + underflowed. + + By itself, this would be a 1% slow-down on V8 and Kraken. But then + I wrote optimizations in the DFG that take advantage of this new + information. It's no longer the case that every multiply needs to + do a check for negative zero; it only happens if the negative + zero is ignored. + + This results in a 12% speed-up on v8-crypto, for a 1.4% geomean + speed-up in V8. It's mostly neutral on Kraken. I can see an + 0.5% slow-down and it appears to be significant. + + * bytecode/CodeBlock.cpp: + (JSC::CodeBlock::resetRareCaseProfiles): + (JSC::CodeBlock::dumpValueProfiles): + * bytecode/CodeBlock.h: + * bytecode/ValueProfile.h: + (JSC::RareCaseProfile::RareCaseProfile): + (JSC::getRareCaseProfileBytecodeOffset): + * dfg/DFGByteCodeParser.cpp: + (JSC::DFG::ByteCodeParser::toInt32): + (JSC::DFG::ByteCodeParser::makeSafe): + (JSC::DFG::ByteCodeParser::parseBlock): + * dfg/DFGJITCodeGenerator.cpp: + (JSC::DFG::GPRTemporary::GPRTemporary): + * dfg/DFGJITCodeGenerator.h: + * dfg/DFGNode.h: + * dfg/DFGPropagator.cpp: + (JSC::DFG::Propagator::propagateNode): + (JSC::DFG::Propagator::fixupNode): + (JSC::DFG::Propagator::clobbersWorld): + (JSC::DFG::Propagator::performNodeCSE): + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::compile): + (JSC::DFG::SpeculativeJIT::computeValueRecoveryFor): + * jit/JIT.cpp: + (JSC::JIT::privateCompileSlowCases): + * jit/JIT.h: + (JSC::JIT::linkDummySlowCase): + * jit/JITArithmetic.cpp: + (JSC::JIT::emit_op_post_dec): + (JSC::JIT::emit_op_pre_dec): + (JSC::JIT::compileBinaryArithOp): + (JSC::JIT::emit_op_add): + (JSC::JIT::emitSlow_op_add): + * jit/JITInlineMethods.h: + (JSC::JIT::addSlowCase): + +2011-09-19 Adam Roben <aroben@apple.com> + + Windows build fix after r94575 + + * JavaScriptCore.vcproj/JavaScriptCore.sln: Relinearized project dependencies. testRegExp + now builds just before FindSafari. + +2011-09-19 Sheriff Bot <webkit.review.bot@gmail.com> + + Unreviewed, rolling out r95466. + http://trac.webkit.org/changeset/95466 + https://bugs.webkit.org/show_bug.cgi?id=68389 + + Incorrect version of the patch. (Requested by mhahnenberg on + #webkit). + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * runtime/JSCell.cpp: + (JSC::JSCell::toPrimitive): + * runtime/JSCell.h: + (JSC::JSCell::JSValue::toPrimitive): + * runtime/JSNotAnObject.cpp: + (JSC::JSNotAnObject::toPrimitive): + * runtime/JSNotAnObject.h: + * runtime/JSObject.h: + * runtime/JSString.h: + +2011-09-19 Mark Hahnenberg <mhahnenberg@apple.com> + + Remove toPrimitive from JSCell + https://bugs.webkit.org/show_bug.cgi?id=67875 + + Reviewed by Geoffrey Garen. + + Part of the refactoring process to un-virtualize JSCell. We move + all of the implicit functionality provided by the virtual toPrimitive method + in JSCell to be explicit in JSValue::toPrimitive and JSCell:toPrimitive while + also de-virtualizing JSCell::toPrimitive. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * runtime/JSCell.cpp: + (JSC::JSCell::toPrimitive): + * runtime/JSCell.h: + + We replace JSNotAnObject::toPrimitive with defaultValue, which it overrides from + JSObject. This pushes the virtual method further down, enabling us to get rid + of the virtual call in JSCell. Eventually we'll probably have to deal with this + again, but we'll cross that bridge when we come to it. + * runtime/JSNotAnObject.cpp: + (JSC::JSNotAnObject::defaultValue): + * runtime/JSNotAnObject.h: + * runtime/JSObject.h: + * runtime/JSString.h: + (JSC::JSValue::toPrimitive): + +2011-09-19 Oliver Hunt <oliver@apple.com> + + Build fix. + + * jit/JITPropertyAccess32_64.cpp: + (JSC::JIT::compileGetDirectOffset): + +2011-09-19 Oliver Hunt <oliver@apple.com> + + Rename NewSpace.{h,cpp} to MarkedSpace.{h,cpp} + https://bugs.webkit.org/show_bug.cgi?id=68376 + + Reviewed by Gavin Barraclough. + + Renamed the the MarkedSpace files to match new name, and + updated the relevant references. + + * CMakeLists.txt: + * GNUmakefile.list.am: + * JavaScriptCore.gypi: + * JavaScriptCore.pro: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * heap/Heap.h: + * heap/MarkedSpace.cpp: Renamed from Source/JavaScriptCore/heap/NewSpace.cpp. + (JSC::MarkedSpace::MarkedSpace): + (JSC::MarkedSpace::addBlock): + (JSC::MarkedSpace::removeBlock): + (JSC::MarkedSpace::resetAllocator): + (JSC::MarkedSpace::canonicalizeBlocks): + * heap/MarkedSpace.h: Renamed from Source/JavaScriptCore/heap/NewSpace.h. + (JSC::MarkedSpace::waterMark): + (JSC::MarkedSpace::highWaterMark): + (JSC::MarkedSpace::setHighWaterMark): + (JSC::MarkedSpace::sizeClassFor): + (JSC::MarkedSpace::allocate): + (JSC::MarkedSpace::forEachBlock): + (JSC::MarkedSpace::SizeClass::SizeClass): + (JSC::MarkedSpace::SizeClass::resetAllocator): + (JSC::MarkedSpace::SizeClass::canonicalizeBlock): + * runtime/JSCell.h: + +2011-09-19 Oliver Hunt <oliver@apple.com> + + Rename NewSpace to MarkedSpace + https://bugs.webkit.org/show_bug.cgi?id=68375 + + Reviewed by Gavin Barraclough. + + Rename NewSpace to a more accurate name, and update all uses. + This patch doesn't rename the files themselves as that will + just make the patch appear bigger than it is. + + * JavaScriptCore.exp: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * heap/Heap.cpp: + (JSC::CountFunctor::TakeIfEmpty::TakeIfEmpty): + (JSC::CountFunctor::TakeIfEmpty::operator()): + (JSC::Heap::Heap): + (JSC::Heap::reportExtraMemoryCostSlowCase): + (JSC::Heap::tryAllocate): + (JSC::Heap::allocateSlowCase): + (JSC::Heap::collect): + (JSC::Heap::canonicalizeBlocks): + (JSC::Heap::resetAllocator): + (JSC::Heap::isValidAllocation): + (JSC::Heap::shrink): + * heap/Heap.h: + (JSC::Heap::markedSpace): + (JSC::Heap::sizeClassFor): + (JSC::Heap::allocate): + * heap/NewSpace.cpp: + (JSC::MarkedSpace::MarkedSpace): + (JSC::MarkedSpace::addBlock): + (JSC::MarkedSpace::removeBlock): + (JSC::MarkedSpace::resetAllocator): + (JSC::MarkedSpace::canonicalizeBlocks): + * heap/NewSpace.h: + (JSC::MarkedSpace::waterMark): + (JSC::MarkedSpace::highWaterMark): + (JSC::MarkedSpace::setHighWaterMark): + (JSC::MarkedSpace::sizeClassFor): + (JSC::MarkedSpace::allocate): + (JSC::MarkedSpace::forEachBlock): + (JSC::MarkedSpace::SizeClass::SizeClass): + (JSC::MarkedSpace::SizeClass::resetAllocator): + (JSC::MarkedSpace::SizeClass::canonicalizeBlock): + * jit/JITInlineMethods.h: + (JSC::JIT::emitAllocateBasicJSObject): + +2011-09-19 Peter Rybin <peter.rybin@gmail.com> + + TextPosition refactoring: Merge ZeroBasedNumber and OneBasedNumber classes + https://bugs.webkit.org/show_bug.cgi?id=63541 + + Reviewed by Adam Barth. + + * parser/SourceProvider.h: + (JSC::SourceProvider::startPosition): + * wtf/text/TextPosition.h: + (WTF::OrdinalNumber::fromZeroBasedInt): + (WTF::OrdinalNumber::fromOneBasedInt): + (WTF::OrdinalNumber::OrdinalNumber): + (WTF::OrdinalNumber::zeroBasedInt): + (WTF::OrdinalNumber::oneBasedInt): + (WTF::OrdinalNumber::operator==): + (WTF::OrdinalNumber::operator!=): + (WTF::OrdinalNumber::first): + (WTF::OrdinalNumber::beforeFirst): + (WTF::TextPosition::TextPosition): + (WTF::TextPosition::minimumPosition): + (WTF::TextPosition::belowRangePosition): + +2011-09-19 Dan Bernstein <mitz@apple.com> + + JavaScriptCore part of [mac] WebKit contains Objective-C classes that are not prefixed with its standard prefixes + https://bugs.webkit.org/show_bug.cgi?id=68323 + + Reviewed by Sam Weinig. + + Renamed WTFMainThreadCaller to JSWTFMainThreadCaller. + + * wtf/mac/MainThreadMac.mm: + (WTF::initializeMainThreadPlatform): + (WTF::initializeMainThreadToProcessMainThreadPlatform): + +2011-09-19 Oliver Hunt <oliver@apple.com> + + Remove direct property slot pointers from the instruction stream + https://bugs.webkit.org/show_bug.cgi?id=68373 + + Reviewed by Gavin Barraclough. + + Use an indirect load to access prototype properties rather than directly + storing the property address in the instruction stream. This should allow + further optimisations in future, and also provides a 0.5% win to sunspider. + + * dfg/DFGRepatch.cpp: + (JSC::DFG::generateProtoChainAccessStub): + * jit/JITPropertyAccess.cpp: + (JSC::JIT::compileGetDirectOffset): + * jit/JITPropertyAccess32_64.cpp: + (JSC::JIT::compileGetDirectOffset): + * runtime/JSObject.h: + (JSC::JSObject::addressOfPropertyStorage): + +2011-09-19 Oliver Hunt <oliver@apple.com> + + Remove bump allocator + https://bugs.webkit.org/show_bug.cgi?id=68370 + + Reviewed by Sam Weinig. + + Can't do anything with this allocator currently, and it's + increasing the complexity of the GC code. Slight progression + on SunSpider, slight regression (undoing the original progression) + in V8. + + * heap/Heap.cpp: + (JSC::Heap::collect): + * heap/Heap.h: + * heap/NewSpace.cpp: + (JSC::NewSpace::NewSpace): + * heap/NewSpace.h: + (JSC::NewSpace::allocate): + * runtime/JSObject.cpp: + (JSC::JSObject::allocatePropertyStorage): + * runtime/JSObject.h: + (JSC::JSObject::~JSObject): + (JSC::JSObject::visitChildrenDirect): + * runtime/StorageBarrier.h: + (JSC::StorageBarrier::set): + +2011-09-19 Carlos Garcia Campos <cgarcia@igalia.com> + + [GTK] Fix distcheck build + https://bugs.webkit.org/show_bug.cgi?id=68346 + + Reviewed by Philippe Normand. + + * GNUmakefile.list.am: + +2011-09-19 Carlos Garcia Campos <cgarcia@igalia.com> + + [GTK] Fix distcheck build + https://bugs.webkit.org/show_bug.cgi?id=68241 + + Reviewed by Martin Robinson. + + * GNUmakefile.list.am: + +2011-09-18 Dan Bernstein <mitz@apple.com> + + Removed ProfilerServer. + + Reviewed by Mark Rowe. + + * JavaScriptCore.gypi: + * JavaScriptCore.xcodeproj/project.pbxproj: + * profiler/ProfilerServer.h: Removed. + * profiler/ProfilerServer.mm: Removed. + * runtime/JSGlobalData.cpp: + (JSC::JSGlobalData::JSGlobalData): + * wscript: + +2011-09-17 Filip Pizlo <fpizlo@apple.com> + + DFG JIT should inline Math.min, Math.max, and Math.sqrt + https://bugs.webkit.org/show_bug.cgi?id=68318 + + Reviewed by Gavin Barraclough. + + Adds Math.min, Math.max, and Math.sqrt intrinsics. Adds support for + a function to have an intrinsic but not a thunk generator. This is + a 7% speed-up on access-nbody, and neutral elsewhere, mainly because + we're still not DFG compiling the bulk of the hot code in Kraken audio + benchmarks. + + * create_hash_table: + * dfg/DFGByteCodeParser.cpp: + (JSC::DFG::ByteCodeParser::handleMinMax): + (JSC::DFG::ByteCodeParser::handleIntrinsic): + * dfg/DFGIntrinsic.h: + * dfg/DFGNode.h: + * dfg/DFGPropagator.cpp: + (JSC::DFG::Propagator::propagateNode): + (JSC::DFG::Propagator::fixupNode): + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::compile): + * jit/JITStubs.cpp: + (JSC::JITThunks::hostFunctionStub): + * runtime/Lookup.cpp: + (JSC::setUpStaticFunctionSlot): + +2011-09-18 Nico Weber <thakis@chromium.org> + + Remove two files from JavaScriptCore.gypi that were removed in r95240 + https://bugs.webkit.org/show_bug.cgi?id=68327 + + Unreviewed, build warning fix. + + * JavaScriptCore.gypi: + +2011-09-17 Oliver Hunt <oliver@apple.com> + + Remove special case handling of inline storage from the JIT + https://bugs.webkit.org/show_bug.cgi?id=68319 + + Reviewed by Gavin Barraclough. + + Simplify logic used for reading and writing to property storage + by removing the special cases for inline storage. This has no + perf impact. + + * dfg/DFGRepatch.cpp: + (JSC::DFG::generateProtoChainAccessStub): + (JSC::DFG::tryBuildGetByIDList): + * jit/JIT.h: + * jit/JITPropertyAccess.cpp: + (JSC::JIT::compilePutDirectOffset): + (JSC::JIT::compileGetDirectOffset): + (JSC::JIT::privateCompilePutByIdTransition): + (JSC::JIT::privateCompileGetByIdSelfList): + * jit/JITPropertyAccess32_64.cpp: + (JSC::JIT::compilePutDirectOffset): + (JSC::JIT::compileGetDirectOffset): + (JSC::JIT::privateCompilePutByIdTransition): + (JSC::JIT::privateCompileGetByIdSelfList): + +2011-09-17 Filip Pizlo <fpizlo@apple.com> + + DFG JIT does not have full block-local CSE + https://bugs.webkit.org/show_bug.cgi?id=68316 + + Reviewed by Oliver Hunt. + + This adds block-local CSE to the DFG. CSE runs in the propagator just after + type propagation. It is part of the propagator itself because it needs to + use the propagator's internal data structures to determine which operations + may have side effects. Because it changes the live-ranges of nodes, the + virtual register allocator had to be moved into the propagator so that it + runs after CSE. To ensure that the back-end knows to keep the inputs to + any eliminated node alive for OSR, a new node type, Phantom, was introduced. + It is a no-op but prolonges the live-range of its inputs. + + This is an 80% speed-up on imaging-gaussian-blur, and a 10% speed-up on + Kraken. + + * JavaScriptCore.xcodeproj/project.pbxproj: + * dfg/DFGAliasTracker.h: Removed. + * dfg/DFGByteCodeParser.cpp: + (JSC::DFG::ByteCodeParser::parseBlock): + (JSC::DFG::ByteCodeParser::parse): + * dfg/DFGGraph.cpp: + (JSC::DFG::Graph::dump): + * dfg/DFGGraph.h: + (JSC::DFG::MethodCheckData::operator==): + (JSC::DFG::MethodCheckData::operator!=): + * dfg/DFGNode.h: + (JSC::DFG::Node::hasVirtualRegister): + (JSC::DFG::Node::setRefCount): + * dfg/DFGPropagator.cpp: + (JSC::DFG::Propagator::Propagator): + (JSC::DFG::Propagator::fixpoint): + (JSC::DFG::Propagator::propagateNode): + (JSC::DFG::Propagator::canonicalize): + (JSC::DFG::Propagator::computeStartIndex): + (JSC::DFG::Propagator::startIndex): + (JSC::DFG::Propagator::pureCSE): + (JSC::DFG::Propagator::globalVarLoadElimination): + (JSC::DFG::Propagator::getByValLoadElimination): + (JSC::DFG::Propagator::getMethodLoadElimination): + (JSC::DFG::Propagator::performSubstitution): + (JSC::DFG::Propagator::setReplacement): + (JSC::DFG::Propagator::performNodeCSE): + (JSC::DFG::Propagator::performBlockCSE): + (JSC::DFG::Propagator::localCSE): + (JSC::DFG::Propagator::allocateVirtualRegisters): + (JSC::DFG::propagate): + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::compile): + +2011-09-16 Filip Pizlo <fpizlo@apple.com> + + method_check should repatch itself if it finds that the new structure(s) + are the result of transitions from the old structure(s) + https://bugs.webkit.org/show_bug.cgi?id=68294 + + Reviewed by Gavin Barraclough. + + Previously a patched method_check would slow-path to get_by_id. Now it + slow-paths to method_check_update, which attempts to correct the + method_check due to structure transitions before bailing to get_by_id. + + This is a 1-2% speed-up on some benchmarks and is not a slow-down + anywhere, leading to a 0.6% speed-up on the Kraken geomean. + + * jit/JITPropertyAccess.cpp: + (JSC::JIT::patchMethodCallProto): + * jit/JITStubs.cpp: + (JSC::DEFINE_STUB_FUNCTION): + * jit/JITStubs.h: + * runtime/Structure.h: + (JSC::Structure::transitivelyTransitionedFrom): + +2011-09-16 Ryosuke Niwa <rniwa@webkit.org> + + Touch Platform.h in the hope to fix SnowLeopard Intel Release (WebKit2 Tests). + + * wtf/Platform.h: + +2011-09-16 Sam Weinig <sam@webkit.org> + + Rename APIValueWrapper type to APIValueWrapperType for consistency + https://bugs.webkit.org/show_bug.cgi?id=68306 + + Reviewed by Anders Carlsson. + + * runtime/JSAPIValueWrapper.h: + (JSC::JSAPIValueWrapper::createStructure): + Update name. + + * runtime/JSType.h: + Update name and un-indent. + + * runtime/Structure.h: + (JSC::JSCell::isAPIValueWrapper): + Update name. + +2011-09-16 Sam Weinig <sam@webkit.org> + + Remove unused isStrictModeFunction function + https://bugs.webkit.org/show_bug.cgi?id=68305 + + Reviewed by Anders Carlsson. + + * runtime/JSObject.h: + (JSC::JSObject::isStrictModeFunction): + +2011-09-16 Sam Weinig <sam@webkit.org> + + Cleanup JSTypeInfo a bit + https://bugs.webkit.org/show_bug.cgi?id=68289 + + Reviewed by Anders Carlsson. + + * dfg/DFGOperations.cpp: + * jit/JITStubs.cpp: + (JSC::DEFINE_STUB_FUNCTION): + Replace direct access to flags() with predicate. + + * runtime/JSObject.h: + (JSC::JSFinalObject::createStructure): + Pass FinalObjectType instead of using special IsJSFinalObject. + + * runtime/JSTypeInfo.h: + (JSC::TypeInfo::TypeInfo): + Add additional assert that you should no object should OverridesHasInstance but not have ImplementsHasInstance set. + + (JSC::TypeInfo::isFinalObject): + Added. + + (JSC::TypeInfo::masqueradesAsUndefined): + (JSC::TypeInfo::implementsHasInstance): + (JSC::TypeInfo::isEnvironmentRecord): + (JSC::TypeInfo::overridesHasInstance): + (JSC::TypeInfo::implementsDefaultHasInstance): + (JSC::TypeInfo::overridesGetOwnPropertySlot): + (JSC::TypeInfo::overridesVisitChildren): + (JSC::TypeInfo::overridesGetPropertyNames): + (JSC::TypeInfo::prohibitsPropertyCaching): + (JSC::TypeInfo::isSetOnFlags1): + (JSC::TypeInfo::isSetOnFlags2): + Replace direct bit twiddling with helper functions. + + * runtime/Structure.cpp: + (JSC::Structure::Structure): + Use new isFinalObject() predicate. + +2011-09-16 Gavin Barraclough <barraclough@apple.com> + + Unsigned bit shift fails under certain conditions in 32 bit builds + https://bugs.webkit.org/show_bug.cgi?id=68166 + + Reviewed by Geoff Garen. + + The major bug here is that the slow case (which handles shifts of + doubles) doesn't check for negative results from an unsigned shift + (which should be unsigned, and as such can't be represented by a + signed integer immediate). The implementation is also flawed for + shifts by negative shift amounts (treats as shift by zero). + + * jit/JITArithmetic32_64.cpp: + (JSC::JIT::emitRightShift): + (JSC::JIT::emitRightShiftSlowCase): + +2011-09-16 Geoffrey Garen <ggaren@apple.com> + + Removed undetectable style.filter. + + Reviewed by Sam Weinig. + + This feature was added in http://trac.webkit.org/changeset/15557 to + support housingmaps.com. But housingmaps.com no longer needs this hack, + we don't know of other websites that need it, and we don't know of + any other browsers that have implemented this feature. + + * GNUmakefile.list.am: + * JavaScriptCore.gypi: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * runtime/JSTypeInfo.h: + * runtime/StringObjectThatMasqueradesAsUndefined.h: Removed. + +2011-09-15 Sam Weinig <sam@webkit.org> + + Prepare JSTypes for more Object subtypes + https://bugs.webkit.org/show_bug.cgi?id=68200 + + Reviewed by Gavin Barraclough. + + * dfg/DFGJITCompiler.h: + (JSC::DFG::JITCompiler::branchIfNotObject): + * jit/JITInlineMethods.h: + (JSC::JIT::emitJumpIfNotObject): + * runtime/JSGlobalObject.h: + (JSC::Structure::prototypeForLookup): + * runtime/JSObject.h: + (JSC::JSObject::finishCreation): + * runtime/JSType.h: + * runtime/JSTypeInfo.h: + (JSC::TypeInfo::type): + (JSC::TypeInfo::isObject): + (JSC::TypeInfo::isFinal): + (JSC::TypeInfo::prohibitsPropertyCaching): + * runtime/NativeErrorConstructor.h: + (JSC::NativeErrorConstructor::finishCreation): + * runtime/Operations.cpp: + (JSC::jsIsObjectType): + * runtime/Structure.cpp: + (JSC::Structure::addPropertyTransitionToExistingStructure): + (JSC::Structure::addPropertyTransition): + * runtime/Structure.h: + (JSC::Structure::isObject): + (JSC::JSCell::isObject): + +2011-09-16 Geoffrey Garen <ggaren@apple.com> + + Rolled back in r95201 with test failure fixed. + + I missed two cases of jumpSlowToHot in rshift -- these cases need to be + sure to initialize regT1 to the int tag, since it will otherwise hold + the top 32 bits of a double. + + * jit/JIT.h: + * jit/JITArithmetic32_64.cpp: + (JSC::JIT::emit_op_lshift): + (JSC::JIT::emitRightShift): + (JSC::JIT::emitRightShiftSlowCase): + (JSC::JIT::emit_op_bitand): + (JSC::JIT::emit_op_bitor): + (JSC::JIT::emit_op_bitxor): + (JSC::JIT::emit_op_bitnot): + (JSC::JIT::emit_op_post_inc): + (JSC::JIT::emit_op_post_dec): + (JSC::JIT::emit_op_pre_inc): + (JSC::JIT::emit_op_pre_dec): + * jit/JITInlineMethods.h: + (JSC::JIT::emitStoreAndMapInt32): + +2011-09-16 Filip Pizlo <fpizlo@apple.com> + + Unreviewed Windows build fix after 95318. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + +2011-09-16 Adam Roben <aroben@apple.com> + + Windows build fix after r95310 + + * JavaScriptCore.vcproj/jsc/jscCommon.vsprops: Added include\private\JavaScriptCore to the + include path so DFGIntrinsic.h can be found. + +2011-09-16 Gavin Barraclough <barraclough@apple.com> + + Rationalize JSObject::putDirect* methods + https://bugs.webkit.org/show_bug.cgi?id=68274 + + Reviewed by Sam Weinig. + + Delete the *Function variants. These are overall inefficient, + in the way they get the name back from the function rather + than just passing it in. + + * JavaScriptCore.exp: + * jsc.cpp: + (GlobalObject::finishCreation): + (GlobalObject::addFunction): + * runtime/FunctionPrototype.cpp: + (JSC::FunctionPrototype::addFunctionProperties): + * runtime/JSGlobalObject.cpp: + (JSC::JSGlobalObject::reset): + * runtime/JSObject.cpp: + (JSC::JSObject::put): + (JSC::JSObject::putWithAttributes): + (JSC::JSObject::defineGetter): + (JSC::JSObject::defineSetter): + * runtime/JSObject.h: + (JSC::JSObject::putDirect): + (JSC::JSObject::putDirectWithoutTransition): + * runtime/Lookup.cpp: + (JSC::setUpStaticFunctionSlot): + * runtime/Lookup.h: + (JSC::lookupPut): + +2011-09-16 Filip Pizlo <fpizlo@apple.com> + + Unreviewed build fix for Windows. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + +2011-09-16 Filip Pizlo <fpizlo@apple.com> + + Unreviewed build fix for non-DFG builds. + + * runtime/Executable.h: + (JSC::NativeExecutable::finishCreation): + +2011-09-16 Filip Pizlo <fpizlo@apple.com> + + DFG JIT should inline Math.abs + https://bugs.webkit.org/show_bug.cgi?id=68227 + + Reviewed by Oliver Hunt. + + This adds the ability to track intrinsic functions throughout the + host function infrastructure, so that the DFG can easily query + whether or not a call's target is intrinsic, and if so, which + intrinsic it is. + + On top of this, it adds Math.abs intrinsics to DFG. Call(Math.abs) + is transformed into ValueToNumber<-ArithAbs nodes. These nodes + then get optimized using the usual tricks. + + Also had to make a completely unrelated change to + DateInstanceCache.h in order to fix a preexisting alphabetical + sorting problem in JSGlobalData.h + + This results in a big win in imaging-gaussian-blur: 61% faster + than before. The net win on Kraken is around 13%. + + * JavaScriptCore.xcodeproj/project.pbxproj: + * create_hash_table: + * dfg/DFGByteCodeParser.cpp: + (JSC::DFG::ByteCodeParser::parseBlock): + * dfg/DFGGraph.h: + (JSC::DFG::Graph::isFunctionConstant): + (JSC::DFG::Graph::valueOfFunctionConstant): + * dfg/DFGIntrinsic.h: Added. + * dfg/DFGJITCodeGenerator.h: + (JSC::DFG::JITCodeGenerator::isFunctionConstant): + (JSC::DFG::JITCodeGenerator::valueOfFunctionConstant): + * dfg/DFGJITCompiler.h: + (JSC::DFG::JITCompiler::isFunctionConstant): + (JSC::DFG::JITCompiler::valueOfFunctionConstant): + * dfg/DFGNode.h: + * dfg/DFGPropagator.cpp: + (JSC::DFG::Propagator::propagateNode): + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::compile): + * jit/JITStubs.cpp: + (JSC::JITThunks::hostFunctionStub): + * jit/JITStubs.h: + * runtime/DateInstanceCache.h: + * runtime/Executable.cpp: + (JSC::ExecutableBase::intrinsic): + (JSC::NativeExecutable::intrinsic): + * runtime/Executable.h: + (JSC::NativeExecutable::create): + (JSC::NativeExecutable::finishCreation): + * runtime/JSGlobalData.cpp: + (JSC::JSGlobalData::getHostFunction): + * runtime/JSGlobalData.h: + * runtime/Lookup.cpp: + (JSC::HashTable::createTable): + (JSC::setUpStaticFunctionSlot): + * runtime/Lookup.h: + (JSC::HashEntry::initialize): + (JSC::HashEntry::intrinsic): + +2011-09-16 Filip Pizlo <fpizlo@apple.com> + + REGRESSION: Reproducible crash below SlotVisitor::harvestWeakReferences + using Domino's online ordering + https://bugs.webkit.org/show_bug.cgi?id=68220 + + Reviewed by Oliver Hunt. + + Weak handle processing can result in new objects being marked, which + results in new WeakReferencesHarvesters being added. But weak + reference harvesters are only processed before weak handle processing, + so there's the risk that a weak reference harvester will persist + until the next collection, by which time it may have been deleted. + + * heap/Heap.cpp: + (JSC::Heap::markRoots): + +2011-09-16 Csaba Osztrogonác <ossy@webkit.org> + + REGRESSION(r95201): It made two tests fail + https://bugs.webkit.org/show_bug.cgi?id=68230 + + Unreviewed rolling out r95201. + + * jit/JIT.h: + * jit/JITArithmetic32_64.cpp: + (JSC::JIT::emit_op_lshift): + (JSC::JIT::emitRightShift): + (JSC::JIT::emit_op_bitand): + (JSC::JIT::emit_op_bitor): + (JSC::JIT::emit_op_bitxor): + (JSC::JIT::emit_op_bitnot): + (JSC::JIT::emit_op_post_inc): + (JSC::JIT::emit_op_post_dec): + (JSC::JIT::emit_op_pre_inc): + (JSC::JIT::emit_op_pre_dec): + * jit/JITInlineMethods.h: + +2011-09-15 Filip Pizlo <fpizlo@apple.com> + + DFG JIT does not optimize method_check + https://bugs.webkit.org/show_bug.cgi?id=68215 + + Reviewed by Oliver Hunt. + + MethodCallLinkInfo and StructureStubInfo are now searchable by + bytecodeIndex, so that DFG::ByteCodeParser can use that information + to determine how to optimize GetMethod. + + A new node op has been added to DFG: CheckMethod. This is a variant + of GetMethod that has been optimized for the case that GetMethod + always takes the fast path. CheckMethod results in only a very + small amount of code (two loads and two branches in the worst case, + one load and one branch in the best case). CheckMethod behaves as + if it were a constant. + + Introduced the notion that a DFG node that is not JSConstant + behaves as a constant. CheckMethod uses this functionality. + + This is a 3% speed-up on Kraken, and a small speed-up on V8. + Appears to be neutral on SunSpider. + + * bytecode/CodeBlock.h: + (JSC::getStructureStubInfoBytecodeIndex): + (JSC::getMethodCallLinkInfoBytecodeIndex): + * bytecode/PredictedType.cpp: + (JSC::predictionFromCell): + (JSC::predictionFromValue): + * bytecode/PredictedType.h: + * bytecode/StructureStubInfo.h: + * dfg/DFGAliasTracker.h: + (JSC::DFG::AliasTracker::recordGetMethod): + * dfg/DFGByteCodeParser.cpp: + (JSC::DFG::ByteCodeParser::parseBlock): + * dfg/DFGGraph.cpp: + (JSC::DFG::Graph::dump): + * dfg/DFGGraph.h: + (JSC::DFG::Graph::getMethodCheckPrediction): + (JSC::DFG::Graph::getPrediction): + (JSC::DFG::Graph::isConstant): + (JSC::DFG::Graph::isJSConstant): + (JSC::DFG::Graph::valueOfJSConstant): + (JSC::DFG::Graph::valueOfInt32Constant): + (JSC::DFG::Graph::valueOfNumberConstant): + (JSC::DFG::Graph::valueOfBooleanConstant): + (JSC::DFG::Graph::valueOfJSConstantNode): + * dfg/DFGJITCodeGenerator.cpp: + (JSC::DFG::JITCodeGenerator::fillInteger): + (JSC::DFG::JITCodeGenerator::fillDouble): + (JSC::DFG::JITCodeGenerator::fillJSValue): + (JSC::DFG::JITCodeGenerator::isKnownNotInteger): + (JSC::DFG::JITCodeGenerator::isKnownNotNumber): + * dfg/DFGJITCodeGenerator.h: + (JSC::DFG::JITCodeGenerator::silentSpillFPR): + (JSC::DFG::JITCodeGenerator::silentFillGPR): + (JSC::DFG::JITCodeGenerator::silentFillFPR): + * dfg/DFGJITCompiler.cpp: + (JSC::DFG::JITCompiler::fillNumericToDouble): + (JSC::DFG::JITCompiler::fillInt32ToInteger): + (JSC::DFG::JITCompiler::fillToJS): + * dfg/DFGNode.h: + (JSC::DFG::Node::hasConstant): + (JSC::DFG::Node::hasIdentifier): + (JSC::DFG::Node::hasMethodCheckData): + (JSC::DFG::Node::methodCheckDataIndex): + (JSC::DFG::Node::valueOfJSConstant): + * dfg/DFGPropagator.cpp: + (JSC::DFG::Propagator::propagateNode): + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::fillSpeculateIntInternal): + (JSC::DFG::SpeculativeJIT::fillSpeculateDouble): + (JSC::DFG::SpeculativeJIT::fillSpeculateCell): + (JSC::DFG::SpeculativeJIT::fillSpeculateBoolean): + (JSC::DFG::SpeculativeJIT::compile): + * jit/JIT.cpp: + (JSC::JIT::privateCompile): + * jit/JIT.h: + (JSC::PropertyStubCompilationInfo::PropertyStubCompilationInfo): + (JSC::MethodCallCompilationInfo::MethodCallCompilationInfo): + * jit/JITPropertyAccess.cpp: + (JSC::JIT::emit_op_method_check): + (JSC::JIT::compileGetByIdHotPath): + (JSC::JIT::emit_op_put_by_id): + * jit/JITPropertyAccess32_64.cpp: + (JSC::JIT::emit_op_method_check): + (JSC::JIT::compileGetByIdHotPath): + (JSC::JIT::emit_op_put_by_id): + * runtime/JSCell.h: + (JSC::JSCell::JSCell::structureAddress): + +2011-09-15 Adam Barth <abarth@webkit.org> + + Rename ENABLE(DATABASE) to ENABLE(SQL_DATABASE) + https://bugs.webkit.org/show_bug.cgi?id=68205 + + Reviewed by Eric Seidel. + + * Configurations/FeatureDefines.xcconfig: + * wtf/Platform.h: + +2011-09-15 Mark Hahnenberg <mhahnenberg@apple.com> + + Unzip initialization lists and constructors in JSCell hierarchy (7/7) + https://bugs.webkit.org/show_bug.cgi?id=68122 + + Reviewed by Geoffrey Garen. + + Completed the seventh and final level of the refactoring to add finishCreation() + methods to all classes within the JSCell hierarchy with non-trivial + constructor bodies. + + JSCallbackObject was missed in previous patches due to the fact that + it's non-obvious (at least to my script) that it is in the JSCell hierarchy, so + this is just a bit of retroactive cleanup. + + * API/JSCallbackObject.h: + (JSC::JSCallbackObject::create): + * API/JSCallbackObjectFunctions.h: + (JSC::::JSCallbackObject): + +2011-09-15 Filip Pizlo <fpizlo@apple.com> + + The DFG non-speculative JIT is no longer used and should be removed. + https://bugs.webkit.org/show_bug.cgi?id=68177 + + Reviewed by Geoffrey Garen. + + This removes the non-speculative JIT and everything that relied on it, + including the ability to turn on DFG but not tiered compilation the, + ability to perform speculation failure into non-speculative JIT code, + and the ability to statically terminate speculation. + + * GNUmakefile.list.am: + * JavaScriptCore.pro: + * JavaScriptCore.xcodeproj/project.pbxproj: + * bytecode/CodeBlock.h: + * bytecompiler/BytecodeGenerator.cpp: + (JSC::BytecodeGenerator::emitLoopHint): + * dfg/DFGByteCodeParser.cpp: + (JSC::DFG::ByteCodeParser::ByteCodeParser): + (JSC::DFG::ByteCodeParser::getStrongPrediction): + (JSC::DFG::ByteCodeParser::parseBlock): + * dfg/DFGDriver.cpp: + (JSC::DFG::compile): + * dfg/DFGGenerationInfo.h: + * dfg/DFGGraph.cpp: + (JSC::DFG::Graph::predictArgumentTypes): + * dfg/DFGJITCodeGenerator.cpp: + * dfg/DFGJITCompiler.cpp: + (JSC::DFG::JITCompiler::linkOSRExits): + (JSC::DFG::JITCompiler::compileBody): + * dfg/DFGJITCompiler.h: + * dfg/DFGNode.h: + * dfg/DFGNonSpeculativeJIT.cpp: Removed. + * dfg/DFGNonSpeculativeJIT.h: Removed. + * dfg/DFGOSREntry.cpp: + (JSC::DFG::prepareOSREntry): + * dfg/DFGPropagator.cpp: + * dfg/DFGPropagator.h: + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::compile): + * dfg/DFGSpeculativeJIT.h: + (JSC::DFG::SpeculativeJIT::osrExits): + (JSC::DFG::SpeculativeJIT::speculationRecovery): + (JSC::DFG::SpeculativeJIT::speculationCheck): + (JSC::DFG::SpeculativeJIT::terminateSpeculativeExecution): + * jit/JIT.cpp: + (JSC::JIT::privateCompileMainPass): + (JSC::JIT::privateCompile): + * jit/JIT.h: + * jit/JITCode.h: + (JSC::JITCode::bottomTierJIT): + * runtime/JSGlobalData.cpp: + (JSC::JSGlobalData::JSGlobalData): + (JSC::JSGlobalData::~JSGlobalData): + * runtime/JSGlobalData.h: + * wtf/Platform.h: + +2011-09-15 Eric Seidel <eric@webkit.org> + + Remove ENABLE(SVG_AS_IMAGE) since all major ports have it on by default + https://bugs.webkit.org/show_bug.cgi?id=68182 + + Reviewed by Adam Barth. + + * Configurations/FeatureDefines.xcconfig: + +2011-09-15 Filip Pizlo <fpizlo@apple.com> + + DFG speculative JIT sometimes asserts that a value is not a number + even when it doesn't know anything about the number + https://bugs.webkit.org/show_bug.cgi?id=68189 + + Reviewed by Oliver Hunt. + + * dfg/DFGGenerationInfo.h: + (JSC::DFG::GenerationInfo::isUnknownJS): + * dfg/DFGJITCodeGenerator.cpp: + (JSC::DFG::JITCodeGenerator::isKnownNotNumber): + +2011-09-15 Filip Pizlo <fpizlo@apple.com> + + All of the functionality in the non-speculative JIT should be + available to the speculative JIT via helper methods + https://bugs.webkit.org/show_bug.cgi?id=68186 + + Reviewed by Oliver Hunt. + + Stole all of the goodness from NonSpeculativeJIT and placed it + in JITCodeGenerator. Left all of the badness (i.e. subtle code + duplication with SpeculativeJIT, etc). This is in preparation + for removing the NonSpeculativeJIT entirely, but having its + goodness available for reuse in the SpeculativeJIT if necessary. + + * dfg/DFGJITCodeGenerator.cpp: + (JSC::DFG::JITCodeGenerator::nonSpeculativeValueToNumber): + (JSC::DFG::JITCodeGenerator::nonSpeculativeValueToInt32): + (JSC::DFG::JITCodeGenerator::nonSpeculativeUInt32ToNumber): + (JSC::DFG::JITCodeGenerator::nonSpeculativeKnownConstantArithOp): + (JSC::DFG::JITCodeGenerator::nonSpeculativeBasicArithOp): + (JSC::DFG::JITCodeGenerator::nonSpeculativeArithMod): + (JSC::DFG::JITCodeGenerator::nonSpeculativeCheckHasInstance): + (JSC::DFG::JITCodeGenerator::nonSpeculativeInstanceOf): + * dfg/DFGJITCodeGenerator.h: + (JSC::DFG::JITCodeGenerator::nonSpeculativeAdd): + (JSC::DFG::JITCodeGenerator::nonSpeculativeArithSub): + * dfg/DFGNonSpeculativeJIT.cpp: + (JSC::DFG::NonSpeculativeJIT::compile): + * dfg/DFGNonSpeculativeJIT.h: + +2011-09-15 Sheriff Bot <webkit.review.bot@gmail.com> + + Unreviewed, rolling out r95167. + http://trac.webkit.org/changeset/95167 + https://bugs.webkit.org/show_bug.cgi?id=68191 + + Patch needs further work. (Requested by mhahnenberg on + #webkit). + + * JavaScriptCore.exp: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * runtime/JSCell.cpp: + (JSC::JSCell::toBoolean): + * runtime/JSCell.h: + (JSC::JSCell::JSValue::toBoolean): + * runtime/JSNotAnObject.cpp: + (JSC::JSNotAnObject::toBoolean): + * runtime/JSNotAnObject.h: + * runtime/JSObject.h: + * runtime/JSString.h: + * runtime/StringObjectThatMasqueradesAsUndefined.h: + (JSC::StringObjectThatMasqueradesAsUndefined::toBoolean): + +2011-09-15 Filip Pizlo <fpizlo@apple.com> + + Unreviewed build fix for platforms that expect a linkable symbol + for primitive static const's. + + * bytecode/CodeBlock.h: + * jit/JIT.cpp: + (JSC::JIT::emitOptimizationCheck): + +2011-09-15 Filip Pizlo <fpizlo@apple.com> + + Unreviewed build fix for assertion on existence of alternative + CodeBlock. + + * dfg/DFGGraph.cpp: + (JSC::DFG::Graph::predictArgumentTypes): + +2011-09-14 Filip Pizlo <fpizlo@apple.com> + + Value profiles collect no information for global variables + https://bugs.webkit.org/show_bug.cgi?id=68143 + + Reviewed by Geoffrey Garen. + + 17% speed-up on string-fasta. Neutral elsewhere. + + * dfg/DFGByteCodeParser.cpp: + (JSC::DFG::ByteCodeParser::getStrongPrediction): + (JSC::DFG::ByteCodeParser::stronglyPredict): + (JSC::DFG::ByteCodeParser::parseBlock): + * jit/JITPropertyAccess.cpp: + (JSC::JIT::emit_op_get_global_var): + +2011-09-15 Eric Seidel <eric@webkit.org> + + Remove ENABLE_SVG_ANIMATION as all major ports have it on by default + https://bugs.webkit.org/show_bug.cgi?id=68022 + + Reviewed by Ryosuke Niwa. + + * Configurations/FeatureDefines.xcconfig: + +2011-09-15 Gavin Barraclough <barraclough@apple.com> + + Ooops, revert accidentally commited unreviewed changes. + + * jit/JITOpcodes32_64.cpp: + (JSC::JIT::emit_op_jfalse): + (JSC::JIT::emit_op_jtrue): + * jit/JSInterfaceJIT.h: + * runtime/JSValue.h: + +2011-09-15 Sheriff Bot <webkit.review.bot@gmail.com> + + Unreviewed, rolling out r95163. + http://trac.webkit.org/changeset/95163 + https://bugs.webkit.org/show_bug.cgi?id=68180 + + [Qt] The QT_GCC_X variables were removed in Qt5 by accident. + (Requested by darktears on #webkit). + + * JavaScriptCore.pro: + +2011-09-15 Gavin Barraclough <barraclough@apple.com> + + Windows build fix p1. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * jit/JITOpcodes32_64.cpp: + (JSC::JIT::emit_op_jfalse): + (JSC::JIT::emit_op_jtrue): + * jit/JSInterfaceJIT.h: + * runtime/JSValue.h: + +2011-09-14 Filip Pizlo <fpizlo@apple.com> + + Tiered compilation should be enabled by default on platforms + that support the DFG JIT + https://bugs.webkit.org/show_bug.cgi?id=68136 + + Reviewed by Sam Weinig. + + Neutral on SunSpider, 4% speed-up on V8, and 19% speed-up on + Kraken. Large progressions on some benchmarks, including + 3x on imaging-desaturate. + + * wtf/Platform.h: + +2011-09-15 Gavin Barraclough <barraclough@apple.com> + + devirtualize preventExtensions + https://bugs.webkit.org/show_bug.cgi?id=68176 + + Reviewed by Oliver Hunt. + + This is virtual due to problems in JSFunction putting the prototype + property, but we can fix this problem a different way, just setting + the checkReadOnly flag to false in the put. + + * runtime/JSFunction.cpp: + (JSC::JSFunction::getOwnPropertySlot): + * runtime/JSFunction.h: + * runtime/JSObject.h: + +2011-09-15 Geoffrey Garen <ggaren@apple.com> + + Value chaining for JSValue32_64 bitops. + + Reviewed by Sam Weinig. + + SunSpider says 2.3% faster, v8 ~1% faster (mostly due to crypto). + + * jit/JIT.h: + * jit/JITInlineMethods.h: + (JSC::JIT::emitStoreAndMapInt32): New int32 helper function for stores + that can chain their results, which is the common case. + + * jit/JITArithmetic32_64.cpp: + (JSC::JIT::emit_op_lshift): + (JSC::JIT::emitRightShift): + (JSC::JIT::emit_op_bitand): + (JSC::JIT::emit_op_bitor): + (JSC::JIT::emit_op_bitxor): + (JSC::JIT::emit_op_bitnot): + (JSC::JIT::emit_op_pre_inc): + (JSC::JIT::emit_op_pre_dec): Deployed new function. + (JSC::JIT::emit_op_post_inc): + (JSC::JIT::emit_op_post_dec): Had to reorder these functions so they + computed their result values last, to make them elligible for chaining. + +2011-09-15 Adam Roben <aroben@apple.com> + + Clang build fix after r95172 + + * dfg/DFGSpeculativeJIT.h: + (JSC::DFG::SpeculativeJIT::shouldSpeculateFinalObject): + (JSC::DFG::SpeculativeJIT::shouldSpeculateArray): + Added parentheses to make precendence clear. + +2011-09-14 Filip Pizlo <fpizlo@apple.com> + + DFG does not speculate aggressively enough on comparisons + https://bugs.webkit.org/show_bug.cgi?id=68138 + + Reviewed by Oliver Hunt. + + This is a 75% speed-up on Kraken/ai-astar. It's a 1% win on + V8 and an 8.5% win on Kraken. Neutral on SunSpider. + + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::compilePeepHoleDoubleBranch): + (JSC::DFG::SpeculativeJIT::compilePeepHoleObjectEquality): + (JSC::DFG::SpeculativeJIT::compileObjectEquality): + (JSC::DFG::SpeculativeJIT::compare): + * dfg/DFGSpeculativeJIT.h: + (JSC::DFG::SpeculativeJIT::shouldSpeculateFinalObject): + (JSC::DFG::SpeculativeJIT::shouldSpeculateArray): + (JSC::DFG::SpeculativeJIT::shouldSpeculateObject): + (JSC::DFG::SpeculativeJIT::shouldSpeculateCell): + +2011-09-14 Filip Pizlo <fpizlo@apple.com> + + DFG JIT does not leverage integer speculations on branches + https://bugs.webkit.org/show_bug.cgi?id=68140 + + Reviewed by Oliver Hunt. + + * dfg/DFGJITCodeGenerator.cpp: + (JSC::DFG::JITCodeGenerator::isStrictInt32): + * dfg/DFGJITCodeGenerator.h: + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::compile): + +2011-09-14 Gavin Barraclough <barraclough@apple.com> + + [n]stricteq code is bogus in JSValue32_64 JIT + https://bugs.webkit.org/show_bug.cgi?id=68141 + + Reviewed by Sam Weinig. + + The code tries to check for both ints or cells, but this check also + catches cases where values that are undefined, null, etc (probably + was incorrectly assuming cell was the 2nd highest tag?). + + Also, there is no need not to handle int on the fast path. + stricteq is just a case of comparing the payloads, if we: + * handle cases of differing tags on a slow path + * handle doubles a slow path + * handle both-are-string on a slow path + + * jit/JITOpcodes32_64.cpp: + (JSC::JIT::compileOpStrictEq): + (JSC::JIT::emitSlow_op_stricteq): + (JSC::JIT::emitSlow_op_nstricteq): + +2011-09-14 Mark Hahnenberg <mhahnenberg@apple.com> + + Make JSCell::toBoolean non-virtual + https://bugs.webkit.org/show_bug.cgi?id=67727 + + Reviewed by Sam Weinig. + + JSCell::toBoolean now manually performs the toBoolean check for objects and strings (where + before it was simply virtual and would crash if its implementation was called). + Its descendants in JSObject and JSString have also been made non-virtual. JSCell now + explicitly covers all cases of toBoolean, so having a virtual implementation of + JSCell::toBoolean is no longer necessary. This is part of a larger process of un-virtualizing JSCell. + + * JavaScriptCore.exp: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * runtime/JSCell.cpp: + * runtime/JSCell.h: + * runtime/JSNotAnObject.cpp: + * runtime/JSNotAnObject.h: + * runtime/JSObject.h: + * runtime/JSString.h: + (JSC::JSCell::toBoolean): + (JSC::JSValue::toBoolean): + * runtime/StringObjectThatMasqueradesAsUndefined.h: + +2011-09-14 Alexis Menard <alexis.menard@openbossa.org> + + [Qt] Replace QT_GCC_X as they don't exist in Qt5 anymore. + https://bugs.webkit.org/show_bug.cgi?id=68114 + + Reviewed by Kenneth Rohde Christiansen. + + Use the new GCC_X variables defined in WebKit.pri to replace + the usage of QT_GCC_X. + + * JavaScriptCore.pro: + +2011-09-14 Sheriff Bot <webkit.review.bot@gmail.com> + + Unreviewed, rolling out r95145. + http://trac.webkit.org/changeset/95145 + https://bugs.webkit.org/show_bug.cgi?id=68139 + + The GTK+ build is working now, so revert this trial build fix. + (Requested by mrobinson on #webkit). + + * GNUmakefile.list.am: + +2011-09-14 Patrick Gansterer <paroga@webkit.org> + + Port MachineStackMarker to Windows ARM and MIPS + https://bugs.webkit.org/show_bug.cgi?id=68068 + + Reviewed by Geoffrey Garen. + + Use the correct memeber of the CONTEXT struct for the stackpointer for CPU(ARM) and CPU(MIPS). + Only query CONTEXT_INTEGER and CONTEXT_CONTROL, since CONTEXT_SEGMENTS isn't defined for + CPU(ARM) and CPU(MIPS) and the stackpointer is defined in the CONTEXT_CONTROL section for + CPU(ARM), CPU(X86) and CPU(X86_64) and in the CONTEXT_INTEGER section for CPU(MIPS). + + * heap/MachineStackMarker.cpp: + (JSC::getPlatformThreadRegisters): + (JSC::otherThreadStackPointer): + +2011-09-12 Filip Pizlo <fpizlo@apple.com> + + DFG JIT always speculates that ValueAdd is a numeric addition + https://bugs.webkit.org/show_bug.cgi?id=67956 + + Reviewed by Geoffrey Garen. + + * dfg/DFGJITCodeGenerator.cpp: + (JSC::DFG::JITCodeGenerator::isKnownNotNumber): + * dfg/DFGJITCodeGenerator.h: + * dfg/DFGNonSpeculativeJIT.cpp: + (JSC::DFG::NonSpeculativeJIT::knownConstantArithOp): + (JSC::DFG::NonSpeculativeJIT::basicArithOp): + * dfg/DFGOperations.cpp: + * dfg/DFGOperations.h: + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::compile): + * dfg/DFGSpeculativeJIT.h: + (JSC::DFG::SpeculativeJIT::shouldSpeculateNumber): + +2011-09-14 Anders Carlsson <andersca@apple.com> + + Stop building BinarySemaphore to see if that's what's breaking the GTK+ build. + + * GNUmakefile.list.am: + +2011-09-14 Anders Carlsson <andersca@apple.com> + + This is getting old. Yet another build fix attempt. + + * JavaScriptCore.vcproj/WTF/WTFCommon.vsprops: + +2011-09-14 Anders Carlsson <andersca@apple.com> + + Yet another build fix attempt. + + * JavaScriptCore.vcproj/JavaScriptCore/copy-files.cmd: + +2011-09-14 Anders Carlsson <andersca@apple.com> + + How I "love" Visual Studio... + + Try to fix build again. + + * JavaScriptCore.vcproj/WTF/WTFCommon.vsprops: + +2011-09-14 Anders Carlsson <andersca@apple.com> + + Try to fix Windows build. + + * JavaScriptCore.vcproj/WTF/WTFCommon.vsprops: + +2011-09-14 Anders Carlsson <andersca@apple.com> + + Add BinarySemaphore class from WebKit2 to WTF + https://bugs.webkit.org/show_bug.cgi?id=68132 + + Reviewed by Sam Weinig. + + * GNUmakefile.list.am: + * JavaScriptCore.gypi: + * JavaScriptCore.vcproj/WTF/WTF.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * wtf/CMakeLists.txt: + Update build systems. + + * wtf/threads: Added. + * wtf/threads/BinarySemaphore.cpp: Copied from Source/WebKit2/Platform/CoreIPC/BinarySemaphore.cpp. + * wtf/threads/BinarySemaphore.h: Copied from Source/WebKit2/Platform/CoreIPC/BinarySemaphore.h. + * wtf/threads/win: Added. + * wtf/threads/win/BinarySemaphoreWin.cpp: Copied from Source/WebKit2/Platform/CoreIPC/win/BinarySemaphoreWin.cpp. + +2011-09-14 Filip Pizlo <fpizlo@apple.com> + + Unreviewed build fix for Interpreter. + + * interpreter/Interpreter.cpp: + (JSC::Interpreter::privateExecute): + +2011-09-14 Anders Carlsson <andersca@apple.com> + + Add wtf/threads and wtf/threads/win, so we can be sure that the EWS + bots can correctly build the patch in https://bugs.webkit.org/show_bug.cgi?id=68132 + + Rubber-stamped by Sam Weinig. + + * wtf/threads: Added. + * wtf/threads/win: Added. + +2011-09-14 Filip Pizlo <fpizlo@apple.com> + + DFG JIT should not speculate integer if the value is always going to be + used as a double anyway + https://bugs.webkit.org/show_bug.cgi?id=68127 + + Reviewed by Oliver Hunt. + + Added a ValueToDouble node, which is a variant of ValueToNumber that + hints that it will only be used as a double and never as an integer. + Thus, it turns off integer speculation even if the value profiler + told us that the value source is an int. The logic for converting a + ValueToNumber into a ValueToDouble is found in Propagator. + + This appears to be a 22% speed-up in imaging-darkroom. + + * dfg/DFGNode.h: + * dfg/DFGNonSpeculativeJIT.cpp: + (JSC::DFG::NonSpeculativeJIT::compile): + * dfg/DFGPropagator.cpp: + (JSC::DFG::Propagator::fixpoint): + (JSC::DFG::Propagator::toDouble): + (JSC::DFG::Propagator::fixupNode): + (JSC::DFG::Propagator::fixup): + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::compile): + (JSC::DFG::SpeculativeJIT::computeValueRecoveryFor): + +2011-09-14 Filip Pizlo <fpizlo@apple.com> + + Tiered compilation heuristics do not account for value profile fullness + https://bugs.webkit.org/show_bug.cgi?id=68116 + + Reviewed by Oliver Hunt. + + Tiered compilation avoids invoking the DFG JIT if it finds that value + profiles contain insufficient information. Instead, it produces a + prediction from the current value profile, and then clears the value + profile. This allows the value profile to heat up from scratch for + some number of additional executions. The new profiles will then be + merged with the previous prediction. Once the amount of information + in predictions is enough according to heuristics in CodeBlock.cpp, + DFG optimization is allowed to proceed. + + * CMakeLists.txt: + * GNUmakefile.list.am: + * JavaScriptCore.pro: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * bytecode/CodeBlock.cpp: + (JSC::CodeBlock::CodeBlock): + (JSC::CodeBlock::~CodeBlock): + (JSC::CodeBlock::visitAggregate): + (JSC::CodeBlock::visitWeakReferences): + (JSC::CodeBlock::shouldOptimizeNow): + (JSC::CodeBlock::dumpValueProfiles): + * bytecode/CodeBlock.h: + * bytecode/PredictedType.cpp: + (JSC::predictionToString): + * bytecode/PredictedType.h: + * bytecode/ValueProfile.cpp: Added. + (JSC::ValueProfile::computeStatistics): + (JSC::ValueProfile::computeUpdatedPrediction): + * bytecode/ValueProfile.h: + (JSC::ValueProfile::ValueProfile): + (JSC::ValueProfile::classInfo): + (JSC::ValueProfile::numberOfSamples): + (JSC::ValueProfile::totalNumberOfSamples): + (JSC::ValueProfile::isLive): + (JSC::ValueProfile::numberOfInt32s): + (JSC::ValueProfile::numberOfDoubles): + (JSC::ValueProfile::numberOfBooleans): + (JSC::ValueProfile::dump): + (JSC::getValueProfileBytecodeOffset): + * dfg/DFGByteCodeParser.cpp: + (JSC::DFG::ByteCodeParser::stronglyPredict): + * dfg/DFGGraph.cpp: + (JSC::DFG::Graph::predictArgumentTypes): + * dfg/DFGJITCompiler.cpp: + (JSC::DFG::JITCompiler::exitSpeculativeWithOSR): + (JSC::DFG::JITCompiler::jumpFromSpeculativeToNonSpeculative): + * jit/JIT.cpp: + (JSC::JIT::emitOptimizationCheck): + * jit/JITInlineMethods.h: + (JSC::JIT::emitValueProfilingSite): + * jit/JITStubs.cpp: + (JSC::DEFINE_STUB_FUNCTION): + +2011-09-14 Filip Pizlo <fpizlo@apple.com> + + DFG should not speculate that the child of LogicalNot is a boolean if + predictions tell us otherwise + https://bugs.webkit.org/show_bug.cgi?id=68118 + + Reviewed by Geoffrey Garen. + + * dfg/DFGJITCodeGenerator.cpp: + (JSC::DFG::JITCodeGenerator::nonSpeculativeLogicalNot): + * dfg/DFGJITCodeGenerator.h: + * dfg/DFGNonSpeculativeJIT.cpp: + (JSC::DFG::NonSpeculativeJIT::compile): + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::compile): + +2011-09-14 Filip Pizlo <fpizlo@apple.com> + + Unreviewed build fix. Turn off tiered compilation. + + * wtf/Platform.h: + +2011-09-13 Filip Pizlo <fpizlo@apple.com> + + Prediction tracking is not precise enough + https://bugs.webkit.org/show_bug.cgi?id=67993 + + Reviewed by Oliver Hunt. + + Added a richer set of type predictions, including JSFinalObject, JSString, + object that is not a JSFinalObject or JSArray (ObjectOther), some object + but we don't or care know what kind (SomeObject), definitely an object, + cell that is not an object or JSString, an value that is none of the above + (so either Undefined or Null). Made the propagator and value profiler work + with the new types. + + Performance is neutral, because the DFG JIT does not take advantage of this + new knowledge yet. + + In the process of writing predictionToString() (which is now considerably + more complex) I decided to finally add a BoundsCheckedPointer, which + should come in handy in other places, like at least the OSR scratch buffer + and the CompactJITCodeMap. It's great for cases where you want to + do pointer arithmetic, you want to have assertions about the + pointer not going out of bounds, but you don't want to write those + assertions yourself. + + This also required refactoring inherits(), since the ValueProfiler may + want to do the equivalent of inherits() but given two ClassInfo's. + + * GNUmakefile.list.am: + * JavaScriptCore.vcproj/WTF/WTF.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * bytecode/PredictedType.cpp: Added. + (JSC::predictionToString): + (JSC::makePrediction): + (JSC::predictionFromValue): + * bytecode/PredictedType.h: + (JSC::isCellPrediction): + (JSC::isObjectPrediction): + (JSC::isFinalObjectPrediction): + (JSC::isStringPrediction): + (JSC::mergePredictions): + * bytecode/ValueProfile.h: + (JSC::ValueProfile::numberOfObjects): + (JSC::ValueProfile::numberOfFinalObjects): + (JSC::ValueProfile::numberOfStrings): + (JSC::ValueProfile::probabilityOfObject): + (JSC::ValueProfile::probabilityOfFinalObject): + (JSC::ValueProfile::probabilityOfString): + (JSC::ValueProfile::dump): + (JSC::ValueProfile::Statistics::Statistics): + (JSC::ValueProfile::computeStatistics): + * dfg/DFGByteCodeParser.cpp: + (JSC::DFG::ByteCodeParser::stronglyPredict): + * dfg/DFGGraph.cpp: + (JSC::DFG::Graph::dump): + (JSC::DFG::Graph::predictArgumentTypes): + * dfg/DFGNode.h: + (JSC::DFG::Node::predict): + * dfg/DFGPropagator.cpp: + (JSC::DFG::Propagator::propagateNode): + * runtime/ClassInfo.h: + (JSC::ClassInfo::isSubClassOf): + * runtime/JSObject.h: + (JSC::JSCell::inherits): + * wtf/BoundsCheckedPointer.h: Added. + (WTF::BoundsCheckedPointer::BoundsCheckedPointer): + (WTF::BoundsCheckedPointer::operator=): + (WTF::BoundsCheckedPointer::operator+=): + (WTF::BoundsCheckedPointer::operator-=): + (WTF::BoundsCheckedPointer::operator+): + (WTF::BoundsCheckedPointer::operator-): + (WTF::BoundsCheckedPointer::operator++): + (WTF::BoundsCheckedPointer::operator--): + (WTF::BoundsCheckedPointer::operator<): + (WTF::BoundsCheckedPointer::operator<=): + (WTF::BoundsCheckedPointer::operator>): + (WTF::BoundsCheckedPointer::operator>=): + (WTF::BoundsCheckedPointer::operator==): + (WTF::BoundsCheckedPointer::operator!=): + (WTF::BoundsCheckedPointer::operator!): + (WTF::BoundsCheckedPointer::get): + (WTF::BoundsCheckedPointer::operator*): + (WTF::BoundsCheckedPointer::operator[]): + (WTF::BoundsCheckedPointer::strcat): + (WTF::BoundsCheckedPointer::validate): + * wtf/CMakeLists.txt: + +2011-09-14 Csaba Osztrogonác <ossy@webkit.org> + + [Qt] Win32 builds with threads turned off + https://bugs.webkit.org/show_bug.cgi?id=67864 + + Reviewed by Geoffrey Garen. + + * JavaScriptCore.pri: Link pthread library on Windows platform. + * wtf/Platform.h: Enable multiple threads. + +2011-09-14 Mark Hahnenberg <mhahnenberg@apple.com> + + Unzip initialization lists and constructors in JSCell hierarchy (6/7) + https://bugs.webkit.org/show_bug.cgi?id=67692 + + Reviewed by Geoffrey Garen. + + Completed the sixth level of the refactoring to add finishCreation() + methods to all classes within the JSCell hierarchy with non-trivial + constructor bodies. + + This primarily consists of pushing the calls to finishCreation() down + into the constructors of the subclasses of the fifth level of the hierarchy + as well as pulling the finishCreation() calls out into the class's corresponding + create() method if it has one. Doing both simultaneously allows us to + maintain the invariant that the finishCreation() method chain is called exactly + once during the creation of an object, since calling it any other number of + times (0, 2, or more) will cause an assertion failure. + + * API/JSCallbackFunction.cpp: + (JSC::JSCallbackFunction::JSCallbackFunction): + * API/JSCallbackFunction.h: + (JSC::JSCallbackFunction::create): + * jsc.cpp: + (GlobalObject::create): + (GlobalObject::GlobalObject): + * runtime/ArrayConstructor.cpp: + (JSC::ArrayConstructor::ArrayConstructor): + * runtime/ArrayConstructor.h: + (JSC::ArrayConstructor::create): + * runtime/BooleanConstructor.cpp: + (JSC::BooleanConstructor::BooleanConstructor): + * runtime/BooleanConstructor.h: + (JSC::BooleanConstructor::create): + * runtime/BooleanPrototype.cpp: + (JSC::BooleanPrototype::BooleanPrototype): + * runtime/BooleanPrototype.h: + (JSC::BooleanPrototype::create): + * runtime/DateConstructor.cpp: + (JSC::DateConstructor::DateConstructor): + * runtime/DateConstructor.h: + (JSC::DateConstructor::create): + * runtime/DatePrototype.cpp: + (JSC::DatePrototype::DatePrototype): + * runtime/DatePrototype.h: + (JSC::DatePrototype::create): + * runtime/Error.cpp: + (JSC::StrictModeTypeErrorFunction::StrictModeTypeErrorFunction): + (JSC::StrictModeTypeErrorFunction::create): + * runtime/ErrorConstructor.cpp: + (JSC::ErrorConstructor::ErrorConstructor): + * runtime/ErrorConstructor.h: + (JSC::ErrorConstructor::create): + * runtime/FunctionConstructor.cpp: + (JSC::FunctionConstructor::FunctionConstructor): + * runtime/FunctionConstructor.h: + (JSC::FunctionConstructor::create): + * runtime/FunctionPrototype.cpp: + (JSC::FunctionPrototype::FunctionPrototype): + * runtime/FunctionPrototype.h: + (JSC::FunctionPrototype::create): + * runtime/NativeErrorConstructor.cpp: + (JSC::NativeErrorConstructor::NativeErrorConstructor): + * runtime/NativeErrorConstructor.h: + (JSC::NativeErrorConstructor::create): + * runtime/NativeErrorPrototype.cpp: + (JSC::NativeErrorPrototype::NativeErrorPrototype): + (JSC::NativeErrorPrototype::finishCreation): + * runtime/NativeErrorPrototype.h: + (JSC::NativeErrorPrototype::create): + * runtime/NumberConstructor.cpp: + (JSC::NumberConstructor::NumberConstructor): + * runtime/NumberConstructor.h: + (JSC::NumberConstructor::create): + * runtime/NumberPrototype.cpp: + (JSC::NumberPrototype::NumberPrototype): + * runtime/NumberPrototype.h: + (JSC::NumberPrototype::create): + * runtime/ObjectConstructor.cpp: + (JSC::ObjectConstructor::ObjectConstructor): + * runtime/ObjectConstructor.h: + (JSC::ObjectConstructor::create): + * runtime/RegExpConstructor.cpp: + (JSC::RegExpConstructor::RegExpConstructor): + * runtime/RegExpConstructor.h: + (JSC::RegExpConstructor::create): + * runtime/RegExpPrototype.cpp: + (JSC::RegExpPrototype::RegExpPrototype): + * runtime/RegExpPrototype.h: + (JSC::RegExpPrototype::create): + * runtime/StringConstructor.cpp: + (JSC::StringConstructor::StringConstructor): + * runtime/StringConstructor.h: + (JSC::StringConstructor::create): + * runtime/StringObjectThatMasqueradesAsUndefined.h: + (JSC::StringObjectThatMasqueradesAsUndefined::create): + (JSC::StringObjectThatMasqueradesAsUndefined::StringObjectThatMasqueradesAsUndefined): + * runtime/StringPrototype.cpp: + (JSC::StringPrototype::StringPrototype): + * runtime/StringPrototype.h: + (JSC::StringPrototype::create): + +2011-09-13 Eric Seidel <eric@webkit.org> + + Remove ENABLE_SVG_USE as <use> is required by HTML5 + https://bugs.webkit.org/show_bug.cgi?id=68019 + + Reviewed by Ryosuke Niwa. + + * Configurations/FeatureDefines.xcconfig: + +2011-09-14 Iain Merrick <husky@google.com> + + HashTraits.h should include template specialization for WTF::String + https://bugs.webkit.org/show_bug.cgi?id=67851 + + Ensure that the template specialization for HashTraits<String> is always + picked up. (Previously it was possible to include HashSet and String but + not the correct HashTraits, so you would get an inefficient template + instantiation.) + + Reviewed by Darin Adler. + + * wtf/HashTraits.h: + * wtf/text/StringHash.h: + +2011-09-13 Filip Pizlo <fpizlo@apple.com> + + SpeculativeJIT::shouldSpeculateInteger(NodeIndex, NodeIndex) should + return false if either node can be double + https://bugs.webkit.org/show_bug.cgi?id=67985 + + Reviewed by Geoffrey Garen. + + This is a 17% speed-up on 3d-cube. + + This required allowing us to check if a constant is double but not + integer, and making the shouldSpeculateInteger() check test for + any hints of doubly-ness in its operands. This also required + changing some terminology: previously "isDouble" often meant + "isDouble or isInt32". Now "isDouble" means exactly what the name + suggests, and "isNumber" means "isDouble or isInt32". + + * dfg/DFGByteCodeParser.cpp: + (JSC::DFG::ByteCodeParser::toNumber): + (JSC::DFG::ByteCodeParser::parseBlock): + * dfg/DFGGenerationInfo.h: + (JSC::DFG::isJSFormat): + (JSC::DFG::isJSInteger): + (JSC::DFG::isJSDouble): + (JSC::DFG::isJSCell): + (JSC::DFG::isJSBoolean): + (JSC::DFG::GenerationInfo::isJSFormat): + (JSC::DFG::GenerationInfo::isJSInteger): + (JSC::DFG::GenerationInfo::isJSDouble): + (JSC::DFG::GenerationInfo::isJSCell): + (JSC::DFG::GenerationInfo::isJSBoolean): + * dfg/DFGGraph.h: + (JSC::DFG::Graph::isNumberConstant): + (JSC::DFG::Graph::valueOfNumberConstant): + * dfg/DFGJITCodeGenerator.cpp: + (JSC::DFG::JITCodeGenerator::fillInteger): + (JSC::DFG::JITCodeGenerator::fillDouble): + (JSC::DFG::JITCodeGenerator::fillJSValue): + (JSC::DFG::JITCodeGenerator::isKnownInteger): + (JSC::DFG::JITCodeGenerator::isKnownNumeric): + (JSC::DFG::JITCodeGenerator::isKnownCell): + (JSC::DFG::JITCodeGenerator::isKnownNotInteger): + (JSC::DFG::JITCodeGenerator::isKnownBoolean): + * dfg/DFGJITCodeGenerator.h: + (JSC::DFG::JITCodeGenerator::silentFillFPR): + (JSC::DFG::JITCodeGenerator::isNumberConstant): + (JSC::DFG::JITCodeGenerator::valueOfNumberConstant): + (JSC::DFG::JITCodeGenerator::initConstantInfo): + * dfg/DFGJITCompiler.cpp: + (JSC::DFG::JITCompiler::fillNumericToDouble): + (JSC::DFG::JITCompiler::fillToJS): + * dfg/DFGJITCompiler.h: + (JSC::DFG::JITCompiler::isNumberConstant): + (JSC::DFG::JITCompiler::valueOfNumberConstant): + * dfg/DFGNode.h: + (JSC::DFG::Node::isDoubleConstant): + (JSC::DFG::Node::isNumberConstant): + (JSC::DFG::Node::valueOfNumberConstant): + (JSC::DFG::Node::hasNumberResult): + * dfg/DFGNonSpeculativeJIT.cpp: + (JSC::DFG::NonSpeculativeJIT::knownConstantArithOp): + (JSC::DFG::NonSpeculativeJIT::compile): + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::fillSpeculateDouble): + * dfg/DFGSpeculativeJIT.h: + (JSC::DFG::SpeculativeJIT::isInteger): + (JSC::DFG::SpeculativeJIT::shouldSpeculateDouble): + (JSC::DFG::SpeculativeJIT::shouldNotSpeculateInteger): + (JSC::DFG::SpeculativeJIT::shouldSpeculateInteger): + +2011-09-13 Anders Carlsson <andersca@apple.com> + + Disable C++ exceptions when building with clang + https://bugs.webkit.org/show_bug.cgi?id=68031 + <rdar://problem/9556880> + + Reviewed by Mark Rowe. + + * Configurations/Base.xcconfig: + +2011-09-13 Eric Seidel <eric@webkit.org> + + Remove ENABLE_SVG_FOREIGN_OBJECT as it is a required part of HTML5 + https://bugs.webkit.org/show_bug.cgi?id=68018 + + Reviewed by Ryosuke Niwa. + + * Configurations/FeatureDefines.xcconfig: + +2011-09-13 Sam Weinig <sam@webkit.org> + + Object.getPrototypeOf should use JSValue::get() + https://bugs.webkit.org/show_bug.cgi?id=67973 + + Reviewed by Darin Adler. + + * runtime/ObjectConstructor.cpp: + (JSC::objectConstructorGetPrototypeOf): + Pipe through JSValue::get() to allow overrides. + +2011-09-12 Filip Pizlo <fpizlo@apple.com> + + JavaScriptCore does not have baseline->speculative OSR + https://bugs.webkit.org/show_bug.cgi?id=67920 + + Reviewed by Oliver Hunt. + + This adds the ability to on-stack-replace (OSR) from code that is + running hot in the old JIT to code compiled by the new JIT. This + ensures that long-running loops benefit from DFG optimization. + It also ensures that if code experiences a speculation failure + in DFG code, it has an opportunity to reenter the DFG once every + 1,000 loop iterations or so. + + This results in a 2.88x speed-up on Kraken/imaging-desaturate, + and is a pure win on the main three benchmark suites (SunSpider, + V8, Kraken), when tiered compilation is enabled. + + * JavaScriptCore.xcodeproj/project.pbxproj: + * bytecode/CodeBlock.cpp: + (JSC::CodeBlock::dump): + (JSC::CodeBlock::CodeBlock): + (JSC::ProgramCodeBlock::compileOptimized): + (JSC::EvalCodeBlock::compileOptimized): + (JSC::FunctionCodeBlock::compileOptimized): + * bytecode/CodeBlock.h: + * bytecode/Opcode.h: + * bytecode/PredictedType.h: Added. + (JSC::isCellPrediction): + (JSC::isArrayPrediction): + (JSC::isInt32Prediction): + (JSC::isDoublePrediction): + (JSC::isNumberPrediction): + (JSC::isBooleanPrediction): + (JSC::isStrongPrediction): + (JSC::predictionToString): + (JSC::mergePredictions): + (JSC::mergePrediction): + (JSC::makePrediction): + * bytecode/PredictionTracker.h: Added. + (JSC::operandIsArgument): + (JSC::PredictionSlot::PredictionSlot): + (JSC::PredictionTracker::PredictionTracker): + (JSC::PredictionTracker::initializeSimilarTo): + (JSC::PredictionTracker::copyLocalsFrom): + (JSC::PredictionTracker::numberOfArguments): + (JSC::PredictionTracker::numberOfVariables): + (JSC::PredictionTracker::argumentOffsetForOperand): + (JSC::PredictionTracker::predictArgument): + (JSC::PredictionTracker::predict): + (JSC::PredictionTracker::predictGlobalVar): + (JSC::PredictionTracker::getArgumentPrediction): + (JSC::PredictionTracker::getPrediction): + (JSC::PredictionTracker::getGlobalVarPrediction): + * bytecompiler/BytecodeGenerator.cpp: + (JSC::BytecodeGenerator::emitLoopHint): + * bytecompiler/BytecodeGenerator.h: + * bytecompiler/NodesCodegen.cpp: + (JSC::DoWhileNode::emitBytecode): + (JSC::WhileNode::emitBytecode): + (JSC::ForNode::emitBytecode): + (JSC::ForInNode::emitBytecode): + * dfg/DFGByteCodeParser.cpp: + (JSC::DFG::ByteCodeParser::parseBlock): + * dfg/DFGCapabilities.h: + (JSC::DFG::canCompileOpcode): + * dfg/DFGDriver.cpp: + (JSC::DFG::compile): + * dfg/DFGGraph.cpp: + (JSC::DFG::Graph::dump): + * dfg/DFGGraph.h: + (JSC::DFG::BasicBlock::BasicBlock): + (JSC::DFG::Graph::predict): + (JSC::DFG::Graph::getPrediction): + * dfg/DFGJITCompiler.cpp: + (JSC::DFG::JITCompiler::exitSpeculativeWithOSR): + (JSC::DFG::JITCompiler::compileEntry): + (JSC::DFG::JITCompiler::compileBody): + * dfg/DFGJITCompiler.h: + (JSC::DFG::JITCompiler::noticeOSREntry): + * dfg/DFGNode.h: + * dfg/DFGOSREntry.cpp: Added. + (JSC::DFG::predictionIsValid): + (JSC::DFG::prepareOSREntry): + * dfg/DFGOSREntry.h: Added. + (JSC::DFG::prepareOSREntry): + * dfg/DFGPredictionTracker.h: Removed. + * dfg/DFGPropagator.cpp: + (JSC::DFG::Propagator::mergeUse): + (JSC::DFG::Propagator::mergePrediction): + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::compile): + * jit/CompactJITCodeMap.h: + (JSC::CompactJITCodeMap::numberOfEntries): + (JSC::CompactJITCodeMap::decode): + (JSC::CompactJITCodeMap::Decoder::Decoder): + (JSC::CompactJITCodeMap::Decoder::numberOfEntriesRemaining): + (JSC::CompactJITCodeMap::Decoder::read): + * jit/JIT.cpp: + (JSC::JIT::emitOptimizationCheck): + (JSC::JIT::emitTimeoutCheck): + (JSC::JIT::privateCompileMainPass): + * jit/JIT.h: + (JSC::JIT::emit_op_loop_hint): + * jit/JITStubs.cpp: + (JSC::DEFINE_STUB_FUNCTION): + * runtime/Executable.cpp: + (JSC::EvalExecutable::compileInternal): + (JSC::ProgramExecutable::compileInternal): + (JSC::FunctionExecutable::compileForCallInternal): + (JSC::FunctionExecutable::compileForConstructInternal): + +2011-09-12 Sam Weinig <sam@webkit.org> + + Don't allow setting __proto__ to be a getter or setter + https://bugs.webkit.org/show_bug.cgi?id=67982 + + Reviewed by Gavin Barraclough. + + * runtime/JSObject.cpp: + (JSC::JSObject::defineGetter): + (JSC::JSObject::defineSetter): + Disallow setting a getter or setter on __proto__. + +2011-09-12 James Robinson <jamesr@chromium.org> + + Unreviewed build fix for chromium. + + Guard access to UString::latin1() with USE(JSC) since it is defined in JavaScriptCore/runtime/UString.cpp, which + is currently only compiled in by ports that use JavaScriptCore. This code is currently unreachable in builds so + no change in functionality. + + * yarr/YarrInterpreter.cpp: + (JSC::Yarr::Interpreter::CharAccess::CharAccess): + +2011-09-09 Filip Pizlo <fpizlo@apple.com> + + JavaScriptCore does not have speculative->baseline OSR + https://bugs.webkit.org/show_bug.cgi?id=67826 + + Reviewed by Oliver Hunt. + + This adds the ability to bail out of DFG speculative JIT execution by + performing an on-stack replacement (OSR) that results in the control + flow going to the equivalent code generated by the old JIT. + + This required a number of new features, as well as taking advantage of + some features that happened to already be present: + + We already had a policy of storing the bytecode index for which a DFG + node was generated inside the DFG::Node class. This was previously + called exceptionInfo. It's now renamed to codeOrigin to reflect that + it's used for more than just excpetions. OSR uses this to figure out + which bytecode index to use to look up the machine code location in + the code generated by the old JIT that we should be jumping to. + + CodeBlock now stores a mapping between bytecode indices and machine + code offsets for code generated by the old JIT. This is implemented + by CompactJITCodeMap, which tries to compress this data a bit. The + OSR compiler decodes this and uses it to find the machine code + locations it should be jumping to. + + We already had a mechanism that emitted SetLocal nodes in the DFG graph + that told us the time at which the old JIT would have stored something + into its register file, and the DFG::Node that corresponds to the value + that it would have stored. These SetLocal's were mostly dead-code- + eliminated, but our DCE leaves the nodes intact except for making them + have 0 as the ref count. This allows the OSR compiler to construct a + mapping between the state as it would have been seen by the old JIT + and the state as the DFG JIT sees it. The OSR compiler uses this to + generate code that reshapes the call frame so that it is like what the + old JIT would expect. + + Finally, when DFG_OSR is enabled (the default for TIERED_COMPILATION) + we no longer emit the non-speculative path. + + * JavaScriptCore.xcodeproj/project.pbxproj: + * bytecode/CodeBlock.h: + * dfg/DFGByteCodeParser.cpp: + (JSC::DFG::ByteCodeParser::currentCodeOrigin): + (JSC::DFG::ByteCodeParser::addToGraph): + * dfg/DFGGPRInfo.h: + * dfg/DFGGenerationInfo.h: + (JSC::DFG::GenerationInfo::alive): + * dfg/DFGGraph.cpp: + (JSC::DFG::Graph::dump): + * dfg/DFGJITCodeGenerator.cpp: + (JSC::DFG::JITCodeGenerator::emitCall): + * dfg/DFGJITCodeGenerator.h: + (JSC::DFG::JITCodeGenerator::appendCallWithExceptionCheck): + * dfg/DFGJITCompiler.cpp: + (JSC::DFG::JITCompiler::exitSpeculativeWithOSR): + (JSC::DFG::JITCompiler::linkOSRExits): + (JSC::DFG::JITCompiler::compileBody): + (JSC::DFG::JITCompiler::link): + * dfg/DFGJITCompiler.h: + (JSC::DFG::CallRecord::CallRecord): + (JSC::DFG::JITCompiler::notifyCall): + (JSC::DFG::JITCompiler::appendCallWithExceptionCheck): + (JSC::DFG::JITCompiler::appendCallWithFastExceptionCheck): + (JSC::DFG::JITCompiler::addJSCall): + (JSC::DFG::JITCompiler::JSCallRecord::JSCallRecord): + * dfg/DFGNode.h: + (JSC::DFG::CodeOrigin::CodeOrigin): + (JSC::DFG::CodeOrigin::isSet): + (JSC::DFG::CodeOrigin::bytecodeIndex): + (JSC::DFG::Node::Node): + (JSC::DFG::Node::child1Unchecked): + * dfg/DFGNonSpeculativeJIT.cpp: + (JSC::DFG::NonSpeculativeJIT::compile): + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::ValueSource::dump): + (JSC::DFG::ValueRecovery::dump): + (JSC::DFG::OSRExit::OSRExit): + (JSC::DFG::SpeculativeJIT::compile): + (JSC::DFG::SpeculativeJIT::compileMovHint): + (JSC::DFG::SpeculativeJIT::computeValueRecoveryFor): + * dfg/DFGSpeculativeJIT.h: + (JSC::DFG::ValueSource::ValueSource): + (JSC::DFG::ValueSource::isSet): + (JSC::DFG::ValueSource::nodeIndex): + (JSC::DFG::ValueRecovery::ValueRecovery): + (JSC::DFG::ValueRecovery::alreadyInRegisterFile): + (JSC::DFG::ValueRecovery::inGPR): + (JSC::DFG::ValueRecovery::inFPR): + (JSC::DFG::ValueRecovery::displacedInRegisterFile): + (JSC::DFG::ValueRecovery::constant): + (JSC::DFG::ValueRecovery::technique): + (JSC::DFG::ValueRecovery::gpr): + (JSC::DFG::ValueRecovery::fpr): + (JSC::DFG::ValueRecovery::virtualRegister): + (JSC::DFG::OSRExit::numberOfRecoveries): + (JSC::DFG::OSRExit::valueRecovery): + (JSC::DFG::OSRExit::isArgument): + (JSC::DFG::OSRExit::argumentForIndex): + (JSC::DFG::OSRExit::variableForIndex): + (JSC::DFG::OSRExit::operandForIndex): + (JSC::DFG::SpeculativeJIT::osrExits): + (JSC::DFG::SpeculativeJIT::speculationCheck): + (JSC::DFG::SpeculativeJIT::valueSourceForOperand): + (JSC::DFG::SpeculativeJIT::setNodeIndexForOperand): + (JSC::DFG::SpeculativeJIT::valueSourceReferenceForOperand): + (JSC::DFG::SpeculativeJIT::computeValueRecoveryFor): + (JSC::DFG::SpeculationCheckIndexIterator::SpeculationCheckIndexIterator): + (JSC::DFG::SpeculativeJIT::SpeculativeJIT): + * jit/CompactJITCodeMap.h: Added. + (JSC::BytecodeAndMachineOffset::BytecodeAndMachineOffset): + (JSC::BytecodeAndMachineOffset::getBytecodeIndex): + (JSC::BytecodeAndMachineOffset::getMachineCodeOffset): + (JSC::CompactJITCodeMap::~CompactJITCodeMap): + (JSC::CompactJITCodeMap::decode): + (JSC::CompactJITCodeMap::CompactJITCodeMap): + (JSC::CompactJITCodeMap::at): + (JSC::CompactJITCodeMap::decodeNumber): + (JSC::CompactJITCodeMap::Encoder::Encoder): + (JSC::CompactJITCodeMap::Encoder::~Encoder): + (JSC::CompactJITCodeMap::Encoder::append): + (JSC::CompactJITCodeMap::Encoder::finish): + (JSC::CompactJITCodeMap::Encoder::appendByte): + (JSC::CompactJITCodeMap::Encoder::encodeNumber): + (JSC::CompactJITCodeMap::Encoder::ensureCapacityFor): + * jit/JIT.cpp: + (JSC::JIT::privateCompileMainPass): + (JSC::JIT::privateCompile): + * jit/JIT.h: + * runtime/JSGlobalData.cpp: + (JSC::JSGlobalData::JSGlobalData): + (JSC::JSGlobalData::~JSGlobalData): + * runtime/JSGlobalData.h: + (JSC::JSGlobalData::osrScratchBufferForSize): + * runtime/JSValue.cpp: + (JSC::JSValue::description): + +2011-09-12 Geoffrey Garen <ggaren@apple.com> + + Re-enabled ENABLE(LAZY_BLOCK_FREEING). + + Reviewed by Stephanie Lewis. + + I accidentally disabled this in r94890, causing a big performance regression. + + * wtf/Platform.h: + +2011-09-12 Michael Saboff <msaboff@apple.com> + + Broken Build for ARM - lshift32() needs TrustedImm32 arg + https://bugs.webkit.org/show_bug.cgi?id=67965 + + Change lshift32(16, ARMRegisters::S1); to lshift32(TrustedImm32(16), ARMRegisters::S1); + + Reviewed by Anders Carlsson. + + * assembler/MacroAssemblerARM.h: + (JSC::MacroAssemblerARM::branch16): + +2011-09-12 Michael Saboff <msaboff@apple.com> + + Broken ARM build - missing semicolon in JavaScriptCore/assembler/MacroAssemblerARM.h + https://bugs.webkit.org/show_bug.cgi?id=67961 + + Added missing semicolon. + + Reviewed by Ryosuke Niwa. + + * assembler/MacroAssemblerARM.h: + (JSC::MacroAssemblerARM::branch16): + +2011-09-12 Michael Saboff <msaboff@apple.com> + + Update RegExp and related classes to use 8 bit strings when available + https://bugs.webkit.org/show_bug.cgi?id=67337 + + Modified both the Yarr interpreter and JIT to handle 8 bit subject strings. + The code paths are triggered by the UString::is8bit() method which currently + returns false. Implemented JIT changes for all current architectures. + Tested X86_64 and ARM v7. + + This includes some code that will likely change as we complete the + 8 bit string changes. This includes the way the raw buffer pointers + are accessed as well as replacing the CharAccess class with a + string interator returned from UString. + + Fixed build breakage in testRegExp.cpp due to globalObject construction + changes. + + Reviewed by Gavin Barraclough. + + * JavaScriptCore.exp: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * testRegExp.cpp: + (GlobalObject::finishCreation): + (GlobalObject::GlobalObject): + * assembler/ARMAssembler.cpp: + (JSC::ARMAssembler::baseIndexTransfer32): + * assembler/ARMAssembler.h: + * assembler/ARMv7Assembler.h: + (JSC::ARMv7Assembler::ubfx): + (JSC::ARMv7Assembler::ARMInstructionFormatter::twoWordOp12Reg40Imm3Reg4Imm20Imm5): + * assembler/MacroAssemblerARM.h: + (JSC::MacroAssemblerARM::load8): + (JSC::MacroAssemblerARM::branch8): + (JSC::MacroAssemblerARM::branch16): + * assembler/MacroAssemblerARMv7.h: + (JSC::MacroAssemblerARMv7::load8): + (JSC::MacroAssemblerARMv7::branch16): + (JSC::MacroAssemblerARMv7::branch8): + * assembler/MacroAssemblerMIPS.h: + (JSC::MacroAssemblerMIPS::load8): + (JSC::MacroAssemblerMIPS::branch8): + (JSC::MacroAssemblerMIPS::branch16): + * assembler/MacroAssemblerSH4.h: + (JSC::MacroAssemblerSH4::load8): + (JSC::MacroAssemblerSH4::branch8): + (JSC::MacroAssemblerSH4::branch16): + * assembler/MacroAssemblerX86Common.h: + (JSC::MacroAssemblerX86Common::load8): + (JSC::MacroAssemblerX86Common::branch16): + (JSC::MacroAssemblerX86Common::branch8): + * assembler/SH4Assembler.h: + (JSC::SH4Assembler::extub): + (JSC::SH4Assembler::printInstr): + * assembler/X86Assembler.h: + (JSC::X86Assembler::cmpw_ir): + (JSC::X86Assembler::movzbl_mr): + * runtime/RegExp.cpp: + (JSC::RegExp::compile): + (JSC::RegExp::compileIfNecessary): + (JSC::RegExp::match): + (JSC::RegExp::matchCompareWithInterpreter): + * runtime/RegExp.h: + * runtime/UString.h: + (JSC::UString::is8Bit): + * yarr/Yarr.h: + * yarr/YarrInterpreter.cpp: + (JSC::Yarr::Interpreter::CharAccess::CharAccess): + (JSC::Yarr::Interpreter::CharAccess::~CharAccess): + (JSC::Yarr::Interpreter::CharAccess::operator[]): + (JSC::Yarr::Interpreter::InputStream::InputStream): + (JSC::Yarr::Interpreter::Interpreter): + (JSC::Yarr::interpret): + * yarr/YarrJIT.cpp: + (JSC::Yarr::YarrGenerator::jumpIfCharNotEquals): + (JSC::Yarr::YarrGenerator::readCharacter): + (JSC::Yarr::YarrGenerator::generatePatternCharacterOnce): + (JSC::Yarr::YarrGenerator::generatePatternCharacterFixed): + (JSC::Yarr::YarrGenerator::generatePatternCharacterGreedy): + (JSC::Yarr::YarrGenerator::backtrackPatternCharacterNonGreedy): + (JSC::Yarr::YarrGenerator::generateCharacterClassFixed): + (JSC::Yarr::YarrGenerator::generateDotStarEnclosure): + (JSC::Yarr::YarrGenerator::YarrGenerator): + (JSC::Yarr::YarrGenerator::compile): + (JSC::Yarr::jitCompile): + (JSC::Yarr::execute): + * yarr/YarrJIT.h: + (JSC::Yarr::YarrCodeBlock::has8BitCode): + (JSC::Yarr::YarrCodeBlock::has16BitCode): + (JSC::Yarr::YarrCodeBlock::set8BitCode): + (JSC::Yarr::YarrCodeBlock::set16BitCode): + (JSC::Yarr::YarrCodeBlock::execute): + * yarr/YarrParser.h: + (JSC::Yarr::Parser::Parser): + +2011-09-12 Andras Becsi <andras.becsi@nokia.com> + + [Qt] Build fails after r94920 with strict compiler + https://bugs.webkit.org/show_bug.cgi?id=67928 + + Reviewed by Csaba Osztrogonác. + + * wtf/RedBlackTree.h: + (WTF::RedBlackTree::insert): Remove dead variables updateStart and newSubTreeRoot. + +2011-09-12 Patrick Gansterer <paroga@webkit.org> + + Unreviewed build fix after r94871. + + * runtime/InitializeThreading.cpp: + (JSC::initializeThreadingOnce): + * wtf/FastMalloc.cpp: + * wtf/RefCountedLeakCounter.h: + +2011-09-11 Filip Pizlo <fpizlo@apple.com> + + DFGNode.h has macros that indicate the enabling of a feature, but + they do not use the ENABLE() idiom. + https://bugs.webkit.org/show_bug.cgi?id=67907 + + Reviewed by Oliver Hunt. + + * dfg/DFGByteCodeParser.cpp: + (JSC::DFG::ByteCodeParser::stronglyPredict): + (JSC::DFG::ByteCodeParser::parse): + * dfg/DFGGraph.cpp: + (JSC::DFG::Graph::predictArgumentTypes): + * dfg/DFGJITCodeGenerator.cpp: + * dfg/DFGJITCodeGenerator.h: + * dfg/DFGJITCompiler.cpp: + (JSC::DFG::JITCompiler::fillInt32ToInteger): + (JSC::DFG::JITCompiler::jumpFromSpeculativeToNonSpeculative): + (JSC::DFG::JITCompiler::compileBody): + (JSC::DFG::JITCompiler::link): + * dfg/DFGJITCompiler.h: + * dfg/DFGNode.h: + * dfg/DFGNonSpeculativeJIT.cpp: + (JSC::DFG::NonSpeculativeJIT::compile): + * dfg/DFGOperations.cpp: + * dfg/DFGOperations.h: + * dfg/DFGPropagator.cpp: + (JSC::DFG::Propagator::fixpoint): + (JSC::DFG::Propagator::propagateNode): + (JSC::DFG::Propagator::propagateForward): + (JSC::DFG::Propagator::propagateBackward): + (JSC::DFG::propagate): + * dfg/DFGScoreBoard.h: + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::compile): + * dfg/DFGSpeculativeJIT.h: + (JSC::DFG::SpeculativeJIT::terminateSpeculativeExecution): + * jit/JIT.cpp: + (JSC::JIT::privateCompile): + +2011-09-11 Fumitoshi Ukai <ukai@chromium.org> + + Unreviewed build fix for chromium/mac & clang. + + Fix the macro redefinition error by r94927, because chromium set + ENABLE_JSC_MULTIPLE_THREADS=0 in WebKit/chromium/features.gypi and + it is not PLATFORM(QT). + ../../JavaScriptCore/wtf/Platform.h:512:9: error: 'ENABLE_JSC_MULTIPLE_THREADS' macro redefined [-Werror] + #define ENABLE_JSC_MULTIPLE_THREADS 1 + <command line>:43:9: note: previous definition is here + #define ENABLE_JSC_MULTIPLE_THREADS 0 + 1 error generated. + + * wtf/Platform.h: + +2011-09-11 Sam Weinig <sam@webkit.org> + + Remove JSCell::isPropertyNameIterator(), it is unused + https://bugs.webkit.org/show_bug.cgi?id=67911 + + Reviewed by Oliver Hunt. + + * runtime/JSCell.h: + * runtime/JSPropertyNameIterator.h: + +2011-09-11 Sam Weinig <sam@webkit.org> + + De-virtualize JSCell::isAPIValueWrapper + https://bugs.webkit.org/show_bug.cgi?id=67909 + + Reviewed by Oliver Hunt. + + * runtime/JSAPIValueWrapper.h: + (JSC::JSAPIValueWrapper::createStructure): + Set the correct type on structure creation. + + * runtime/JSCell.h: + Remove virtual keyword and default implementation. + + * runtime/JSType.h: + Add type for APIValueWrapper. It must come after CompoundType since + the APIValueWrapper has children in need of marking. + + * runtime/Structure.h: + (JSC::JSCell::isAPIValueWrapper): + Implement predicate using type info. + +2011-09-10 Sam Weinig <sam@webkit.org> + + De-virtualize JSCell::isGetterSetter, type information is available for it + https://bugs.webkit.org/show_bug.cgi?id=67902 + + Reviewed by Dan Bernstein. + + * runtime/GetterSetter.cpp: + * runtime/GetterSetter.h: + Remove override of isGetterSetter. + + * runtime/JSCell.cpp: + * runtime/JSCell.h: + De-virtualize and remove silly base implementation. + + * runtime/Structure.h: + (JSC::JSCell::isGetterSetter): + Use type info to determine getter-setter-hood. + +2011-09-09 Oliver Hunt <oliver@apple.com> + + Remove support for anonymous storage from jsobjects + https://bugs.webkit.org/show_bug.cgi?id=67881 + + Reviewed by Sam Weinig. + + Remove all use of anonymous slots, essentially a mechanical change + in JavaScriptCore + + * API/JSCallbackConstructor.h: + (JSC::JSCallbackConstructor::createStructure): + * API/JSCallbackFunction.h: + (JSC::JSCallbackFunction::createStructure): + * API/JSCallbackObject.h: + (JSC::JSCallbackObject::createStructure): + * JavaScriptCore.exp: + * debugger/DebuggerActivation.h: + (JSC::DebuggerActivation::createStructure): + * heap/MarkStack.cpp: + (JSC::MarkStack::validateValue): + * heap/MarkStack.h: + * runtime/Arguments.h: + (JSC::Arguments::createStructure): + * runtime/ArrayConstructor.h: + (JSC::ArrayConstructor::createStructure): + * runtime/ArrayPrototype.cpp: + (JSC::ArrayPrototype::finishCreation): + * runtime/ArrayPrototype.h: + (JSC::ArrayPrototype::createStructure): + * runtime/BooleanObject.h: + (JSC::BooleanObject::createStructure): + * runtime/BooleanPrototype.cpp: + (JSC::BooleanPrototype::BooleanPrototype): + * runtime/BooleanPrototype.h: + (JSC::BooleanPrototype::createStructure): + * runtime/DateConstructor.h: + (JSC::DateConstructor::createStructure): + * runtime/DateInstance.h: + (JSC::DateInstance::createStructure): + * runtime/DatePrototype.cpp: + (JSC::DatePrototype::DatePrototype): + * runtime/DatePrototype.h: + (JSC::DatePrototype::createStructure): + * runtime/ErrorInstance.h: + (JSC::ErrorInstance::createStructure): + * runtime/ErrorPrototype.cpp: + (JSC::ErrorPrototype::finishCreation): + * runtime/ErrorPrototype.h: + (JSC::ErrorPrototype::createStructure): + * runtime/ExceptionHelpers.h: + (JSC::InterruptedExecutionError::createStructure): + (JSC::TerminatedExecutionError::createStructure): + * runtime/Executable.h: + (JSC::ExecutableBase::createStructure): + (JSC::NativeExecutable::createStructure): + (JSC::EvalExecutable::createStructure): + (JSC::ProgramExecutable::createStructure): + (JSC::FunctionExecutable::createStructure): + * runtime/FunctionPrototype.h: + (JSC::FunctionPrototype::createStructure): + * runtime/GetterSetter.h: + (JSC::GetterSetter::createStructure): + * runtime/InternalFunction.h: + (JSC::InternalFunction::createStructure): + * runtime/JSAPIValueWrapper.h: + (JSC::JSAPIValueWrapper::createStructure): + * runtime/JSActivation.h: + (JSC::JSActivation::createStructure): + * runtime/JSArray.h: + (JSC::JSArray::createStructure): + * runtime/JSByteArray.cpp: + (JSC::JSByteArray::createStructure): + * runtime/JSCell.h: + * runtime/JSFunction.h: + (JSC::JSFunction::createStructure): + * runtime/JSGlobalObject.h: + (JSC::JSGlobalObject::finishCreation): + (JSC::JSGlobalObject::createStructure): + * runtime/JSNotAnObject.h: + (JSC::JSNotAnObject::createStructure): + * runtime/JSONObject.h: + (JSC::JSONObject::createStructure): + * runtime/JSObject.h: + (JSC::JSObject::createStructure): + (JSC::JSNonFinalObject::createStructure): + (JSC::JSFinalObject::createStructure): + * runtime/JSPropertyNameIterator.cpp: + (JSC::JSPropertyNameIterator::create): + * runtime/JSPropertyNameIterator.h: + (JSC::JSPropertyNameIterator::createStructure): + * runtime/JSStaticScopeObject.h: + (JSC::JSStaticScopeObject::createStructure): + * runtime/JSString.h: + (JSC::RopeBuilder::createStructure): + * runtime/JSVariableObject.h: + (JSC::JSVariableObject::createStructure): + * runtime/JSWrapperObject.h: + (JSC::JSWrapperObject::createStructure): + * runtime/MathObject.h: + (JSC::MathObject::createStructure): + * runtime/NativeErrorConstructor.h: + (JSC::NativeErrorConstructor::createStructure): + * runtime/NumberConstructor.h: + (JSC::NumberConstructor::createStructure): + * runtime/NumberObject.h: + (JSC::NumberObject::createStructure): + * runtime/NumberPrototype.cpp: + (JSC::NumberPrototype::NumberPrototype): + * runtime/NumberPrototype.h: + (JSC::NumberPrototype::createStructure): + * runtime/ObjectConstructor.h: + (JSC::ObjectConstructor::createStructure): + * runtime/ObjectPrototype.cpp: + (JSC::ObjectPrototype::finishCreation): + * runtime/ObjectPrototype.h: + (JSC::ObjectPrototype::createStructure): + * runtime/RegExp.h: + (JSC::RegExp::createStructure): + * runtime/RegExpConstructor.h: + (JSC::RegExpConstructor::createStructure): + * runtime/RegExpObject.h: + (JSC::RegExpObject::createStructure): + * runtime/RegExpPrototype.h: + (JSC::RegExpPrototype::createStructure): + * runtime/ScopeChain.h: + (JSC::ScopeChainNode::createStructure): + * runtime/StrictEvalActivation.h: + (JSC::StrictEvalActivation::createStructure): + * runtime/StringConstructor.h: + (JSC::StringConstructor::createStructure): + * runtime/StringObject.h: + (JSC::StringObject::createStructure): + * runtime/StringObjectThatMasqueradesAsUndefined.h: + (JSC::StringObjectThatMasqueradesAsUndefined::createStructure): + * runtime/StringPrototype.cpp: + (JSC::StringPrototype::StringPrototype): + * runtime/StringPrototype.h: + (JSC::StringPrototype::createStructure): + * runtime/Structure.cpp: + (JSC::Structure::Structure): + (JSC::Structure::materializePropertyMap): + (JSC::Structure::addPropertyTransitionToExistingStructure): + (JSC::Structure::addPropertyTransition): + (JSC::Structure::removePropertyTransition): + (JSC::Structure::changePrototypeTransition): + (JSC::Structure::despecifyFunctionTransition): + (JSC::Structure::getterSetterTransition): + (JSC::Structure::toDictionaryTransition): + (JSC::Structure::preventExtensionsTransition): + (JSC::Structure::flattenDictionaryStructure): + (JSC::Structure::addPropertyWithoutTransition): + (JSC::Structure::removePropertyWithoutTransition): + (JSC::Structure::get): + (JSC::Structure::putSpecificValue): + (JSC::Structure::remove): + (JSC::Structure::checkConsistency): + * runtime/Structure.h: + (JSC::Structure::create): + (JSC::Structure::propertyStorageSize): + (JSC::Structure::get): + * runtime/StructureChain.h: + (JSC::StructureChain::createStructure): + +2011-09-11 Jarred Nicholls <jarred@sencha.com> + + [Qt] Win32 build broken due to MachineStackMarker.cpp/.o failing to link against pthreads library + https://bugs.webkit.org/show_bug.cgi?id=67864 + + Qt Win32 is not pthread compatible and cannot participate in multithreaded JSC or it fails to build. + + Reviewed by Csaba Osztrogonác. + + * wtf/Platform.h: + +2011-09-11 Filip Pizlo <fpizlo@apple.com> + + ARM and MIPS assemblers still refer to executable pools. + https://bugs.webkit.org/show_bug.cgi?id=67903 + + Reviewed by Csaba Osztrogonác. + + * assembler/ARMAssembler.cpp: + (JSC::ARMAssembler::executableCopy): + * assembler/ARMAssembler.h: + * assembler/AssemblerBufferWithConstantPool.h: + * assembler/MIPSAssembler.h: + (JSC::MIPSAssembler::executableCopy): + +2011-09-08 Filip Pizlo <fpizlo@apple.com> + + The executable allocator makes it difficult to free individual + chunks of executable memory + https://bugs.webkit.org/show_bug.cgi?id=66363 + + Reviewed by Oliver Hunt. + + Introduced a best-fit, balanced-tree based allocator. The allocator + required a balanced tree that does not allocate memory and that + permits the removal of individual nodes directly (as opposed to by + key); neither AVLTree nor WebCore's PODRedBlackTree supported this. + Changed all references to executable code to use a reference counted + handle. + + * GNUmakefile.list.am: + * JavaScriptCore.exp: + * JavaScriptCore.vcproj/WTF/WTF.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * assembler/AssemblerBuffer.h: + (JSC::AssemblerBuffer::executableCopy): + * assembler/LinkBuffer.h: + (JSC::LinkBuffer::LinkBuffer): + (JSC::LinkBuffer::finalizeCode): + (JSC::LinkBuffer::linkCode): + * assembler/MacroAssemblerCodeRef.h: + (JSC::MacroAssemblerCodeRef::MacroAssemblerCodeRef): + (JSC::MacroAssemblerCodeRef::createSelfManagedCodeRef): + (JSC::MacroAssemblerCodeRef::executableMemory): + (JSC::MacroAssemblerCodeRef::code): + (JSC::MacroAssemblerCodeRef::size): + (JSC::MacroAssemblerCodeRef::operator!): + * assembler/X86Assembler.h: + (JSC::X86Assembler::executableCopy): + (JSC::X86Assembler::X86InstructionFormatter::executableCopy): + * bytecode/CodeBlock.h: + * bytecode/Instruction.h: + * bytecode/StructureStubInfo.h: + * dfg/DFGJITCompiler.cpp: + (JSC::DFG::JITCompiler::compile): + (JSC::DFG::JITCompiler::compileFunction): + * dfg/DFGRepatch.cpp: + (JSC::DFG::generateProtoChainAccessStub): + (JSC::DFG::tryCacheGetByID): + (JSC::DFG::tryBuildGetByIDList): + (JSC::DFG::tryBuildGetByIDProtoList): + (JSC::DFG::tryCachePutByID): + * jit/ExecutableAllocator.cpp: + (JSC::ExecutableAllocator::initializeAllocator): + (JSC::ExecutableAllocator::ExecutableAllocator): + (JSC::ExecutableAllocator::allocate): + (JSC::ExecutableAllocator::committedByteCount): + (JSC::ExecutableAllocator::dumpProfile): + * jit/ExecutableAllocator.h: + (JSC::ExecutableAllocator::dumpProfile): + * jit/ExecutableAllocatorFixedVMPool.cpp: + (JSC::ExecutableAllocator::initializeAllocator): + (JSC::ExecutableAllocator::ExecutableAllocator): + (JSC::ExecutableAllocator::isValid): + (JSC::ExecutableAllocator::underMemoryPressure): + (JSC::ExecutableAllocator::allocate): + (JSC::ExecutableAllocator::committedByteCount): + (JSC::ExecutableAllocator::dumpProfile): + * jit/JIT.cpp: + (JSC::JIT::privateCompile): + * jit/JIT.h: + (JSC::JIT::compileCTIMachineTrampolines): + (JSC::JIT::compileCTINativeCall): + * jit/JITCode.h: + (JSC::JITCode::operator !): + (JSC::JITCode::addressForCall): + (JSC::JITCode::offsetOf): + (JSC::JITCode::execute): + (JSC::JITCode::start): + (JSC::JITCode::size): + (JSC::JITCode::getExecutableMemory): + (JSC::JITCode::HostFunction): + (JSC::JITCode::JITCode): + * jit/JITOpcodes.cpp: + (JSC::JIT::privateCompileCTIMachineTrampolines): + (JSC::JIT::privateCompileCTINativeCall): + * jit/JITOpcodes32_64.cpp: + (JSC::JIT::privateCompileCTIMachineTrampolines): + (JSC::JIT::privateCompileCTINativeCall): + * jit/JITPropertyAccess.cpp: + (JSC::JIT::stringGetByValStubGenerator): + (JSC::JIT::emitSlow_op_get_by_val): + (JSC::JIT::privateCompilePutByIdTransition): + (JSC::JIT::privateCompilePatchGetArrayLength): + (JSC::JIT::privateCompileGetByIdProto): + (JSC::JIT::privateCompileGetByIdSelfList): + (JSC::JIT::privateCompileGetByIdProtoList): + (JSC::JIT::privateCompileGetByIdChainList): + (JSC::JIT::privateCompileGetByIdChain): + * jit/JITPropertyAccess32_64.cpp: + (JSC::JIT::stringGetByValStubGenerator): + (JSC::JIT::emitSlow_op_get_by_val): + (JSC::JIT::privateCompilePutByIdTransition): + (JSC::JIT::privateCompilePatchGetArrayLength): + (JSC::JIT::privateCompileGetByIdProto): + (JSC::JIT::privateCompileGetByIdSelfList): + (JSC::JIT::privateCompileGetByIdProtoList): + (JSC::JIT::privateCompileGetByIdChainList): + (JSC::JIT::privateCompileGetByIdChain): + * jit/JITStubs.cpp: + (JSC::JITThunks::JITThunks): + (JSC::DEFINE_STUB_FUNCTION): + (JSC::getPolymorphicAccessStructureListSlot): + (JSC::JITThunks::ctiStub): + (JSC::JITThunks::hostFunctionStub): + * jit/JITStubs.h: + * jit/SpecializedThunkJIT.h: + (JSC::SpecializedThunkJIT::SpecializedThunkJIT): + (JSC::SpecializedThunkJIT::finalize): + * jit/ThunkGenerators.cpp: + (JSC::charCodeAtThunkGenerator): + (JSC::charAtThunkGenerator): + (JSC::fromCharCodeThunkGenerator): + (JSC::sqrtThunkGenerator): + (JSC::floorThunkGenerator): + (JSC::ceilThunkGenerator): + (JSC::roundThunkGenerator): + (JSC::expThunkGenerator): + (JSC::logThunkGenerator): + (JSC::absThunkGenerator): + (JSC::powThunkGenerator): + * jit/ThunkGenerators.h: + * runtime/Executable.h: + (JSC::NativeExecutable::create): + * runtime/InitializeThreading.cpp: + (JSC::initializeThreadingOnce): + * runtime/JSGlobalData.cpp: + (JSC::JSGlobalData::JSGlobalData): + (JSC::JSGlobalData::dumpSampleData): + * runtime/JSGlobalData.h: + (JSC::JSGlobalData::getCTIStub): + * wtf/CMakeLists.txt: + * wtf/MetaAllocator.cpp: Added. + (WTF::MetaAllocatorHandle::MetaAllocatorHandle): + (WTF::MetaAllocatorHandle::~MetaAllocatorHandle): + (WTF::MetaAllocatorHandle::shrink): + (WTF::MetaAllocator::MetaAllocator): + (WTF::MetaAllocator::allocate): + (WTF::MetaAllocator::currentStatistics): + (WTF::MetaAllocator::findAndRemoveFreeSpace): + (WTF::MetaAllocator::addFreeSpaceFromReleasedHandle): + (WTF::MetaAllocator::addFreshFreeSpace): + (WTF::MetaAllocator::debugFreeSpaceSize): + (WTF::MetaAllocator::addFreeSpace): + (WTF::MetaAllocator::incrementPageOccupancy): + (WTF::MetaAllocator::decrementPageOccupancy): + (WTF::MetaAllocator::roundUp): + (WTF::MetaAllocator::allocFreeSpaceNode): + (WTF::MetaAllocator::freeFreeSpaceNode): + (WTF::MetaAllocator::dumpProfile): + * wtf/MetaAllocator.h: Added. + (WTF::MetaAllocator::bytesAllocated): + (WTF::MetaAllocator::bytesReserved): + (WTF::MetaAllocator::bytesCommitted): + (WTF::MetaAllocator::dumpProfile): + (WTF::MetaAllocator::~MetaAllocator): + * wtf/MetaAllocatorHandle.h: Added. + * wtf/RedBlackTree.h: Added. + (WTF::RedBlackTree::Node::Node): + (WTF::RedBlackTree::Node::successor): + (WTF::RedBlackTree::Node::predecessor): + (WTF::RedBlackTree::Node::reset): + (WTF::RedBlackTree::Node::parent): + (WTF::RedBlackTree::Node::setParent): + (WTF::RedBlackTree::Node::left): + (WTF::RedBlackTree::Node::setLeft): + (WTF::RedBlackTree::Node::right): + (WTF::RedBlackTree::Node::setRight): + (WTF::RedBlackTree::Node::color): + (WTF::RedBlackTree::Node::setColor): + (WTF::RedBlackTree::RedBlackTree): + (WTF::RedBlackTree::insert): + (WTF::RedBlackTree::remove): + (WTF::RedBlackTree::findExact): + (WTF::RedBlackTree::findLeastGreaterThanOrEqual): + (WTF::RedBlackTree::findGreatestLessThanOrEqual): + (WTF::RedBlackTree::first): + (WTF::RedBlackTree::last): + (WTF::RedBlackTree::size): + (WTF::RedBlackTree::isEmpty): + (WTF::RedBlackTree::treeMinimum): + (WTF::RedBlackTree::treeMaximum): + (WTF::RedBlackTree::treeInsert): + (WTF::RedBlackTree::leftRotate): + (WTF::RedBlackTree::rightRotate): + (WTF::RedBlackTree::removeFixup): + * wtf/wtf.pri: + * yarr/YarrJIT.cpp: + (JSC::Yarr::YarrGenerator::compile): + * yarr/YarrJIT.h: + (JSC::Yarr::YarrCodeBlock::execute): + (JSC::Yarr::YarrCodeBlock::getAddr): + +2011-09-10 Sam Weinig <sam@webkit.org> + + Remove JSC::isZombie() function, it did nothing and was called by no-one. + https://bugs.webkit.org/show_bug.cgi?id=67901 + + Reviewed by Andy Estes. + + * JavaScriptCore.exp: + * runtime/JSCell.cpp: + * runtime/JSValue.h: + +2011-09-10 Sam Weinig <sam@webkit.org> + + Add isInterruptedExecutionException and isTerminatedExecutionException predicates + https://bugs.webkit.org/show_bug.cgi?id=67892 + + Reviewed by Andy "First Time Reviewer" Estes. + + * JavaScriptCore.exp: + Add symbols. + + * interpreter/Interpreter.cpp: + (JSC::Interpreter::throwException): + Use new predicates. + + * runtime/ExceptionHelpers.cpp: + (JSC::createInterruptedExecutionException): + (JSC::isInterruptedExecutionException): + (JSC::createTerminatedExecutionException): + (JSC::isTerminatedExecutionException): + * runtime/ExceptionHelpers.h: + (JSC::InterruptedExecutionError::InterruptedExecutionError): + Add predicates. + +2011-09-10 Filip Pizlo <fpizlo@apple.com> + + DFG JIT completely undoes speculative compilation even in the case of + a partial static speculation failure + https://bugs.webkit.org/show_bug.cgi?id=67798 + + Reviewed by Geoffrey Garen. + + This is a regression with static speculation, so it is turned off by + default. But it is a necessary prerequisite for further work on + dynamic speculation. + + * dfg/DFGJITCodeGenerator.cpp: + (JSC::DFG::JITCodeGenerator::clearGenerationInfo): + * dfg/DFGJITCodeGenerator.h: + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::fillSpeculateIntInternal): + (JSC::DFG::SpeculativeJIT::compile): + * dfg/DFGSpeculativeJIT.h: + (JSC::DFG::SpeculativeJIT::terminateSpeculativeExecution): + +2011-09-09 Chris Marrin <cmarrin@apple.com> + + requestAnimationFrame doesn't throttle on Mac + https://bugs.webkit.org/show_bug.cgi?id=67171 + + Reviewed by Simon Fraser. + + Added WTF_USE_REQUEST_ANIMATION_FRAME_TIMER to allow any platform to run + requestAnimationFrame callbacks on a Timer defined in ScriptedAnimationController. + Currently only enabled for PLATFORM(MAC) + + * wtf/Platform.h: + +2011-09-09 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Dan Bernstein. + + Removed ENABLE(SINGLE_THREADED) support, since it is always false + https://bugs.webkit.org/show_bug.cgi?id=67862 + + Next step toward making the baseline platform assumption that threads exist. + + * wtf/wtf.pri: + * JavaScriptCore.gypi: + * JavaScriptCore.vcproj/WTF/WTF.vcproj: Removed references to + ThreadingNone.cpp, which was only compiled in single-threaded mode. + + * wtf/Platform.h: + * wtf/ThreadSpecific.h: + (WTF::::destroy): + * wtf/qt/ThreadingQt.cpp: Removed now-dead code. + + * wtf/ThreadingNone.cpp: Removed. + +2011-09-09 Mark Hahnenberg <mhahnenberg@apple.com> + + Unzip initialization lists and constructors in JSCell hierarchy (5/7) + https://bugs.webkit.org/show_bug.cgi?id=67420 + + Reviewed by Geoffrey Garen. + + Completed the fifth level of the refactoring to add finishCreation() + methods to all classes within the JSCell hierarchy with non-trivial + constructor bodies. + + This primarily consists of pushing the calls to finishCreation() down + into the constructors of the subclasses of the second level of the hierarchy + as well as pulling the finishCreation() calls out into the class's corresponding + create() method if it has one. Doing both simultaneously allows us to + maintain the invariant that the finishCreation() method chain is called exactly + once during the creation of an object, since calling it any other number of + times (0, 2, or more) will cause an assertion failure. + + * API/JSCallbackConstructor.cpp: + (JSC::JSCallbackConstructor::JSCallbackConstructor): + * API/JSCallbackConstructor.h: + (JSC::JSCallbackConstructor::create): + * API/JSCallbackFunction.cpp: + (JSC::JSCallbackFunction::JSCallbackFunction): + (JSC::JSCallbackFunction::finishCreation): + * API/JSCallbackFunction.h: + * API/JSCallbackObject.h: + * API/JSCallbackObjectFunctions.h: + (JSC::::JSCallbackObject): + (JSC::::finishCreation): + * JavaScriptCore.exp: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * debugger/DebuggerActivation.cpp: + * debugger/DebuggerActivation.h: + (JSC::DebuggerActivation::create): + * jsc.cpp: + (GlobalObject::finishCreation): + (GlobalObject::GlobalObject): + * runtime/ArrayConstructor.cpp: + (JSC::ArrayConstructor::ArrayConstructor): + (JSC::ArrayConstructor::finishCreation): + * runtime/ArrayConstructor.h: + * runtime/ArrayPrototype.cpp: + (JSC::ArrayPrototype::ArrayPrototype): + * runtime/ArrayPrototype.h: + (JSC::ArrayPrototype::create): + * runtime/BooleanConstructor.cpp: + (JSC::BooleanConstructor::BooleanConstructor): + (JSC::BooleanConstructor::finishCreation): + * runtime/BooleanConstructor.h: + * runtime/BooleanObject.cpp: + (JSC::BooleanObject::BooleanObject): + * runtime/BooleanObject.h: + (JSC::BooleanObject::create): + * runtime/BooleanPrototype.cpp: + (JSC::BooleanPrototype::BooleanPrototype): + (JSC::BooleanPrototype::finishCreation): + * runtime/BooleanPrototype.h: + * runtime/DateConstructor.cpp: + (JSC::DateConstructor::DateConstructor): + (JSC::DateConstructor::finishCreation): + * runtime/DateConstructor.h: + * runtime/DateInstance.cpp: + (JSC::DateInstance::DateInstance): + * runtime/DateInstance.h: + (JSC::DateInstance::create): + * runtime/DatePrototype.cpp: + (JSC::DatePrototype::DatePrototype): + (JSC::DatePrototype::finishCreation): + * runtime/DatePrototype.h: + * runtime/Error.cpp: + (JSC::StrictModeTypeErrorFunction::StrictModeTypeErrorFunction): + * runtime/ErrorConstructor.cpp: + (JSC::ErrorConstructor::ErrorConstructor): + (JSC::ErrorConstructor::finishCreation): + * runtime/ErrorConstructor.h: + * runtime/ErrorPrototype.cpp: + (JSC::ErrorPrototype::ErrorPrototype): + * runtime/ErrorPrototype.h: + (JSC::ErrorPrototype::create): + * runtime/FunctionConstructor.cpp: + (JSC::FunctionConstructor::FunctionConstructor): + (JSC::FunctionConstructor::finishCreation): + * runtime/FunctionConstructor.h: + * runtime/FunctionPrototype.cpp: + (JSC::FunctionPrototype::FunctionPrototype): + (JSC::FunctionPrototype::finishCreation): + * runtime/FunctionPrototype.h: + * runtime/InternalFunction.cpp: + (JSC::InternalFunction::InternalFunction): + * runtime/InternalFunction.h: + * runtime/JSActivation.cpp: + (JSC::JSActivation::JSActivation): + * runtime/JSActivation.h: + (JSC::JSActivation::create): + * runtime/JSGlobalObject.h: + (JSC::JSGlobalObject::create): + (JSC::JSGlobalObject::JSGlobalObject): + * runtime/JSONObject.cpp: + (JSC::JSONObject::JSONObject): + * runtime/JSONObject.h: + (JSC::JSONObject::create): + * runtime/JSStaticScopeObject.h: + (JSC::JSStaticScopeObject::create): + (JSC::JSStaticScopeObject::JSStaticScopeObject): + * runtime/JSString.cpp: + (JSC::StringObject::create): + * runtime/MathObject.cpp: + (JSC::MathObject::MathObject): + * runtime/MathObject.h: + (JSC::MathObject::create): + * runtime/NativeErrorConstructor.cpp: + (JSC::NativeErrorConstructor::NativeErrorConstructor): + * runtime/NativeErrorConstructor.h: + (JSC::NativeErrorConstructor::finishCreation): + * runtime/NativeErrorPrototype.cpp: + (JSC::NativeErrorPrototype::NativeErrorPrototype): + (JSC::NativeErrorPrototype::finishCreation): + * runtime/NativeErrorPrototype.h: + * runtime/NumberConstructor.cpp: + (JSC::NumberConstructor::NumberConstructor): + (JSC::NumberConstructor::finishCreation): + * runtime/NumberConstructor.h: + * runtime/NumberObject.cpp: + (JSC::NumberObject::NumberObject): + * runtime/NumberObject.h: + (JSC::NumberObject::create): + * runtime/NumberPrototype.cpp: + (JSC::NumberPrototype::NumberPrototype): + (JSC::NumberPrototype::finishCreation): + * runtime/NumberPrototype.h: + * runtime/ObjectConstructor.cpp: + (JSC::ObjectConstructor::ObjectConstructor): + (JSC::ObjectConstructor::finishCreation): + * runtime/ObjectConstructor.h: + * runtime/RegExpConstructor.cpp: + (JSC::RegExpConstructor::RegExpConstructor): + (JSC::RegExpConstructor::finishCreation): + (JSC::RegExpMatchesArray::RegExpMatchesArray): + * runtime/RegExpConstructor.h: + * runtime/RegExpMatchesArray.h: + (JSC::RegExpMatchesArray::create): + * runtime/RegExpObject.cpp: + (JSC::RegExpObject::RegExpObject): + * runtime/RegExpObject.h: + (JSC::RegExpObject::create): + * runtime/RegExpPrototype.cpp: + (JSC::RegExpPrototype::RegExpPrototype): + * runtime/StringConstructor.cpp: + (JSC::StringConstructor::StringConstructor): + (JSC::StringConstructor::finishCreation): + * runtime/StringConstructor.h: + * runtime/StringObject.cpp: + (JSC::StringObject::StringObject): + * runtime/StringObject.h: + (JSC::StringObject::create): + * runtime/StringObjectThatMasqueradesAsUndefined.h: + (JSC::StringObjectThatMasqueradesAsUndefined::StringObjectThatMasqueradesAsUndefined): + * runtime/StringPrototype.cpp: + (JSC::StringPrototype::StringPrototype): + (JSC::StringPrototype::finishCreation): + * runtime/StringPrototype.h: + +2011-09-09 Geoffrey Garen <ggaren@apple.com> + + Build fix: Guard against double-#define for something already #defined + by the build system. + + * wtf/Platform.h: + +2011-09-09 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Dan Bernstein. + + Never #define ENABLE_SINGLE_THREADED, !ENABLE_JSC_MULTIPLE_THREADS, or + !ENABLE_WTF_MULTIPLE_THREADS + https://bugs.webkit.org/show_bug.cgi?id=67860 + + First step toward making the baseline platform assumption that threads + exist: Never #define ENABLE_SINGLE_THREADED, !ENABLE_JSC_MULTIPLE_THREADS, + or !ENABLE_WTF_MULTIPLE_THREADS. + + * wtf/Platform.h: + +2011-09-09 Laszlo Gombos <laszlo.1.gombos@nokia.com> + + [Qt] Remove common.pri + https://bugs.webkit.org/show_bug.cgi?id=67814 + + Reviewed by Andreas Kling. + + * JavaScriptCore.pri: + +2011-09-08 Mark Hahnenberg <mhahnenberg@apple.com> + + REGRESSION(r94811): Assertion failure in 2 worker tests + https://bugs.webkit.org/show_bug.cgi?id=67829 + + Reviewed by Sam Weinig. + + Fixing a couple tests that were broken due to the wrong values being + set in the parent class pointers in the ClassInfo structs for + TerminatedExecutionError and InterruptedExecutionError. + + * runtime/ExceptionHelpers.cpp: + +2011-09-08 Oliver Hunt <oliver@apple.com> + + Use bump allocator for initial property storage + https://bugs.webkit.org/show_bug.cgi?id=67494 + + Reviewed by Geoffrey Garen. + + Use a bump allocator for initial allocation of property storage, + and promote to fastMalloc memory only if it survives a GC pass. + + Comes out as a 1% win on v8, and is a useful step on the way to + GC allocation of all property storage. + + * JavaScriptCore.exp: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * JavaScriptCore.xcodeproj/project.pbxproj: + * heap/Heap.cpp: + (JSC::Heap::collect): + * heap/Heap.h: + (JSC::Heap::allocatePropertyStorage): + (JSC::Heap::inPropertyStorageNursery): + * heap/MarkedBlock.h: + * heap/NewSpace.cpp: + (JSC::NewSpace::NewSpace): + * heap/NewSpace.h: + (JSC::NewSpace::resetPropertyStorageNursery): + (JSC::NewSpace::allocatePropertyStorage): + (JSC::NewSpace::inPropertyStorageNursery): + * jit/JITStubs.cpp: + (JSC::DEFINE_STUB_FUNCTION): + * runtime/JSObject.cpp: + (JSC::JSObject::allocatePropertyStorage): + * runtime/JSObject.h: + (JSC::JSObject::isUsingInlineStorage): + (JSC::JSObject::JSObject): + (JSC::JSObject::propertyStorage): + (JSC::JSObject::~JSObject): + (JSC::JSObject::putDirectInternal): + (JSC::JSObject::putDirectWithoutTransition): + (JSC::JSObject::putDirectFunctionWithoutTransition): + (JSC::JSObject::transitionTo): + (JSC::JSObject::visitChildrenDirect): + * runtime/StorageBarrier.h: Added. + (JSC::StorageBarrier::StorageBarrier): + (JSC::StorageBarrier::set): + (JSC::StorageBarrier::operator->): + (JSC::StorageBarrier::operator*): + (JSC::StorageBarrier::operator[]): + (JSC::StorageBarrier::get): + +2011-09-08 Sam Weinig <sam@webkit.org> + + Remove the Completion object from JSC, I have never liked it + https://bugs.webkit.org/show_bug.cgi?id=67755 + + Reviewed by Gavin Barraclough. + + - Removes the Completion object and replaces its use with out parameter exceptions. + - Remove ComplType and virtual exceptionType() function on JSObject. Replace with + ClassInfo for InterruptedExecutionError and TerminatedExecutionError. + + * API/JSBase.cpp: + (JSEvaluateScript): + (JSCheckScriptSyntax): + * JavaScriptCore.exp: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * interpreter/Interpreter.cpp: + (JSC::Interpreter::throwException): + * jsc.cpp: + (functionLoad): + (functionCheckSyntax): + (runWithScripts): + (runInteractive): + * runtime/Completion.cpp: + (JSC::checkSyntax): + (JSC::evaluate): + * runtime/Completion.h: + * runtime/ExceptionHelpers.cpp: + (JSC::InterruptedExecutionError::toString): + (JSC::TerminatedExecutionError::toString): + (JSC::createInterruptedExecutionException): + * runtime/ExceptionHelpers.h: + (JSC::InterruptedExecutionError::InterruptedExecutionError): + (JSC::InterruptedExecutionError::create): + (JSC::InterruptedExecutionError::createStructure): + (JSC::TerminatedExecutionError::TerminatedExecutionError): + (JSC::TerminatedExecutionError::create): + (JSC::TerminatedExecutionError::createStructure): + * runtime/JSGlobalData.cpp: + (JSC::JSGlobalData::JSGlobalData): + * runtime/JSObject.h: + +2011-09-08 Ryosuke Niwa <rniwa@webkit.org> + + Build fix. + + * dfg/DFGCapabilities.cpp: + +2011-09-08 Filip Pizlo <fpizlo@apple.com> + + Value profling and execution count profiling is performed even for + code that cannot be optimized + https://bugs.webkit.org/show_bug.cgi?id=67694 + + Reviewed by Gavin Barraclough. + + This is a 2% speed-up on V8 when tiered compilation is enabled. + + * JavaScriptCore.xcodeproj/project.pbxproj: + * bytecode/CodeBlock.cpp: + (JSC::ProgramCodeBlock::canCompileWithDFG): + (JSC::EvalCodeBlock::canCompileWithDFG): + (JSC::FunctionCodeBlock::canCompileWithDFG): + * bytecode/CodeBlock.h: + * dfg/DFGCapabilities.cpp: Added. + (JSC::DFG::canCompileOpcodes): + * dfg/DFGCapabilities.h: Added. + (JSC::DFG::mightCompileEval): + (JSC::DFG::mightCompileProgram): + (JSC::DFG::mightCompileFunctionForCall): + (JSC::DFG::mightCompileFunctionForConstruct): + (JSC::DFG::canCompileOpcode): + (JSC::DFG::canCompileEval): + (JSC::DFG::canCompileProgram): + (JSC::DFG::canCompileFunctionForCall): + (JSC::DFG::canCompileFunctionForConstruct): + * jit/JIT.cpp: + (JSC::JIT::emitOptimizationCheck): + (JSC::JIT::privateCompile): + * jit/JIT.h: + (JSC::JIT::shouldEmitProfiling): + * jit/JITInlineMethods.h: + (JSC::JIT::emitValueProfilingSite): + +2011-09-08 Filip Pizlo <fpizlo@apple.com> + + DFG speculative JIT does not initialize integer tags for PredictInt32 temporaries + https://bugs.webkit.org/show_bug.cgi?id=67840 + + Reviewed by Gavin Barraclough. + + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::initializeVariableTypes): + +2011-09-08 Thouraya ANDOLSI <thouraya.andolsi@st.com> + + https://bugs.webkit.org/show_bug.cgi?id=67771 + + Fix sequenceGetByIdSlowCaseInstructionSpace, sequenceGetByIdSlowCaseConstantSpace + and patchOffsetGetByIdSlowCaseCall + and enables DOUBLE_CONVERSION_CORRECT_DOUBLE_OPERATIONS flag for SH4 platforms. + + Reviewed by Gavin Barraclough. + + * jit/JIT.h: + * wtf/dtoa/utils.h: + +2011-09-08 Mark Hahnenberg <mhahnenberg@apple.com> + + Remove getUInt32 from JSCell + https://bugs.webkit.org/show_bug.cgi?id=67691 + + Reviewed by Oliver Hunt. + + We don't use JSCell::getUInt32 anymore, so it has been removed. + + * JavaScriptCore.exp: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * runtime/JSCell.cpp: + * runtime/JSCell.h: + +2011-09-07 Filip Pizlo <fpizlo@apple.com> + + PPC build fix. + + * bytecode/CodeBlock.cpp: + (JSC::CodeBlock::~CodeBlock): + +2011-09-07 Oliver Hunt <oliver@apple.com> + + Release mode build fix. + + * API/JSCallbackObject.h: + (JSC::JSCallbackObject::create): + +2011-09-06 Oliver Hunt <oliver@apple.com> + + Remove JSObjectWithGlobalObject + https://bugs.webkit.org/show_bug.cgi?id=67689 + + Reviewed by Geoff Garen. + + Remove JSObjectWithGlobalObject, and update code to stop using anonymous + storage to access the global object that a JSObject comes from. Largely + mechanical change to remove the use of anonymous storage and JSObjectWithGlobalObject. + + * API/JSCallbackConstructor.cpp: + (JSC::JSCallbackConstructor::JSCallbackConstructor): + (JSC::JSCallbackConstructor::finishCreation): + * API/JSCallbackConstructor.h: + * API/JSCallbackObject.cpp: + * API/JSCallbackObject.h: + (JSC::JSCallbackObject::create): + * API/JSCallbackObjectFunctions.h: + (JSC::::JSCallbackObject): + (JSC::::finishCreation): + (JSC::::staticFunctionGetter): + * API/JSClassRef.cpp: + (OpaqueJSClass::prototype): + * API/JSObjectRef.cpp: + (JSObjectMake): + (JSObjectGetPrivate): + (JSObjectSetPrivate): + (JSObjectGetPrivateProperty): + (JSObjectSetPrivateProperty): + (JSObjectDeletePrivateProperty): + * API/JSValueRef.cpp: + (JSValueIsObjectOfClass): + * API/JSWeakObjectMapRefPrivate.cpp: + * JavaScriptCore.exp: + * JavaScriptCore.xcodeproj/project.pbxproj: + * bytecode/CodeBlock.h: + * dfg/DFGRepatch.cpp: + (JSC::DFG::dfgRepatchGetMethodFast): + (JSC::DFG::tryCacheGetMethod): + * jit/JIT.h: + * jit/JITInlineMethods.h: + (JSC::JIT::emitAllocateJSFunction): + * jit/JITPropertyAccess.cpp: + (JSC::JIT::patchMethodCallProto): + * jit/JITStubs.cpp: + (JSC::DEFINE_STUB_FUNCTION): + * runtime/DatePrototype.cpp: + * runtime/InternalFunction.cpp: + (JSC::InternalFunction::InternalFunction): + (JSC::InternalFunction::finishCreation): + * runtime/InternalFunction.h: + * runtime/JSFunction.cpp: + (JSC::JSFunction::JSFunction): + (JSC::JSFunction::finishCreation): + * runtime/JSFunction.h: + (JSC::JSFunction::create): + (JSC::JSFunction::createStructure): + * runtime/JSGlobalObject.cpp: + (JSC::JSGlobalObject::reset): + * runtime/JSONObject.cpp: + (JSC::JSONObject::JSONObject): + (JSC::JSONObject::finishCreation): + * runtime/JSONObject.h: + * runtime/JSObject.h: + (JSC::JSObject::globalObject): + * runtime/JSObjectWithGlobalObject.cpp: Removed. + * runtime/JSObjectWithGlobalObject.h: Removed. + * runtime/JSValue.cpp: + (JSC::JSValue::isValidCallee): + * runtime/Lookup.cpp: + (JSC::setUpStaticFunctionSlot): + * runtime/Lookup.h: + * runtime/MathObject.cpp: + (JSC::MathObject::MathObject): + (JSC::MathObject::finishCreation): + * runtime/MathObject.h: + * runtime/NumberPrototype.cpp: + * runtime/RegExpObject.cpp: + (JSC::RegExpObject::RegExpObject): + (JSC::RegExpObject::finishCreation): + * runtime/RegExpObject.h: + * runtime/Structure.cpp: + (JSC::Structure::Structure): + * runtime/Structure.h: + (JSC::Structure::create): + (JSC::Structure::globalObject): + +2011-09-07 Gavin Barraclough <barraclough@apple.com> + + Refactor JIT checks for ObjectType into helper functions. + + Rubber stamped by Sam Weinig. + + * dfg/DFGJITCompiler.h: + (JSC::DFG::JITCompiler::branchIfNotObject): + * dfg/DFGNonSpeculativeJIT.cpp: + (JSC::DFG::NonSpeculativeJIT::compile): + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::compile): + * jit/JIT.h: + * jit/JITCall32_64.cpp: + (JSC::JIT::emit_op_ret_object_or_this): + * jit/JITInlineMethods.h: + (JSC::JIT::emitJumpIfNotObject): + * jit/JITOpcodes.cpp: + (JSC::JIT::emit_op_instanceof): + (JSC::JIT::emit_op_ret_object_or_this): + (JSC::JIT::emit_op_get_pnames): + (JSC::JIT::emit_op_create_this): + * jit/JITOpcodes32_64.cpp: + (JSC::JIT::emit_op_instanceof): + (JSC::JIT::emit_op_get_pnames): + (JSC::JIT::emit_op_create_this): + +2011-09-07 Sheriff Bot <webkit.review.bot@gmail.com> + + Unreviewed, rolling out r94627 and r94632. + http://trac.webkit.org/changeset/94627 + http://trac.webkit.org/changeset/94632 + https://bugs.webkit.org/show_bug.cgi?id=67698 + + It broke tests on GTK and Qt (Requested by Ossy on #webkit). + + * API/JSCallbackConstructor.cpp: + (JSC::JSCallbackConstructor::JSCallbackConstructor): + * API/JSCallbackConstructor.h: + (JSC::JSCallbackConstructor::create): + * API/JSCallbackFunction.cpp: + (JSC::JSCallbackFunction::JSCallbackFunction): + * API/JSCallbackFunction.h: + * JavaScriptCore.exp: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * debugger/DebuggerActivation.cpp: + (JSC::DebuggerActivation::create): + * debugger/DebuggerActivation.h: + * jsc.cpp: + (GlobalObject::constructorBody): + (GlobalObject::GlobalObject): + * runtime/ArrayConstructor.cpp: + (JSC::ArrayConstructor::ArrayConstructor): + * runtime/ArrayConstructor.h: + * runtime/ArrayPrototype.cpp: + (JSC::ArrayPrototype::ArrayPrototype): + * runtime/ArrayPrototype.h: + (JSC::ArrayPrototype::create): + * runtime/BooleanConstructor.cpp: + (JSC::BooleanConstructor::BooleanConstructor): + * runtime/BooleanConstructor.h: + * runtime/BooleanObject.cpp: + (JSC::BooleanObject::BooleanObject): + * runtime/BooleanObject.h: + (JSC::BooleanObject::create): + * runtime/BooleanPrototype.cpp: + (JSC::BooleanPrototype::BooleanPrototype): + * runtime/BooleanPrototype.h: + * runtime/DateConstructor.cpp: + (JSC::DateConstructor::DateConstructor): + * runtime/DateConstructor.h: + * runtime/DateInstance.cpp: + (JSC::DateInstance::DateInstance): + * runtime/DateInstance.h: + (JSC::DateInstance::create): + * runtime/DatePrototype.cpp: + (JSC::DatePrototype::DatePrototype): + * runtime/DatePrototype.h: + * runtime/Error.cpp: + (JSC::StrictModeTypeErrorFunction::StrictModeTypeErrorFunction): + * runtime/ErrorConstructor.cpp: + (JSC::ErrorConstructor::ErrorConstructor): + * runtime/ErrorConstructor.h: + (JSC::ErrorConstructor::create): + * runtime/ErrorPrototype.cpp: + (JSC::ErrorPrototype::ErrorPrototype): + * runtime/ErrorPrototype.h: + (JSC::ErrorPrototype::create): + * runtime/FunctionConstructor.cpp: + (JSC::FunctionConstructor::FunctionConstructor): + * runtime/FunctionConstructor.h: + * runtime/FunctionPrototype.cpp: + (JSC::FunctionPrototype::FunctionPrototype): + * runtime/FunctionPrototype.h: + * runtime/InternalFunction.cpp: + (JSC::InternalFunction::InternalFunction): + * runtime/InternalFunction.h: + * runtime/JSActivation.cpp: + (JSC::JSActivation::JSActivation): + * runtime/JSActivation.h: + (JSC::JSActivation::create): + * runtime/JSGlobalObject.h: + (JSC::JSGlobalObject::create): + (JSC::JSGlobalObject::JSGlobalObject): + * runtime/JSONObject.cpp: + (JSC::JSONObject::JSONObject): + * runtime/JSONObject.h: + (JSC::JSONObject::create): + * runtime/JSStaticScopeObject.h: + (JSC::JSStaticScopeObject::create): + (JSC::JSStaticScopeObject::JSStaticScopeObject): + * runtime/JSString.cpp: + (JSC::StringObject::create): + * runtime/MathObject.cpp: + (JSC::MathObject::MathObject): + * runtime/MathObject.h: + (JSC::MathObject::create): + * runtime/NativeErrorConstructor.cpp: + (JSC::NativeErrorConstructor::NativeErrorConstructor): + * runtime/NativeErrorConstructor.h: + (JSC::NativeErrorConstructor::constructorBody): + * runtime/NativeErrorPrototype.cpp: + (JSC::NativeErrorPrototype::NativeErrorPrototype): + (JSC::NativeErrorPrototype::constructorBody): + * runtime/NativeErrorPrototype.h: + * runtime/NumberConstructor.cpp: + (JSC::NumberConstructor::NumberConstructor): + * runtime/NumberConstructor.h: + * runtime/NumberObject.cpp: + (JSC::NumberObject::NumberObject): + * runtime/NumberObject.h: + (JSC::NumberObject::create): + * runtime/NumberPrototype.cpp: + (JSC::NumberPrototype::NumberPrototype): + * runtime/NumberPrototype.h: + * runtime/ObjectConstructor.cpp: + (JSC::ObjectConstructor::ObjectConstructor): + * runtime/ObjectConstructor.h: + * runtime/RegExpConstructor.cpp: + (JSC::RegExpConstructor::RegExpConstructor): + (JSC::RegExpMatchesArray::RegExpMatchesArray): + * runtime/RegExpConstructor.h: + * runtime/RegExpMatchesArray.h: + (JSC::RegExpMatchesArray::create): + * runtime/RegExpObject.cpp: + (JSC::RegExpObject::RegExpObject): + * runtime/RegExpObject.h: + (JSC::RegExpObject::create): + * runtime/RegExpPrototype.cpp: + (JSC::RegExpPrototype::RegExpPrototype): + * runtime/StringConstructor.cpp: + (JSC::StringConstructor::StringConstructor): + * runtime/StringConstructor.h: + * runtime/StringObject.cpp: + (JSC::StringObject::StringObject): + * runtime/StringObject.h: + (JSC::StringObject::create): + * runtime/StringObjectThatMasqueradesAsUndefined.h: + (JSC::StringObjectThatMasqueradesAsUndefined::StringObjectThatMasqueradesAsUndefined): + * runtime/StringPrototype.cpp: + (JSC::StringPrototype::StringPrototype): + * runtime/StringPrototype.h: + +2011-09-06 Xianzhu Wang <wangxianzhu@chromium.org> + + Replace usages of Vector<UChar> with existing StringBuilder + https://bugs.webkit.org/show_bug.cgi?id=67079 + + Reviewed by Gavin Barraclough. + + This is part of work to support 8-bit string buffers. + Adds StringBuilder::characters() because the original Vector<UChar>::data() + is widely used. + Sets the minimum size of buffer to 16 to prevent possible performance + regression. Further performance investigation should be done in + https://bugs.webkit.org/show_bug.cgi?id=67084. + + * wtf/Forward.h: + * wtf/text/StringBuilder.cpp: + (WTF::StringBuilder::appendUninitialized): Sets minimum buffer size to 16 bytes. + * wtf/text/StringBuilder.h: + (WTF::StringBuilder::operator[]): + (WTF::StringBuilder::characters): Added. + +2011-09-06 Mark Hahnenberg <mhahnenberg@apple.com> + + Fix broken snow leopard build + https://bugs.webkit.org/show_bug.cgi?id=67693 + + Reviewed by Daniel Bates. + + Removed unnecessary symbol export. + + * JavaScriptCore.exp: + +2011-09-06 Filip Pizlo <fpizlo@apple.com> + + DFG JIT does not optimize booleans + https://bugs.webkit.org/show_bug.cgi?id=67670 + + Reviewed by Gavin Barraclough. + + This adds boolean value profiling, boolean prediction in the DFG, + boolean forward flow propagation in the DFGPropagator, boolean + data format in DFG generation info, and comprehensive optimizations + based on both boolean prediction and boolean generation info. + This is brings the speed-up on v8-richards to 12%, and gives slight + speed-ups elsewhere as well. + + Making this work right required navigating some subtleties in + value profiling. Some functions get compiled with insufficient + information because some important path of the function never + executed. In these cases, we wish to fall back on static + speculation. But to do so, we need to ensure that predictions that + are inherent in the code (like that GetById almost certainly takes + a cell operand) are reflected in predictions that we make in + DFGPropagator. Thus, DFGPropagator now does both backward and + forward flow, using a both forward and backward fixpoint. + + The backward flow in DFGPropagator is a separate static analysis, + and needs to keep a set of backward flow abstract values for + variables, arguments, and globals. To make this easy, this patch + factors out DFGGraph's prediction tracking capability into + DFGPredictionTracker, which now gets used by both DFGGraph (for + forward flow predictions) and DFGPropagator (for backward flow + predictions). Backward flow predictions eventually get merged + into forward flow ones, but the two are not equivalent: a forward + flow prediction is a superset of the backward flow prediction. + + Debugging these prediction issues required a better understanding + of where we fail speculation, and what our value predictions look + like. This patch also adds optional verbose speculation failure + (so an informative printf fires whenever speculation failure occurs) + and slight improvements to the verbosity in other places. + + * bytecode/ValueProfile.h: + (JSC::ValueProfile::numberOfBooleans): + (JSC::ValueProfile::probabilityOfBoolean): + (JSC::ValueProfile::dump): + (JSC::ValueProfile::computeStatistics): + * dfg/DFGByteCodeParser.cpp: + (JSC::DFG::ByteCodeParser::stronglyPredict): + (JSC::DFG::ByteCodeParser::parseBlock): + * dfg/DFGGenerationInfo.h: + (JSC::DFG::dataFormatToString): + (JSC::DFG::needDataFormatConversion): + * dfg/DFGGraph.cpp: + (JSC::DFG::Graph::dump): + (JSC::DFG::Graph::predictArgumentTypes): + * dfg/DFGGraph.h: + (JSC::DFG::Graph::Graph): + (JSC::DFG::Graph::predictions): + (JSC::DFG::Graph::predict): + (JSC::DFG::Graph::predictGlobalVar): + (JSC::DFG::Graph::getPrediction): + (JSC::DFG::Graph::getGlobalVarPrediction): + (JSC::DFG::Graph::isBooleanConstant): + (JSC::DFG::Graph::valueOfBooleanConstant): + * dfg/DFGJITCodeGenerator.cpp: + (JSC::DFG::JITCodeGenerator::fillInteger): + (JSC::DFG::JITCodeGenerator::fillDouble): + (JSC::DFG::JITCodeGenerator::fillJSValue): + (JSC::DFG::JITCodeGenerator::isKnownNotInteger): + (JSC::DFG::JITCodeGenerator::isKnownBoolean): + (JSC::DFG::JITCodeGenerator::nonSpeculativeNonPeepholeCompareNull): + (JSC::DFG::JITCodeGenerator::nonSpeculativeNonPeepholeCompare): + (JSC::DFG::JITCodeGenerator::nonSpeculativeNonPeepholeStrictEq): + (JSC::DFG::JITCodeGenerator::emitBranch): + (JSC::DFG::JITCodeGenerator::speculationCheck): + (JSC::DFG::GPRTemporary::GPRTemporary): + * dfg/DFGJITCodeGenerator.h: + (JSC::DFG::JITCodeGenerator::isBooleanConstant): + (JSC::DFG::JITCodeGenerator::valueOfBooleanConstant): + * dfg/DFGJITCompiler.cpp: + (JSC::DFG::JITCompiler::jumpFromSpeculativeToNonSpeculative): + (JSC::DFG::JITCompiler::link): + * dfg/DFGJITCompiler.h: + (JSC::DFG::JITCompiler::debugCall): + (JSC::DFG::JITCompiler::isBooleanConstant): + (JSC::DFG::JITCompiler::valueOfBooleanConstant): + * dfg/DFGNode.h: + (JSC::DFG::isBooleanPrediction): + (JSC::DFG::predictionToString): + (JSC::DFG::mergePredictions): + (JSC::DFG::makePrediction): + (JSC::DFG::Node::isBooleanConstant): + (JSC::DFG::Node::valueOfBooleanConstant): + (JSC::DFG::Node::hasBooleanResult): + (JSC::DFG::Node::hasNumericResult): + (JSC::DFG::Node::predict): + * dfg/DFGOperations.cpp: + * dfg/DFGOperations.h: + * dfg/DFGPredictionTracker.h: Added. + (JSC::DFG::operandIsArgument): + (JSC::DFG::PredictionSlot::PredictionSlot): + (JSC::DFG::PredictionTracker::PredictionTracker): + (JSC::DFG::PredictionTracker::initializeSimilarTo): + (JSC::DFG::PredictionTracker::numberOfArguments): + (JSC::DFG::PredictionTracker::numberOfVariables): + (JSC::DFG::PredictionTracker::argumentOffsetForOperand): + (JSC::DFG::PredictionTracker::predictArgument): + (JSC::DFG::PredictionTracker::predict): + (JSC::DFG::PredictionTracker::predictGlobalVar): + (JSC::DFG::PredictionTracker::getArgumentPrediction): + (JSC::DFG::PredictionTracker::getPrediction): + (JSC::DFG::PredictionTracker::getGlobalVarPrediction): + * dfg/DFGPropagator.cpp: + (JSC::DFG::Propagator::Propagator): + (JSC::DFG::Propagator::fixpoint): + (JSC::DFG::Propagator::setPrediction): + (JSC::DFG::Propagator::mergeUse): + (JSC::DFG::Propagator::mergePrediction): + (JSC::DFG::Propagator::propagateNode): + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::fillSpeculateIntInternal): + (JSC::DFG::SpeculativeJIT::fillSpeculateDouble): + (JSC::DFG::SpeculativeJIT::fillSpeculateCell): + (JSC::DFG::SpeculativeJIT::fillSpeculateBoolean): + (JSC::DFG::SpeculativeJIT::compare): + (JSC::DFG::SpeculativeJIT::compile): + * dfg/DFGSpeculativeJIT.h: + (JSC::DFG::SpeculateBooleanOperand::SpeculateBooleanOperand): + (JSC::DFG::SpeculateBooleanOperand::~SpeculateBooleanOperand): + (JSC::DFG::SpeculateBooleanOperand::index): + (JSC::DFG::SpeculateBooleanOperand::gpr): + (JSC::DFG::SpeculateBooleanOperand::use): + * runtime/JSGlobalData.h: + * runtime/JSValue.cpp: + (JSC::JSValue::description): + +2011-09-06 Mark Hahnenberg <mhahnenberg@apple.com> + + Unzip initialization lists and constructors in JSCell hierarchy (5/7) + https://bugs.webkit.org/show_bug.cgi?id=67420 + + Reviewed by Geoffrey Garen. + + Completed the fifth level of the refactoring to add finishCreation() + methods to all classes within the JSCell hierarchy with non-trivial + constructor bodies. + + This primarily consists of pushing the calls to finishCreation() down + into the constructors of the subclasses of the second level of the hierarchy + as well as pulling the finishCreation() calls out into the class's corresponding + create() method if it has one. Doing both simultaneously allows us to + maintain the invariant that the finishCreation() method chain is called exactly + once during the creation of an object, since calling it any other number of + times (0, 2, or more) will cause an assertion failure. + + * API/JSCallbackConstructor.cpp: + (JSC::JSCallbackConstructor::JSCallbackConstructor): + * API/JSCallbackConstructor.h: + (JSC::JSCallbackConstructor::create): + * API/JSCallbackFunction.cpp: + (JSC::JSCallbackFunction::JSCallbackFunction): + (JSC::JSCallbackFunction::finishCreation): + * API/JSCallbackFunction.h: + * JavaScriptCore.exp: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * debugger/DebuggerActivation.cpp: + * debugger/DebuggerActivation.h: + (JSC::DebuggerActivation::create): + * jsc.cpp: + (GlobalObject::finishCreation): + (GlobalObject::GlobalObject): + * runtime/ArrayConstructor.cpp: + (JSC::ArrayConstructor::ArrayConstructor): + (JSC::ArrayConstructor::finishCreation): + * runtime/ArrayConstructor.h: + * runtime/ArrayPrototype.cpp: + (JSC::ArrayPrototype::ArrayPrototype): + * runtime/ArrayPrototype.h: + (JSC::ArrayPrototype::create): + * runtime/BooleanConstructor.cpp: + (JSC::BooleanConstructor::BooleanConstructor): + (JSC::BooleanConstructor::finishCreation): + * runtime/BooleanConstructor.h: + * runtime/BooleanObject.cpp: + (JSC::BooleanObject::BooleanObject): + * runtime/BooleanObject.h: + (JSC::BooleanObject::create): + * runtime/BooleanPrototype.cpp: + (JSC::BooleanPrototype::BooleanPrototype): + (JSC::BooleanPrototype::finishCreation): + * runtime/BooleanPrototype.h: + * runtime/DateConstructor.cpp: + (JSC::DateConstructor::DateConstructor): + (JSC::DateConstructor::finishCreation): + * runtime/DateConstructor.h: + * runtime/DateInstance.cpp: + (JSC::DateInstance::DateInstance): + * runtime/DateInstance.h: + (JSC::DateInstance::create): + * runtime/DatePrototype.cpp: + (JSC::DatePrototype::DatePrototype): + (JSC::DatePrototype::finishCreation): + * runtime/DatePrototype.h: + * runtime/Error.cpp: + (JSC::StrictModeTypeErrorFunction::StrictModeTypeErrorFunction): + * runtime/ErrorConstructor.cpp: + (JSC::ErrorConstructor::ErrorConstructor): + (JSC::ErrorConstructor::finishCreation): + * runtime/ErrorConstructor.h: + * runtime/ErrorPrototype.cpp: + (JSC::ErrorPrototype::ErrorPrototype): + * runtime/ErrorPrototype.h: + (JSC::ErrorPrototype::create): + * runtime/FunctionConstructor.cpp: + (JSC::FunctionConstructor::FunctionConstructor): + (JSC::FunctionConstructor::finishCreation): + * runtime/FunctionConstructor.h: + * runtime/FunctionPrototype.cpp: + (JSC::FunctionPrototype::FunctionPrototype): + (JSC::FunctionPrototype::finishCreation): + * runtime/FunctionPrototype.h: + * runtime/InternalFunction.cpp: + (JSC::InternalFunction::InternalFunction): + * runtime/InternalFunction.h: + * runtime/JSActivation.cpp: + (JSC::JSActivation::JSActivation): + * runtime/JSActivation.h: + (JSC::JSActivation::create): + * runtime/JSGlobalObject.h: + (JSC::JSGlobalObject::create): + (JSC::JSGlobalObject::JSGlobalObject): + * runtime/JSONObject.cpp: + (JSC::JSONObject::JSONObject): + * runtime/JSONObject.h: + (JSC::JSONObject::create): + * runtime/JSStaticScopeObject.h: + (JSC::JSStaticScopeObject::create): + (JSC::JSStaticScopeObject::JSStaticScopeObject): + * runtime/JSString.cpp: + (JSC::StringObject::create): + * runtime/MathObject.cpp: + (JSC::MathObject::MathObject): + * runtime/MathObject.h: + (JSC::MathObject::create): + * runtime/NativeErrorConstructor.cpp: + (JSC::NativeErrorConstructor::NativeErrorConstructor): + * runtime/NativeErrorConstructor.h: + (JSC::NativeErrorConstructor::finishCreation): + * runtime/NativeErrorPrototype.cpp: + (JSC::NativeErrorPrototype::NativeErrorPrototype): + (JSC::NativeErrorPrototype::finishCreation): + * runtime/NativeErrorPrototype.h: + * runtime/NumberConstructor.cpp: + (JSC::NumberConstructor::NumberConstructor): + (JSC::NumberConstructor::finishCreation): + * runtime/NumberConstructor.h: + * runtime/NumberObject.cpp: + (JSC::NumberObject::NumberObject): + * runtime/NumberObject.h: + (JSC::NumberObject::create): + * runtime/NumberPrototype.cpp: + (JSC::NumberPrototype::NumberPrototype): + (JSC::NumberPrototype::finishCreation): + * runtime/NumberPrototype.h: + * runtime/ObjectConstructor.cpp: + (JSC::ObjectConstructor::ObjectConstructor): + (JSC::ObjectConstructor::finishCreation): + * runtime/ObjectConstructor.h: + * runtime/RegExpConstructor.cpp: + (JSC::RegExpConstructor::RegExpConstructor): + (JSC::RegExpConstructor::finishCreation): + (JSC::RegExpMatchesArray::RegExpMatchesArray): + * runtime/RegExpConstructor.h: + * runtime/RegExpMatchesArray.h: + (JSC::RegExpMatchesArray::create): + * runtime/RegExpObject.cpp: + (JSC::RegExpObject::RegExpObject): + * runtime/RegExpObject.h: + (JSC::RegExpObject::create): + * runtime/RegExpPrototype.cpp: + (JSC::RegExpPrototype::RegExpPrototype): + * runtime/StringConstructor.cpp: + (JSC::StringConstructor::StringConstructor): + (JSC::StringConstructor::finishCreation): + * runtime/StringConstructor.h: + * runtime/StringObject.cpp: + (JSC::StringObject::StringObject): + * runtime/StringObject.h: + (JSC::StringObject::create): + * runtime/StringObjectThatMasqueradesAsUndefined.h: + (JSC::StringObjectThatMasqueradesAsUndefined::StringObjectThatMasqueradesAsUndefined): + * runtime/StringPrototype.cpp: + (JSC::StringPrototype::StringPrototype): + (JSC::StringPrototype::finishCreation): + * runtime/StringPrototype.h: + +2011-09-06 Filip Pizlo <fpizlo@apple.com> + + Accessibility tests crashing in BasicRawSentinelNode code + https://bugs.webkit.org/show_bug.cgi?id=67682 + + Reviewed by Geoffrey Garen. + + A CodeBlock should ensure that no other CodeBlocks have references to it after + it is destroyed. + + * bytecode/CodeBlock.cpp: + (JSC::CodeBlock::~CodeBlock): + +2011-09-06 Yong Li <yoli@rim.com> + + https://bugs.webkit.org/show_bug.cgi?id=67486 + This reverts r65993 which gives wrong results for rshift + in some corner cases (see the test). + + Reviewed by Gavin Barraclough. + + New test: fast/js/floating-point-truncate-rshift.html + + * assembler/ARMAssembler.h: + * assembler/MacroAssemblerARM.h: + (JSC::MacroAssemblerARM::supportsFloatingPointTruncate): + (JSC::MacroAssemblerARM::branchTruncateDoubleToInt32): + +2011-09-06 Filip Pizlo <fpizlo@apple.com> + + Unreviewed build fix for r94559. + + Marked the relevant parameters as unused if !ENABLE(JIT), and surrounded + new out-of-line JIT-specific method definitions with !ENABLE(JIT). + + * bytecode/CodeBlock.cpp: + * runtime/Executable.cpp: + (JSC::EvalExecutable::compileInternal): + (JSC::ProgramExecutable::compileInternal): + (JSC::FunctionExecutable::compileForCallInternal): + +2011-09-06 Mark Hahnenberg <mhahnenberg@apple.com> + + Fix broken PPC build due to new dtoa library + https://bugs.webkit.org/show_bug.cgi?id=67654 + + Reviewed by Dan Bernstein. + + Added condition for PPC in the new dtoa compatibility check so that + building won't fail. + + * wtf/dtoa/utils.h: + +2011-09-05 Oliver Hunt <oliver@apple.com> + + An object's structure should reference the global object responsible for its creation + https://bugs.webkit.org/show_bug.cgi?id=67624 + + Reviewed by Gavin Barraclough. + + Add a reference to a GlobalObject to Structure, and update all calls to + Structure::create() to pass the global object that is the origin for that + structure. For objects where the appropriate global object isn't available + at construction time (global object prototypes, etc), or objects that + logically don't have a global object (strings, etc) we just pass null. + + This change is largely mechanical (passing a new globalObject parameter + around). + + * API/JSCallbackConstructor.h: + (JSC::JSCallbackConstructor::createStructure): + * API/JSCallbackFunction.h: + (JSC::JSCallbackFunction::createStructure): + * API/JSCallbackObject.h: + (JSC::JSCallbackObject::createStructure): + * API/JSContextRef.cpp: + * JavaScriptCore.exp: + * debugger/DebuggerActivation.h: + (JSC::DebuggerActivation::createStructure): + * runtime/Arguments.h: + (JSC::Arguments::createStructure): + * runtime/ArrayConstructor.h: + (JSC::ArrayConstructor::createStructure): + * runtime/ArrayPrototype.h: + (JSC::ArrayPrototype::createStructure): + * runtime/BooleanObject.h: + (JSC::BooleanObject::createStructure): + * runtime/BooleanPrototype.h: + (JSC::BooleanPrototype::createStructure): + * runtime/DateConstructor.h: + (JSC::DateConstructor::createStructure): + * runtime/DateInstance.h: + (JSC::DateInstance::createStructure): + * runtime/DatePrototype.h: + (JSC::DatePrototype::createStructure): + * runtime/ErrorInstance.h: + (JSC::ErrorInstance::createStructure): + * runtime/ErrorPrototype.h: + (JSC::ErrorPrototype::createStructure): + * runtime/Executable.h: + (JSC::ExecutableBase::createStructure): + (JSC::NativeExecutable::createStructure): + (JSC::EvalExecutable::createStructure): + (JSC::ProgramExecutable::createStructure): + (JSC::FunctionExecutable::createStructure): + * runtime/FunctionPrototype.h: + (JSC::FunctionPrototype::createStructure): + * runtime/GetterSetter.h: + (JSC::GetterSetter::createStructure): + * runtime/InternalFunction.h: + (JSC::InternalFunction::createStructure): + * runtime/JSAPIValueWrapper.h: + (JSC::JSAPIValueWrapper::createStructure): + * runtime/JSActivation.h: + (JSC::JSActivation::createStructure): + * runtime/JSArray.h: + (JSC::JSArray::createStructure): + * runtime/JSByteArray.cpp: + (JSC::JSByteArray::createStructure): + * runtime/JSByteArray.h: + * runtime/JSFunction.h: + (JSC::JSFunction::createStructure): + * runtime/JSGlobalData.cpp: + (JSC::JSGlobalData::JSGlobalData): + * runtime/JSGlobalObject.cpp: + (JSC::JSGlobalObject::reset): + * runtime/JSGlobalObject.h: + (JSC::JSGlobalObject::finishCreation): + (JSC::JSGlobalObject::createStructure): + * runtime/JSNotAnObject.h: + (JSC::JSNotAnObject::createStructure): + * runtime/JSONObject.h: + (JSC::JSONObject::createStructure): + * runtime/JSObject.cpp: + (JSC::JSObject::createInheritorID): + * runtime/JSObject.h: + (JSC::JSObject::createStructure): + (JSC::JSNonFinalObject::createStructure): + (JSC::JSFinalObject::createStructure): + (JSC::createEmptyObjectStructure): + * runtime/JSObjectWithGlobalObject.h: + (JSC::JSObjectWithGlobalObject::createStructure): + * runtime/JSPropertyNameIterator.h: + (JSC::JSPropertyNameIterator::createStructure): + * runtime/JSStaticScopeObject.h: + (JSC::JSStaticScopeObject::createStructure): + * runtime/JSString.h: + (JSC::RopeBuilder::createStructure): + * runtime/JSVariableObject.h: + (JSC::JSVariableObject::createStructure): + * runtime/JSWrapperObject.h: + (JSC::JSWrapperObject::createStructure): + * runtime/MathObject.h: + (JSC::MathObject::createStructure): + * runtime/NativeErrorConstructor.h: + (JSC::NativeErrorConstructor::createStructure): + (JSC::NativeErrorConstructor::constructorBody): + * runtime/NumberConstructor.h: + (JSC::NumberConstructor::createStructure): + * runtime/NumberObject.h: + (JSC::NumberObject::createStructure): + * runtime/NumberPrototype.h: + (JSC::NumberPrototype::createStructure): + * runtime/ObjectConstructor.h: + (JSC::ObjectConstructor::createStructure): + * runtime/ObjectPrototype.h: + (JSC::ObjectPrototype::createStructure): + * runtime/RegExp.h: + (JSC::RegExp::createStructure): + * runtime/RegExpConstructor.h: + (JSC::RegExpConstructor::createStructure): + * runtime/RegExpObject.h: + (JSC::RegExpObject::createStructure): + * runtime/RegExpPrototype.h: + (JSC::RegExpPrototype::createStructure): + * runtime/ScopeChain.h: + (JSC::ScopeChainNode::createStructure): + * runtime/StrictEvalActivation.h: + (JSC::StrictEvalActivation::createStructure): + * runtime/StringConstructor.h: + (JSC::StringConstructor::createStructure): + * runtime/StringObject.h: + (JSC::StringObject::createStructure): + * runtime/StringObjectThatMasqueradesAsUndefined.h: + (JSC::StringObjectThatMasqueradesAsUndefined::create): + (JSC::StringObjectThatMasqueradesAsUndefined::createStructure): + * runtime/StringPrototype.h: + (JSC::StringPrototype::createStructure): + * runtime/Structure.cpp: + (JSC::Structure::Structure): + (JSC::Structure::visitChildren): + * runtime/Structure.h: + (JSC::Structure::create): + (JSC::Structure::globalObject): + (JSC::Structure::setGlobalObject): + * runtime/StructureChain.h: + (JSC::StructureChain::createStructure): + +2011-09-06 Michael Saboff <msaboff@apple.com> + + Add windows changes for JSC:RegExp functional tests + https://bugs.webkit.org/show_bug.cgi?id=67521 + + Windows build changes for regular expression functional test. + + Rubber-stamped by Gavin Barraclough. + + * JavaScriptCore.vcproj/JavaScriptCore.sln: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * JavaScriptCore.vcproj/testRegExp: Added. + * JavaScriptCore.vcproj/testRegExp/testRegExp.vcproj: Added. + * JavaScriptCore.vcproj/testRegExp/testRegExpCommon.vsprops: Added. + * JavaScriptCore.vcproj/testRegExp/testRegExpDebug.vsprops: Added. + * JavaScriptCore.vcproj/testRegExp/testRegExpDebugAll.vsprops: Added. + * JavaScriptCore.vcproj/testRegExp/testRegExpDebugCairoCFLite.vsprops: Added. + * JavaScriptCore.vcproj/testRegExp/testRegExpPostBuild.cmd: Added. + * JavaScriptCore.vcproj/testRegExp/testRegExpPreBuild.cmd: Added. + * JavaScriptCore.vcproj/testRegExp/testRegExpPreLink.cmd: Added. + * JavaScriptCore.vcproj/testRegExp/testRegExpProduction.vsprops: Added. + * JavaScriptCore.vcproj/testRegExp/testRegExpRelease.vsprops: Added. + * JavaScriptCore.vcproj/testRegExp/testRegExpReleaseCairoCFLite.vsprops: Added. + * JavaScriptCore.vcproj/testRegExp/testRegExpReleasePGO.vsprops: Added. + +2011-09-06 Filip Pizlo <fpizlo@apple.com> + + JavaScriptCore does not have tiered compilation + https://bugs.webkit.org/show_bug.cgi?id=67176 + + Reviewed by Gavin Barraclough. + + This adds the ability to have multiple CodeBlocks associated with + a particular role in an Executable. These are stored in + descending order of compiler tier. CodeBlocks are optimized when + a counter (m_executeCounter) that is incremented in loops and + epilogues becomes positive. Optimizing means that all calls to + the old CodeBlock are unlinked. + + The DFG can now pull in predictions from ValueProfiles, and + propagate them along the graph. To support the new phase while + maintaing some level of abstraction, a DFGDriver was introduced + that encapsulates how to run the DFG compiler. + + This is turned off by default because it's not yet a performance + win on all benchmarks. It speeds up crypto and richards by + 10% and 6% respectively, but still does not do as good of a job + as it could. Notably, the DFG backend has not changed, and + is largely oblivious to the new information being made available + to it. + + When turned off (the default), this patch is performance neutral. + + * CMakeLists.txt: + * GNUmakefile.am: + * GNUmakefile.list.am: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops: + * JavaScriptCore.vcproj/JavaScriptCore/copy-files.cmd: + * JavaScriptCore.xcodeproj/project.pbxproj: + * assembler/MacroAssemblerX86.h: + (JSC::MacroAssemblerX86::branchAdd32): + * assembler/MacroAssemblerX86_64.h: + (JSC::MacroAssemblerX86_64::branchAdd32): + * bytecode/CodeBlock.cpp: + (JSC::CodeBlock::CodeBlock): + (JSC::CodeBlock::~CodeBlock): + (JSC::CodeBlock::visitAggregate): + (JSC::CallLinkInfo::unlink): + (JSC::CodeBlock::unlinkCalls): + (JSC::CodeBlock::unlinkIncomingCalls): + (JSC::CodeBlock::clearEvalCache): + (JSC::replaceExistingEntries): + (JSC::CodeBlock::copyDataFromAlternative): + (JSC::ProgramCodeBlock::replacement): + (JSC::EvalCodeBlock::replacement): + (JSC::FunctionCodeBlock::replacement): + (JSC::ProgramCodeBlock::compileOptimized): + (JSC::EvalCodeBlock::compileOptimized): + (JSC::FunctionCodeBlock::compileOptimized): + * bytecode/CodeBlock.h: + (JSC::GlobalCodeBlock::GlobalCodeBlock): + (JSC::ProgramCodeBlock::ProgramCodeBlock): + (JSC::EvalCodeBlock::EvalCodeBlock): + (JSC::FunctionCodeBlock::FunctionCodeBlock): + * bytecode/ValueProfile.h: + (JSC::ValueProfile::dump): + (JSC::ValueProfile::computeStatistics): + * bytecompiler/BytecodeGenerator.cpp: + (JSC::BytecodeGenerator::BytecodeGenerator): + * bytecompiler/BytecodeGenerator.h: + * dfg/DFGByteCodeParser.cpp: + (JSC::DFG::ByteCodeParser::ByteCodeParser): + (JSC::DFG::ByteCodeParser::addCall): + (JSC::DFG::ByteCodeParser::dynamicallyPredict): + (JSC::DFG::ByteCodeParser::parseBlock): + (JSC::DFG::parse): + * dfg/DFGDriver.cpp: Added. + (JSC::DFG::compile): + (JSC::DFG::tryCompile): + (JSC::DFG::tryCompileFunction): + * dfg/DFGDriver.h: Added. + (JSC::DFG::tryCompile): + (JSC::DFG::tryCompileFunction): + * dfg/DFGGraph.cpp: + (JSC::DFG::Graph::dump): + (JSC::DFG::Graph::predictArgumentTypes): + * dfg/DFGGraph.h: + (JSC::DFG::Graph::predict): + (JSC::DFG::Graph::predictGlobalVar): + (JSC::DFG::Graph::isConstant): + (JSC::DFG::Graph::isJSConstant): + (JSC::DFG::Graph::isInt32Constant): + (JSC::DFG::Graph::isDoubleConstant): + (JSC::DFG::Graph::valueOfJSConstant): + (JSC::DFG::Graph::valueOfInt32Constant): + (JSC::DFG::Graph::valueOfDoubleConstant): + * dfg/DFGJITCompiler.cpp: + (JSC::DFG::JITCompiler::link): + * dfg/DFGJITCompiler.h: + (JSC::DFG::JITCompiler::isConstant): + (JSC::DFG::JITCompiler::isJSConstant): + (JSC::DFG::JITCompiler::isInt32Constant): + (JSC::DFG::JITCompiler::isDoubleConstant): + (JSC::DFG::JITCompiler::valueOfJSConstant): + (JSC::DFG::JITCompiler::valueOfInt32Constant): + (JSC::DFG::JITCompiler::valueOfDoubleConstant): + * dfg/DFGNode.h: + (JSC::DFG::isCellPrediction): + (JSC::DFG::isNumberPrediction): + (JSC::DFG::predictionToString): + (JSC::DFG::mergePrediction): + (JSC::DFG::makePrediction): + (JSC::DFG::Node::valueOfJSConstant): + (JSC::DFG::Node::isInt32Constant): + (JSC::DFG::Node::isDoubleConstant): + (JSC::DFG::Node::valueOfInt32Constant): + (JSC::DFG::Node::valueOfDoubleConstant): + (JSC::DFG::Node::predict): + * dfg/DFGPropagation.cpp: Added. + (JSC::DFG::Propagator::Propagator): + (JSC::DFG::Propagator::fixpoint): + (JSC::DFG::Propagator::setPrediction): + (JSC::DFG::Propagator::mergePrediction): + (JSC::DFG::Propagator::propagateNode): + (JSC::DFG::Propagator::propagateForward): + (JSC::DFG::Propagator::propagateBackward): + (JSC::DFG::propagate): + * dfg/DFGPropagation.h: Added. + (JSC::DFG::propagate): + * dfg/DFGRepatch.cpp: + (JSC::DFG::dfgLinkFor): + * heap/HandleHeap.h: + (JSC::HandleHeap::Node::Node): + * jit/JIT.cpp: + (JSC::JIT::emitOptimizationCheck): + (JSC::JIT::emitTimeoutCheck): + (JSC::JIT::privateCompile): + (JSC::JIT::linkFor): + * jit/JIT.h: + (JSC::JIT::emitOptimizationCheck): + * jit/JITCall32_64.cpp: + (JSC::JIT::emit_op_ret): + (JSC::JIT::emit_op_ret_object_or_this): + * jit/JITCode.h: + (JSC::JITCode::JITCode): + (JSC::JITCode::bottomTierJIT): + (JSC::JITCode::topTierJIT): + (JSC::JITCode::nextTierJIT): + * jit/JITOpcodes.cpp: + (JSC::JIT::emit_op_ret): + (JSC::JIT::emit_op_ret_object_or_this): + * jit/JITStubs.cpp: + (JSC::DEFINE_STUB_FUNCTION): + * jit/JITStubs.h: + * runtime/Executable.cpp: + (JSC::EvalExecutable::compileOptimized): + (JSC::EvalExecutable::compileInternal): + (JSC::ProgramExecutable::compileOptimized): + (JSC::ProgramExecutable::compileInternal): + (JSC::FunctionExecutable::compileOptimizedForCall): + (JSC::FunctionExecutable::compileOptimizedForConstruct): + (JSC::FunctionExecutable::compileForCallInternal): + (JSC::FunctionExecutable::compileForConstructInternal): + * runtime/Executable.h: + (JSC::EvalExecutable::compile): + (JSC::ProgramExecutable::compile): + (JSC::FunctionExecutable::compileForCall): + (JSC::FunctionExecutable::compileForConstruct): + (JSC::FunctionExecutable::compileOptimizedFor): + * wtf/Platform.h: + * wtf/SentinelLinkedList.h: + (WTF::BasicRawSentinelNode::BasicRawSentinelNode): + (WTF::BasicRawSentinelNode::setPrev): + (WTF::BasicRawSentinelNode::setNext): + (WTF::BasicRawSentinelNode::prev): + (WTF::BasicRawSentinelNode::next): + (WTF::BasicRawSentinelNode::isOnList): + (WTF::::remove): + (WTF::::SentinelLinkedList): + (WTF::::begin): + (WTF::::end): + (WTF::::push): + +2011-09-05 Sheriff Bot <webkit.review.bot@gmail.com> + + Unreviewed, rolling out r94445 and r94448. + http://trac.webkit.org/changeset/94445 + http://trac.webkit.org/changeset/94448 + https://bugs.webkit.org/show_bug.cgi?id=67595 + + It broke everything (Requested by ossy on #webkit). + + * JavaScriptCore.exp: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * heap/Heap.cpp: + (JSC::Heap::collect): + * heap/Heap.h: + * heap/NewSpace.cpp: + (JSC::NewSpace::NewSpace): + * heap/NewSpace.h: + * jit/JITStubs.cpp: + (JSC::DEFINE_STUB_FUNCTION): + * runtime/JSObject.cpp: + (JSC::JSObject::allocatePropertyStorage): + * runtime/JSObject.h: + (JSC::JSObject::~JSObject): + (JSC::JSObject::putDirectInternal): + (JSC::JSObject::putDirectWithoutTransition): + (JSC::JSObject::putDirectFunctionWithoutTransition): + (JSC::JSObject::transitionTo): + (JSC::JSObject::visitChildrenDirect): + +2011-09-05 Patrick Gansterer <paroga@webkit.org> + + Unreviewed build fix for r94452. + + Add config.h as the first header to the cc files as required by the coding style. + Reuse macros from Assertions.h instead of adding addional #ifdefs. + + * wtf/dtoa/bignum-dtoa.cc: + * wtf/dtoa/bignum.cc: + * wtf/dtoa/cached-powers.cc: + * wtf/dtoa/diy-fp.cc: + * wtf/dtoa/double-conversion.cc: + * wtf/dtoa/fast-dtoa.cc: + * wtf/dtoa/fixed-dtoa.cc: + * wtf/dtoa/strtod.cc: + * wtf/dtoa/utils.h: + +2011-09-05 Andras Becsi <andras.becsi@nokia.com> + + [Qt][WK2] Fix the build + + Rubber-stamped by Csaba Osztrogonác. + + * wtf/dtoa/double-conversion.cc: Remove dead variable in file added in r94452. + The variable fractional_part is only set but never used. + +2011-09-04 Mark Hahnenberg <mhahnenberg@apple.com> + + REGRESSION (r94452): 20 http/tests tests failing on Qt Linux Release + https://bugs.webkit.org/show_bug.cgi?id=67562 + + Reviewed by Darin Adler. + + Fixing the build (again which was broken by the dtoa patch. Needed + to make sure WTF::double_conversion::initialize() is called for Qt + as well as adding a check for WinCE in dtoa/utils.h + + * runtime/InitializeThreading.cpp: + (JSC::initializeThreadingOnce): + * wtf/dtoa/cached-powers.cc: + * wtf/dtoa/utils.h: + +2011-09-03 Filip Pizlo <fpizlo@apple.com> + + ThunkGenerators does not convert positive double zero into integer zero + https://bugs.webkit.org/show_bug.cgi?id=67553 + + Reviewed by Gavin Barraclough. + + This is an 0.5% speed-up on V8 and neutral elsewhere. + + * jit/SpecializedThunkJIT.h: + (JSC::SpecializedThunkJIT::returnDouble): + +2011-09-03 Kevin Ollivier <kevino@theolliviers.com> + + [wx] Unreviewed build fix. Add wtf/dtoa directory to build. + + * wscript: + +2011-09-03 Filip Pizlo <fpizlo@apple.com> + + DFG variable predictions only work for local variables, not temporaries + https://bugs.webkit.org/show_bug.cgi?id=67554 + + Reviewed by Gavin Barraclough. + + This appears to be a slight speed-up in Kraken (0.3% but significant) + and neutral elsewhere. + + * dfg/DFGGraph.h: + (JSC::DFG::Graph::predict): + +2011-09-02 Filip Pizlo <fpizlo@apple.com> + + DFG JIT speculation failure does recovery of additions in reverse and + doesn't rebox + https://bugs.webkit.org/show_bug.cgi?id=67551 + + Reviewed by Sam Weinig. + + * dfg/DFGJITCompiler.cpp: + (JSC::DFG::JITCompiler::jumpFromSpeculativeToNonSpeculative): + +2011-09-02 Filip Pizlo <fpizlo@apple.com> + + ValueProfile does not make it safe to introspect cell values + after garbage collection + https://bugs.webkit.org/show_bug.cgi?id=67354 + + Reviewed by Gavin Barraclough. + + ValueProfile buckets are now weak references, implemented using a + light-weight weak reference mechanism that this patch also adds (the + WeakReferenceHarvester). If a cell stored in a ValueProfile bucket + is not marked, then the bucket is transformed into a Structure + pointer. If the Structure is not marked either, then it is turned + into a ClassInfo pointer. + + * JavaScriptCore.xcodeproj/project.pbxproj: + * bytecode/CodeBlock.cpp: + (JSC::CodeBlock::~CodeBlock): + (JSC::CodeBlock::visitAggregate): + (JSC::CodeBlock::visitWeakReferences): + * bytecode/CodeBlock.h: + * bytecode/ValueProfile.h: + (JSC::ValueProfile::ValueProfile): + (JSC::ValueProfile::classInfo): + (JSC::ValueProfile::numberOfInt32s): + (JSC::ValueProfile::numberOfDoubles): + (JSC::ValueProfile::numberOfCells): + (JSC::ValueProfile::numberOfArrays): + (JSC::ValueProfile::probabilityOfArray): + (JSC::ValueProfile::WeakBucket::WeakBucket): + (JSC::ValueProfile::WeakBucket::operator!): + (JSC::ValueProfile::WeakBucket::isEmpty): + (JSC::ValueProfile::WeakBucket::isClassInfo): + (JSC::ValueProfile::WeakBucket::isStructure): + (JSC::ValueProfile::WeakBucket::asStructure): + (JSC::ValueProfile::WeakBucket::asClassInfo): + (JSC::ValueProfile::WeakBucket::getClassInfo): + * heap/Heap.cpp: + (JSC::Heap::harvestWeakReferences): + (JSC::Heap::markRoots): + * heap/Heap.h: + * heap/MarkStack.cpp: + (JSC::SlotVisitor::drain): + (JSC::SlotVisitor::harvestWeakReferences): + * heap/MarkStack.h: + (JSC::MarkStack::addWeakReferenceHarvester): + (JSC::MarkStack::MarkStack): + (JSC::MarkStack::appendUnbarrieredPointer): + * heap/SlotVisitor.h: + * heap/WeakReferenceHarvester.h: Added. + (JSC::WeakReferenceHarvester::WeakReferenceHarvester): + (JSC::WeakReferenceHarvester::~WeakReferenceHarvester): + +2011-09-02 Michael Saboff <msaboff@apple.com> + + Replace local implementation of string equals() methods with UString versions + https://bugs.webkit.org/show_bug.cgi?id=67342 + + In preparation to allowing StringImpl to be backed by 8 bit + characters when appropriate, we need to eliminate or change the + usage of StringImpl::characters(). Change the uses of characters() + that are used to implement redundant equals() methods. + + Reviewed by Gavin Barraclough. + + * runtime/Identifier.cpp: + (JSC::Identifier::equal): + * runtime/Identifier.h: + (JSC::Identifier::equal): + * wtf/text/AtomicString.cpp: + (WTF::CStringTranslator::equal): Moved an optimized method to here. + (WTF::operator==): + * wtf/text/StringImpl.cpp: + (WTF::equal): + * wtf/text/StringImpl.h: + +2011-09-02 Michael Saboff <msaboff@apple.com> + + Add JSC:RegExp functional tests + https://bugs.webkit.org/show_bug.cgi?id=67339 + + Added new test driver program (testRegExp) and corresponding data file + along with build scripts changes. + + Reviewed by Gavin Barraclough. + + * JavaScriptCore.exp: + * JavaScriptCore.xcodeproj/project.pbxproj: + * testRegExp.cpp: Added. + (Options::Options): + (StopWatch::start): + (StopWatch::stop): + (StopWatch::getElapsedMS): + (RegExpTest::RegExpTest): + (GlobalObject::create): + (GlobalObject::className): + (GlobalObject::GlobalObject): + (main): + (cleanupGlobalData): + (testOneRegExp): + (scanString): + (parseRegExpLine): + (parseTestLine): + (runFromFiles): + (printUsageStatement): + (parseArguments): + (realMain): + * tests/regexp: Added. + * tests/regexp/RegExpTest.data: Added. + +2011-09-02 Michael Saboff <msaboff@apple.com> + + Add JSC:RegExp functional test data generator + https://bugs.webkit.org/show_bug.cgi?id=67519 + + Add a data generator for regular expressions. To enable, change the + #undef REGEXP_FUNC_TEST_DATA_GEN to #define. Then compile and use + regular expressions. The resulting data will be in /tmp/RegExpTestsData. + + Reviewed by Gavin Barraclough. + + * runtime/RegExp.cpp: + (JSC::regExpFlags): + (JSC::RegExpFunctionalTestCollector::clearRegExp): + (JSC::RegExpFunctionalTestCollector::get): + (JSC::RegExpFunctionalTestCollector::outputOneTest): + (JSC::RegExpFunctionalTestCollector::RegExpFunctionalTestCollector): + (JSC::RegExpFunctionalTestCollector::~RegExpFunctionalTestCollector): + (JSC::RegExpFunctionalTestCollector::outputEscapedUString): + (JSC::RegExp::~RegExp): + (JSC::RegExp::compile): + (JSC::RegExp::match): + (JSC::RegExp::matchCompareWithInterpreter): + +2011-09-02 Mark Hahnenberg <mhahnenberg@apple.com> + + Fix the broken build due to dtoa patch + https://bugs.webkit.org/show_bug.cgi?id=67534 + + Reviewed by Oliver Hunt. + + Fixing the build. + + * GNUmakefile.list.am: + * wtf/dtoa/bignum.cc: + * wtf/dtoa/fast-dtoa.cc: + * wtf/dtoa/utils.h: + +2011-09-02 Oliver Hunt <oliver@apple.com> + + Remove OldSpace classes + https://bugs.webkit.org/show_bug.cgi?id=67533 + + Reviewed by Gavin Barraclough. + + Remove the unused OldSpace classes + + * CMakeLists.txt: + * GNUmakefile.list.am: + * JavaScriptCore.gypi: + * JavaScriptCore.pro: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * heap/Heap.cpp: + (JSC::Heap::writeBarrierSlowCase): + * heap/MarkedBlock.h: + * heap/OldSpace.cpp: Removed. + * heap/OldSpace.h: Removed. + +2011-09-02 James Robinson <jamesr@chromium.org> + + Compile fix for mac build. + + * wtf/CheckedArithmetic.h: + (WTF::operator+): + (WTF::operator-): + (WTF::operator*): + +2011-08-30 Matthew Delaney <mdelaney@apple.com> + + Read out of bounds in sUnpremultiplyData_RGBA8888 / ImageBufferData::getData + https://bugs.webkit.org/show_bug.cgi?id=65352 + + Reviewed by Simon Fraser. + + New test: fast/canvas/canvas-getImageData-large-crash.html + + This patch prevents overflows from happening in getImageData, createImageData, and canvas creation + calls that specify widths and heights that end up overflowing the ints that we store those values in + as well as derived values such as area and maxX / maxY of the bounding rects involved. Overflow of integer + arithmetic is detected via the use of the new Checked type that was introduced in r94207. The change to JSC + is just to add a new helper method described below. + + * wtf/MathExtras.h: + (isWithinIntRange): Reports if a float's value is within the range expressible by an int. + +2011-09-02 Mark Hahnenberg <mhahnenberg@apple.com> + + Incorporate newer, faster dtoa library + https://bugs.webkit.org/show_bug.cgi?id=66346 + + Reviewed by Oliver Hunt. + + Added new dtoa library at http://code.google.com/p/double-conversion/. + Replaced old call to dtoa. The new library is much faster than the old one. + We still use the old dtoa for some stuff in WebCore as well as the old strtod, + but we can phase these out eventually as well. + + * GNUmakefile.list.am: + * JavaScriptCore.exp: + * JavaScriptCore.gypi: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * JavaScriptCore.vcproj/JavaScriptCore/copy-files.cmd: + * JavaScriptCore.vcproj/WTF/WTF.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * runtime/InitializeThreading.cpp: + * runtime/NumberPrototype.cpp: + (JSC::numberProtoFuncToExponential): + (JSC::numberProtoFuncToFixed): + (JSC::numberProtoFuncToPrecision): + * runtime/UString.cpp: + (JSC::UString::number): + * wtf/CMakeLists.txt: + * wtf/ThreadingPthreads.cpp: + (WTF::initializeThreading): + * wtf/ThreadingWin.cpp: + (WTF::initializeThreading): + * wtf/dtoa.cpp: + (WTF::dtoa): + * wtf/dtoa.h: + * wtf/dtoa/COPYING: Added. + * wtf/dtoa/LICENSE: Added. + * wtf/dtoa/README: Added. + * wtf/dtoa/bignum-dtoa.cc: Added. + * wtf/dtoa/bignum-dtoa.h: Added. + * wtf/dtoa/bignum.cc: Added. + * wtf/dtoa/bignum.h: Added. + (WTF::double_conversion::Bignum::Times10): + (WTF::double_conversion::Bignum::Equal): + (WTF::double_conversion::Bignum::LessEqual): + (WTF::double_conversion::Bignum::Less): + (WTF::double_conversion::Bignum::PlusEqual): + (WTF::double_conversion::Bignum::PlusLessEqual): + (WTF::double_conversion::Bignum::PlusLess): + (WTF::double_conversion::Bignum::EnsureCapacity): + (WTF::double_conversion::Bignum::BigitLength): + * wtf/dtoa/cached-powers.cc: Added. + * wtf/dtoa/cached-powers.h: Added. + * wtf/dtoa/diy-fp.cc: Added. + * wtf/dtoa/diy-fp.h: Added. + (WTF::double_conversion::DiyFp::DiyFp): + (WTF::double_conversion::DiyFp::Subtract): + (WTF::double_conversion::DiyFp::Minus): + (WTF::double_conversion::DiyFp::Times): + (WTF::double_conversion::DiyFp::Normalize): + (WTF::double_conversion::DiyFp::f): + (WTF::double_conversion::DiyFp::e): + (WTF::double_conversion::DiyFp::set_f): + (WTF::double_conversion::DiyFp::set_e): + * wtf/dtoa/double-conversion.cc: Added. + * wtf/dtoa/double-conversion.h: Added. + (WTF::double_conversion::DoubleToStringConverter::DoubleToStringConverter): + (WTF::double_conversion::StringToDoubleConverter::StringToDoubleConverter): + * wtf/dtoa/double.h: Added. + (WTF::double_conversion::double_to_uint64): + (WTF::double_conversion::uint64_to_double): + (WTF::double_conversion::Double::Double): + (WTF::double_conversion::Double::AsDiyFp): + (WTF::double_conversion::Double::AsNormalizedDiyFp): + (WTF::double_conversion::Double::AsUint64): + (WTF::double_conversion::Double::NextDouble): + (WTF::double_conversion::Double::Exponent): + (WTF::double_conversion::Double::Significand): + (WTF::double_conversion::Double::IsDenormal): + (WTF::double_conversion::Double::IsSpecial): + (WTF::double_conversion::Double::IsNan): + (WTF::double_conversion::Double::IsInfinite): + (WTF::double_conversion::Double::Sign): + (WTF::double_conversion::Double::UpperBoundary): + (WTF::double_conversion::Double::NormalizedBoundaries): + (WTF::double_conversion::Double::value): + (WTF::double_conversion::Double::SignificandSizeForOrderOfMagnitude): + (WTF::double_conversion::Double::Infinity): + (WTF::double_conversion::Double::NaN): + (WTF::double_conversion::Double::DiyFpToUint64): + * wtf/dtoa/fast-dtoa.cc: Added. + * wtf/dtoa/fast-dtoa.h: Added. + * wtf/dtoa/fixed-dtoa.cc: Added. + * wtf/dtoa/fixed-dtoa.h: Added. + * wtf/dtoa/strtod.cc: Added. + * wtf/dtoa/strtod.h: Added. + * wtf/dtoa/utils.h: Added. + (WTF::double_conversion::Max): + (WTF::double_conversion::Min): + (WTF::double_conversion::StrLength): + (WTF::double_conversion::Vector::Vector): + (WTF::double_conversion::Vector::SubVector): + (WTF::double_conversion::Vector::length): + (WTF::double_conversion::Vector::is_empty): + (WTF::double_conversion::Vector::start): + (WTF::double_conversion::Vector::operator[]): + (WTF::double_conversion::Vector::first): + (WTF::double_conversion::Vector::last): + (WTF::double_conversion::StringBuilder::StringBuilder): + (WTF::double_conversion::StringBuilder::~StringBuilder): + (WTF::double_conversion::StringBuilder::size): + (WTF::double_conversion::StringBuilder::position): + (WTF::double_conversion::StringBuilder::Reset): + (WTF::double_conversion::StringBuilder::AddCharacter): + (WTF::double_conversion::StringBuilder::AddString): + (WTF::double_conversion::StringBuilder::AddSubstring): + (WTF::double_conversion::StringBuilder::AddPadding): + (WTF::double_conversion::StringBuilder::Finalize): + (WTF::double_conversion::StringBuilder::is_finalized): + (WTF::double_conversion::BitCast): + * wtf/wtf.pri: + +2011-09-02 Filip Pizlo <fpizlo@apple.com> + + DFG graph has no way of distinguishing or reconciling between static + and dynamic predictions + https://bugs.webkit.org/show_bug.cgi?id=67343 + + Reviewed by Gavin Barraclough. + + PredictedType now stores the source of the prediction. Merging predictions, + which was previously done with a bitwise or, is now done via the + mergePredictions (equivalent to |) and mergePrediction (equivalent to |=) + functions, which correctly handle combinations of static and dynamic. + + This is performance-neutral, since all predictions are currently static and + so the code has no visible effects. + + * dfg/DFGByteCodeParser.cpp: + (JSC::DFG::ByteCodeParser::set): + (JSC::DFG::ByteCodeParser::staticallyPredictArray): + (JSC::DFG::ByteCodeParser::staticallyPredictInt32): + (JSC::DFG::ByteCodeParser::parseBlock): + * dfg/DFGGraph.h: + (JSC::DFG::Graph::predict): + (JSC::DFG::Graph::predictGlobalVar): + * dfg/DFGNode.h: + (JSC::DFG::isArrayPrediction): + (JSC::DFG::isInt32Prediction): + (JSC::DFG::isDoublePrediction): + (JSC::DFG::isDynamicPrediction): + (JSC::DFG::mergePredictions): + (JSC::DFG::mergePrediction): + (JSC::DFG::makePrediction): + (JSC::DFG::Node::predict): + +2011-09-02 Oliver Hunt <oliver@apple.com> + + Fix 32bit build. + + * heap/NewSpace.h: + (JSC::NewSpace::allocatePropertyStorage): + (JSC::NewSpace::inPropertyStorageNursery): + +2011-09-02 Oliver Hunt <oliver@apple.com> + + Use bump allocator for initial property storage + https://bugs.webkit.org/show_bug.cgi?id=67494 + + Reviewed by Gavin Barraclough. + + Switch to a bump allocator for the initial out of line + property storage. This gives us slightly faster allocation + for short lived objects that need out of line storage at + the cost of an additional memcpy when the object survives + a GC pass. + + No performance impact. + + * JavaScriptCore.exp: + * heap/Heap.cpp: + (JSC::Heap::collect): + * heap/Heap.h: + (JSC::Heap::allocatePropertyStorage): + (JSC::Heap::inPropertyStorageNursary): + * heap/NewSpace.cpp: + (JSC::NewSpace::NewSpace): + * heap/NewSpace.h: + (JSC::NewSpace::resetPropertyStorageNursary): + (JSC::NewSpace::allocatePropertyStorage): + (JSC::NewSpace::inPropertyStorageNursary): + * jit/JITStubs.cpp: + (JSC::DEFINE_STUB_FUNCTION): + * runtime/JSObject.cpp: + (JSC::JSObject::allocatePropertyStorage): + * runtime/JSObject.h: + (JSC::JSObject::~JSObject): + (JSC::JSObject::putDirectInternal): + (JSC::JSObject::putDirectWithoutTransition): + (JSC::JSObject::putDirectFunctionWithoutTransition): + (JSC::JSObject::transitionTo): + (JSC::JSObject::visitChildrenDirect): + +2011-09-01 Mark Rowe <mrowe@apple.com> + + Fix the build. + + * JavaScriptCore.JSVALUE32_64only.exp: + * JavaScriptCore.JSVALUE64only.exp: + * JavaScriptCore.exp: + +2011-09-01 Mark Hahnenberg <mhahnenberg@apple.com> + + Unzip initialization lists and constructors in JSCell hierarchy (4/7) + https://bugs.webkit.org/show_bug.cgi?id=67174 + + Reviewed by Oliver Hunt. + + Completed the fourth level of the refactoring to add finishCreation() + methods to all classes within the JSCell hierarchy with non-trivial + constructor bodies. + + This primarily consists of pushing the calls to finishCreation() down + into the constructors of the subclasses of the second level of the hierarchy + as well as pulling the finishCreation() calls out into the class's corresponding + create() method if it has one. Doing both simultaneously allows us to + maintain the invariant that the finishCreation() method chain is called exactly + once during the creation of an object, since calling it any other number of + times (0, 2, or more) will cause an assertion failure. + + * API/JSCallbackConstructor.cpp: + (JSC::JSCallbackConstructor::JSCallbackConstructor): + (JSC::JSCallbackConstructor::finishCreation): + * API/JSCallbackConstructor.h: + * API/JSCallbackObject.h: + (JSC::JSCallbackObject::create): + * API/JSCallbackObjectFunctions.h: + (JSC::::JSCallbackObject): + (JSC::::finishCreation): + * JavaScriptCore.JSVALUE64only.exp: + * JavaScriptCore.exp: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * debugger/DebuggerActivation.cpp: + (JSC::DebuggerActivation::DebuggerActivation): + (JSC::DebuggerActivation::create): + * debugger/DebuggerActivation.h: + * runtime/Arguments.h: + (JSC::Arguments::create): + (JSC::Arguments::createNoParameters): + (JSC::Arguments::Arguments): + * runtime/ArrayPrototype.cpp: + (JSC::ArrayPrototype::ArrayPrototype): + (JSC::ArrayPrototype::finishCreation): + * runtime/ArrayPrototype.h: + * runtime/BooleanObject.cpp: + (JSC::BooleanObject::BooleanObject): + (JSC::BooleanObject::finishCreation): + * runtime/BooleanObject.h: + * runtime/DateInstance.cpp: + (JSC::DateInstance::DateInstance): + (JSC::DateInstance::finishCreation): + * runtime/DateInstance.h: + * runtime/ErrorInstance.cpp: + (JSC::ErrorInstance::ErrorInstance): + * runtime/ErrorInstance.h: + (JSC::ErrorInstance::create): + * runtime/ErrorPrototype.cpp: + (JSC::ErrorPrototype::ErrorPrototype): + (JSC::ErrorPrototype::finishCreation): + * runtime/ErrorPrototype.h: + * runtime/ExceptionHelpers.cpp: + (JSC::InterruptedExecutionError::InterruptedExecutionError): + (JSC::InterruptedExecutionError::create): + (JSC::TerminatedExecutionError::TerminatedExecutionError): + (JSC::TerminatedExecutionError::create): + * runtime/Executable.cpp: + (JSC::EvalExecutable::EvalExecutable): + (JSC::ProgramExecutable::ProgramExecutable): + (JSC::FunctionExecutable::FunctionExecutable): + * runtime/Executable.h: + (JSC::NativeExecutable::create): + (JSC::NativeExecutable::NativeExecutable): + (JSC::EvalExecutable::create): + (JSC::ProgramExecutable::create): + (JSC::FunctionExecutable::create): + * runtime/InternalFunction.cpp: + (JSC::InternalFunction::InternalFunction): + (JSC::InternalFunction::finishCreation): + * runtime/InternalFunction.h: + * runtime/JSActivation.cpp: + (JSC::JSActivation::JSActivation): + (JSC::JSActivation::finishCreation): + * runtime/JSActivation.h: + * runtime/JSArray.cpp: + (JSC::JSArray::JSArray): + * runtime/JSArray.h: + (JSC::JSArray::create): + * runtime/JSByteArray.cpp: + (JSC::JSByteArray::JSByteArray): + * runtime/JSByteArray.h: + (JSC::JSByteArray::create): + * runtime/JSFunction.cpp: + (JSC::JSFunction::JSFunction): + (JSC::JSFunction::finishCreation): + * runtime/JSFunction.h: + (JSC::JSFunction::create): + * runtime/JSGlobalObject.h: + (JSC::JSGlobalObject::JSGlobalObject): + (JSC::JSGlobalObject::finishCreation): + * runtime/JSNotAnObject.h: + (JSC::JSNotAnObject::JSNotAnObject): + (JSC::JSNotAnObject::create): + * runtime/JSONObject.cpp: + (JSC::JSONObject::JSONObject): + (JSC::JSONObject::finishCreation): + * runtime/JSONObject.h: + * runtime/JSObjectWithGlobalObject.cpp: + (JSC::JSObjectWithGlobalObject::JSObjectWithGlobalObject): + * runtime/JSObjectWithGlobalObject.h: + * runtime/JSStaticScopeObject.h: + (JSC::JSStaticScopeObject::create): + (JSC::JSStaticScopeObject::finishCreation): + (JSC::JSStaticScopeObject::JSStaticScopeObject): + * runtime/JSVariableObject.h: + (JSC::JSVariableObject::JSVariableObject): + * runtime/JSWrapperObject.h: + (JSC::JSWrapperObject::JSWrapperObject): + * runtime/MathObject.cpp: + (JSC::MathObject::MathObject): + (JSC::MathObject::finishCreation): + * runtime/MathObject.h: + * runtime/NumberObject.cpp: + (JSC::NumberObject::NumberObject): + (JSC::NumberObject::finishCreation): + * runtime/NumberObject.h: + * runtime/ObjectPrototype.cpp: + (JSC::ObjectPrototype::ObjectPrototype): + * runtime/ObjectPrototype.h: + (JSC::ObjectPrototype::create): + * runtime/RegExpConstructor.cpp: + (JSC::RegExpMatchesArray::RegExpMatchesArray): + (JSC::RegExpMatchesArray::finishCreation): + * runtime/RegExpMatchesArray.h: + * runtime/RegExpObject.cpp: + (JSC::RegExpObject::RegExpObject): + (JSC::RegExpObject::finishCreation): + * runtime/RegExpObject.h: + * runtime/StrictEvalActivation.cpp: + (JSC::StrictEvalActivation::StrictEvalActivation): + * runtime/StrictEvalActivation.h: + (JSC::StrictEvalActivation::create): + * runtime/StringObject.cpp: + (JSC::StringObject::StringObject): + (JSC::StringObject::finishCreation): + * runtime/StringObject.h: + +2011-09-01 Daniel Bates <dbates@rim.com> + + QNX GCC distribution doesn't support vasprintf() + https://bugs.webkit.org/show_bug.cgi?id=67423 + + Reviewed by Antonio Gomes. + + * wtf/Platform.h: Don't enable HAVE_VASPRINTF when building with GCC on QNX. + +2011-09-01 Michael Saboff <msaboff@apple.com> + + Remove simple usage of UString::characters() from JavaScriptCore + https://bugs.webkit.org/show_bug.cgi?id=67340 + + In preparation to allowing StringImpl to be backed by 8 bit + characters when appropriate, we need to eliminate or change the + usage of StringImpl::characters(). Most of the changes below + change s->characters()[0] to s[0]. + + Reviewed by Geoffrey Garen. + + * bytecompiler/BytecodeGenerator.cpp: + (JSC::keyForCharacterSwitch): + * bytecompiler/NodesCodegen.cpp: + (JSC::processClauseList): + * interpreter/Interpreter.cpp: + (JSC::Interpreter::privateExecute): + * jit/JITStubs.cpp: + (JSC::DEFINE_STUB_FUNCTION): + * runtime/Identifier.cpp: + (JSC::Identifier::addSlowCase): + * runtime/JSGlobalObjectFunctions.cpp: + (JSC::jsToNumber): + (JSC::parseFloat): + * runtime/JSString.cpp: + (JSC::JSString::substringFromRope): + * runtime/JSString.h: + (JSC::jsSingleCharacterSubstring): + (JSC::jsString): + (JSC::jsSubstring): + (JSC::jsOwnedString): + * runtime/RegExp.cpp: + (JSC::regExpFlags): + * wtf/text/StringBuilder.h: + (WTF::StringBuilder::operator[]): + +2011-09-01 Ada Chan <adachan@apple.com> + + Export fastMallocStatistics and Heap::objectTypeCounts for https://bugs.webkit.org/show_bug.cgi?id=67160. + + Reviewed by Darin Adler. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + +2011-09-01 Hao Zheng <zhenghao@chromium.org> + + Define PTHREAD_KEYS_MAX to fix Android port build. + https://bugs.webkit.org/show_bug.cgi?id=67362 + + Reviewed by Adam Barth. + + PTHREAD_KEYS_MAX is not defined in bionic, so explicitly define it. + + * wtf/ThreadIdentifierDataPthreads.cpp: + +2011-08-31 Oliver Hunt <oliver@apple.com> + + Fix build. + + * wtf/CheckedArithmetic.h: + (WTF::Checked::Checked): + (WTF::Checked::operator=): + +2011-08-31 Oliver Hunt <oliver@apple.com> + + fast/regex/overflow.html asserts in debug builds + https://bugs.webkit.org/show_bug.cgi?id=67326 + + Reviewed by Gavin Barraclough. + + The deliberate overflows in these expressions don't interact nicely + with Checked<32bit-type> so we just bump up to Checked<int64_t> for the + intermediate calculations. + + * yarr/YarrJIT.cpp: + (JSC::Yarr::YarrGenerator::generatePatternCharacterFixed): + (JSC::Yarr::YarrGenerator::generateCharacterClassFixed): + +2011-08-31 Jeff Miller <jeffm@apple.com> + + REGRESSION(92210): AVFoundation media engine is disabled on OS X + https://bugs.webkit.org/show_bug.cgi?id=67316 + + Move the definition of WTF_USE_AVFOUNDATION on the Mac back to JavaScriptCore/wtf/Platform.h, + since WebKit2 doesn't have access to WebCore/config.h on this platform. This reverts the + changes that were made in r92210. + + Reviewed by Darin Adler. + + * wtf/Platform.h: Added definition of WTF_USE_AVFOUNDATION on the Mac. + +2011-08-31 Peter Beverloo <peter@chromium.org> + + Add Android's platform specification and the right atomic functions. + https://bugs.webkit.org/show_bug.cgi?id=66687 + + Reviewed by Adam Barth. + + * wtf/Atomics.h: + (WTF::atomicIncrement): + (WTF::atomicDecrement): + * wtf/Platform.h: + +2011-08-30 Oliver Hunt <oliver@apple.com> + + Add support for checked arithmetic + https://bugs.webkit.org/show_bug.cgi?id=67095 + + Reviewed by Sam Weinig. + + Add a checked arithmetic class Checked<T> that provides overflow-safe + arithmetic over all integral types. Checked<T> supports addition, subtraction + and multiplication, along with "bool" conversions and equality operators. + + Checked<> can be used in either CRASH() on overflow or delayed failure modes, + although the default is to CRASH(). + + To ensure the code is actually in use (rather than checking in dead code) I've + made a couple of properties in YARR use Checked<int> and Checked<unsigned> + instead of raw value arithmetic. This has resulted in a moderate set of changes, + to YARR - mostly adding .get() calls, but a couple of casts from unsigned long + to unsigned for some uses of sizeof, as Checked<> currently does not support + mixed signed-ness of types wider that 32 bits. + + Happily the increased type safety of Checked<> means that it's not possible to + accidentally assign away precision, nor accidentally call integer overload of + a function instead of the bool version. + + No measurable regression in performance, and SunSpider claims this patch to be + a progression of 0.3%. + + * GNUmakefile.list.am: + * JavaScriptCore.gypi: + * JavaScriptCore.vcproj/WTF/WTF.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * wtf/CheckedArithmetic.h: Added. + (WTF::CrashOnOverflow::overflowed): + (WTF::CrashOnOverflow::clearOverflow): + (WTF::CrashOnOverflow::hasOverflowed): + (WTF::RecordOverflow::RecordOverflow): + (WTF::RecordOverflow::overflowed): + (WTF::RecordOverflow::clearOverflow): + (WTF::RecordOverflow::hasOverflowed): + (WTF::isInBounds): + (WTF::safeAdd): + (WTF::safeSub): + (WTF::safeMultiply): + (WTF::safeEquals): + (WTF::workAroundClangBug): + (WTF::Checked::Checked): + (WTF::Checked::operator=): + (WTF::Checked::operator++): + (WTF::Checked::operator--): + (WTF::Checked::operator!): + (WTF::Checked::operator UnspecifiedBoolType*): + (WTF::Checked::get): + (WTF::Checked::operator+=): + (WTF::Checked::operator-=): + (WTF::Checked::operator*=): + (WTF::Checked::operator==): + (WTF::Checked::operator!=): + (WTF::operator+): + (WTF::operator-): + (WTF::operator*): + * yarr/YarrInterpreter.cpp: + (JSC::Yarr::ByteCompiler::atomPatternCharacter): + (JSC::Yarr::ByteCompiler::atomCharacterClass): + (JSC::Yarr::ByteCompiler::atomBackReference): + (JSC::Yarr::ByteCompiler::atomParentheticalAssertionEnd): + (JSC::Yarr::ByteCompiler::atomParenthesesSubpatternEnd): + (JSC::Yarr::ByteCompiler::atomParenthesesOnceEnd): + (JSC::Yarr::ByteCompiler::atomParenthesesTerminalEnd): + * yarr/YarrInterpreter.h: + (JSC::Yarr::ByteTerm::ByteTerm): + (JSC::Yarr::ByteTerm::CheckInput): + (JSC::Yarr::ByteTerm::UncheckInput): + * yarr/YarrJIT.cpp: + (JSC::Yarr::YarrGenerator::generateAssertionEOL): + (JSC::Yarr::YarrGenerator::generatePatternCharacterFixed): + (JSC::Yarr::YarrGenerator::generatePatternCharacterGreedy): + (JSC::Yarr::YarrGenerator::backtrackPatternCharacterNonGreedy): + (JSC::Yarr::YarrGenerator::generateCharacterClassOnce): + (JSC::Yarr::YarrGenerator::generateCharacterClassFixed): + (JSC::Yarr::YarrGenerator::generateCharacterClassGreedy): + (JSC::Yarr::YarrGenerator::backtrackCharacterClassNonGreedy): + * yarr/YarrPattern.cpp: + (JSC::Yarr::YarrPatternConstructor::setupAlternativeOffsets): + * yarr/YarrPattern.h: + +2011-08-31 Andrei Popescu <andreip@google.com> + + Investigate current uses of OS(ANDROID) + https://bugs.webkit.org/show_bug.cgi?id=66761 + + Unreviewed, build fix for ARM platforms. + + * wtf/Platform.h: + +2011-08-31 Andrei Popescu <andreip@google.com> + + Investigate current uses of OS(ANDROID) + https://bugs.webkit.org/show_bug.cgi?id=66761 + + Reviewed by Darin Adler. + + Remove the last legacy Android code. + + No new tests needed as the code wasn't tested in the first place. + + * wtf/Atomics.h: + * wtf/Platform.h: + * wtf/ThreadingPthreads.cpp: + (WTF::createThreadInternal): + +2011-08-30 Aaron Colwell <acolwell@chromium.org> + + Add MediaSource API to HTMLMediaElement + https://bugs.webkit.org/show_bug.cgi?id=64731 + + Reviewed by Eric Carlson. + + * Configurations/FeatureDefines.xcconfig: + +2011-08-30 Oliver Hunt <oliver@apple.com> + + TypedArrays don't ensure that denormalised values are normalised + https://bugs.webkit.org/show_bug.cgi?id=67178 + + Reviewed by Gavin Barraclough. + + Add a couple of assertions to jsNumber() to ensure that + we block signaling NaNs + + * runtime/JSValue.h: + (JSC::jsDoubleNumber): + (JSC::jsNumber): + +2011-08-30 Ademar de Souza Reis Jr. <ademar.reis@openbossa.org> + + [Qt] Do not unconditionally use pkg-config in .pro files + https://bugs.webkit.org/show_bug.cgi?id=67055 + + Reviewed by Andreas Kling. + + Original patch from Rohan McGovern <rohan.mcgovern@nokia.com> + + Using the first pkg-config in PATH is prone to errors when cross + compiling inside the Qt repository (using Qt's build-system). + + This patch protect calls for pkg-config with + !contains(QT_CONFIG, no-pkg-config). no-pkg-config is added to + QT_CONFIG by Qt's 'configure' when cross-compiling on systems + without pkg-config. + + The respective change in Qt's configure has been submited already. + + No new tests as this is just a build change. + + * wtf/wtf.pri: protect pkg-config calls + +2011-08-29 Daniel Bates <dbates@webkit.org> + + Add HAVE(VASPRINTF) macro to test for vasprintf() support + https://bugs.webkit.org/show_bug.cgi?id=67156 + + Reviewed by Darin Adler. + + Encapsulate testing of vasprintf() support in a HAVE macro + instead of hardcoding the list of supported/unsupported + compilers at the call site. + + * wtf/Platform.h: + +2011-08-29 Mark Hahnenberg <mhahnenberg@apple.com> + + Unzip initialization lists and constructors in JSCell hierarchy (3/7) + https://bugs.webkit.org/show_bug.cgi?id=67064 + + Reviewed by Darin Adler. + + Completed the third level of the refactoring to add finishCreation() + methods to all classes within the JSCell hierarchy with non-trivial + constructor bodies. + + This primarily consists of pushing the calls to finishCreation() down + into the constructors of the subclasses of the second level of the hierarchy + as well as pulling the finishCreation() calls out into the class's corresponding + create() method if it has one. Doing both simultaneously allows us to + maintain the invariant that the finishCreation() method chain is called exactly + once during the creation of an object, since calling it any other number of + times (0, 2, or more) will cause an assertion failure. + + * debugger/DebuggerActivation.cpp: + (JSC::DebuggerActivation::DebuggerActivation): + (JSC::DebuggerActivation::finishCreation): + * debugger/DebuggerActivation.h: + (JSC::DebuggerActivation::create): + * runtime/Arguments.h: + (JSC::Arguments::create): + (JSC::Arguments::createNoParameters): + (JSC::Arguments::Arguments): + (JSC::Arguments::finishCreation): + * runtime/ErrorInstance.cpp: + (JSC::ErrorInstance::ErrorInstance): + * runtime/ErrorInstance.h: + (JSC::ErrorInstance::finishCreation): + * runtime/ExceptionHelpers.cpp: + (JSC::InterruptedExecutionError::InterruptedExecutionError): + (JSC::TerminatedExecutionError::TerminatedExecutionError): + * runtime/Executable.cpp: + (JSC::EvalExecutable::EvalExecutable): + (JSC::ProgramExecutable::ProgramExecutable): + (JSC::FunctionExecutable::FunctionExecutable): + Moved the assignment of m_firstLine and m_lastLine into the + FunctionExecutable::finishCreation() method in Executable.h + * runtime/Executable.h: + (JSC::ScriptExecutable::ScriptExecutable): + (JSC::EvalExecutable::create): + (JSC::ProgramExecutable::create): + (JSC::FunctionExecutable::create): + (JSC::FunctionExecutable::finishCreation): + * runtime/JSArray.cpp: + (JSC::JSArray::JSArray): + (JSC::JSArray::finishCreation): + * runtime/JSArray.h: + * runtime/JSByteArray.cpp: + (JSC::JSByteArray::JSByteArray): + * runtime/JSByteArray.h: + (JSC::JSByteArray::finishCreation): + * runtime/JSNotAnObject.h: + (JSC::JSNotAnObject::JSNotAnObject): + * runtime/JSObject.h: + (JSC::JSNonFinalObject::JSNonFinalObject): + * runtime/JSObjectWithGlobalObject.cpp: + (JSC::JSObjectWithGlobalObject::JSObjectWithGlobalObject): + (JSC::JSObjectWithGlobalObject::finishCreation): + * runtime/JSObjectWithGlobalObject.h: + * runtime/JSVariableObject.h: + (JSC::JSVariableObject::JSVariableObject): + (JSC::JSVariableObject::finishCreation): + * runtime/JSWrapperObject.h: + (JSC::JSWrapperObject::JSWrapperObject): + * runtime/ObjectPrototype.cpp: + (JSC::ObjectPrototype::ObjectPrototype): + (JSC::ObjectPrototype::finishCreation): + * runtime/ObjectPrototype.h: + * runtime/StrictEvalActivation.cpp: + (JSC::StrictEvalActivation::StrictEvalActivation): + +2011-08-29 Andreas Kling <kling@webkit.org> + + Unreviewed build fix after r93990. + + * wtf/HashTable.h: + +2011-08-29 Andreas Kling <kling@webkit.org> + + Viewing a post on reddit.com wastes a lot of memory on event listeners. + https://bugs.webkit.org/show_bug.cgi?id=67133 + + Reviewed by Darin Adler. + + Add a minimum table size to the HashTraits, instead of having it hard coded. + The default value remains at 64, but can now be specialized. + + * runtime/StructureTransitionTable.h: + * wtf/HashTable.h: + (WTF::HashTable::shouldShrink): + (WTF::::expand): + (WTF::::checkTableConsistencyExceptSize): + * wtf/HashTraits.h: + +2011-08-28 Jonathan Liu <net147@gmail.com> + + Fix build error when compiling with MinGW-w64 by disabling JIT + on Windows 64-bit + https://bugs.webkit.org/show_bug.cgi?id=61235 + + Reviewed by Gavin Barraclough. + + The fixed mmap executable allocator for JIT on x86_64 requires + sys/mman.h which is not available on Windows. + + * wtf/Platform.h: + +2011-08-27 Filip Pizlo <fpizlo@apple.com> + + JSC::Executable is inconsistent about using weak handle finalizers + and destructors for releasing memory + https://bugs.webkit.org/show_bug.cgi?id=67072 + + Reviewed by Darin Adler. + + Moved more of the destruction of Executable state into the finalizer, + which also resulted in an opportunity to mostly combine this with + discardCode(). This also means that the finalizer is now enabled even + when the JIT is turned off. This is performance neutral on SunSpider, + V8, and Kraken. + + * runtime/Executable.cpp: + (JSC::ExecutableBase::clearCode): + (JSC::ExecutableFinalizer::finalize): + (JSC::EvalExecutable::clearCode): + (JSC::ProgramExecutable::clearCode): + (JSC::FunctionExecutable::discardCode): + (JSC::FunctionExecutable::clearCode): + * runtime/Executable.h: + (JSC::ExecutableBase::finishCreation): + +2011-08-26 Gavin Barraclough <barraclough@apple.com> + + DFG JIT - ArithMod may clobber operands. + https://bugs.webkit.org/show_bug.cgi?id=67085 + + Reviewed by Sam Weinig. + + unboxDouble must be called on a temporary. + + * dfg/DFGJITCodeGenerator.cpp: + (JSC::DFG::JITCodeGenerator::fillDouble): + * dfg/DFGJITCodeGenerator.h: + (JSC::DFG::JITCodeGenerator::boxDouble): + * dfg/DFGNonSpeculativeJIT.cpp: + (JSC::DFG::NonSpeculativeJIT::compile): + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::fillSpeculateDouble): + +2011-08-26 Mark Hahnenberg <mhahnenberg@apple.com> + + Unzip initialization lists and constructors in JSCell hierarchy (2/7) + https://bugs.webkit.org/show_bug.cgi?id=66957 + + Reviewed by Darin Adler. + + Completed the second level of the refactoring to add finishCreation() + methods to all classes within the JSCell hierarchy with non-trivial + constructor bodies. + + * runtime/Executable.h: + (JSC::ExecutableBase::ExecutableBase): + (JSC::ExecutableBase::create): + (JSC::NativeExecutable::create): + (JSC::NativeExecutable::finishCreation): + (JSC::NativeExecutable::NativeExecutable): + (JSC::ScriptExecutable::ScriptExecutable): + (JSC::ScriptExecutable::finishCreation): + * runtime/GetterSetter.h: + (JSC::GetterSetter::GetterSetter): + (JSC::GetterSetter::create): + * runtime/JSAPIValueWrapper.h: + (JSC::JSAPIValueWrapper::create): + (JSC::JSAPIValueWrapper::JSAPIValueWrapper): + * runtime/JSObject.h: + (JSC::JSNonFinalObject::JSNonFinalObject): + (JSC::JSNonFinalObject::finishCreation): + (JSC::JSFinalObject::create): + (JSC::JSFinalObject::finishCreation): + (JSC::JSFinalObject::JSFinalObject): + (JSC::JSObject::JSObject): + * runtime/JSPropertyNameIterator.cpp: + (JSC::JSPropertyNameIterator::JSPropertyNameIterator): + (JSC::JSPropertyNameIterator::create): + * runtime/JSPropertyNameIterator.h: + (JSC::JSPropertyNameIterator::create): + * runtime/RegExp.cpp: + (JSC::RegExp::RegExp): + (JSC::RegExp::createWithoutCaching): + * runtime/ScopeChain.h: + (JSC::ScopeChainNode::ScopeChainNode): + (JSC::ScopeChainNode::create): + * runtime/Structure.cpp: + (JSC::Structure::Structure): + * runtime/Structure.h: + (JSC::Structure::create): + (JSC::Structure::finishCreation): + (JSC::Structure::createStructure): + * runtime/StructureChain.cpp: + (JSC::StructureChain::StructureChain): + * runtime/StructureChain.h: + (JSC::StructureChain::create): + +2011-08-26 Filip Pizlo <fpizlo@apple.com> + + The GC does not have a facility for profiling the kinds of objects + that occupy the heap + https://bugs.webkit.org/show_bug.cgi?id=66849 + + Reviewed by Geoffrey Garen. + + Destructor calls and object scans are now optionally counted, per + vtable. When the heap is destroyed and profiling is enabled, the + counts are dumped, with care taken to print the names of classes + (modulo C++ mangling) sorted in descending commonality. + + * GNUmakefile.list.am: + * JavaScriptCore.exp: + * JavaScriptCore.pro: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * heap/Heap.cpp: + (JSC::Heap::destroy): + * heap/Heap.h: + * heap/MarkStack.cpp: + (JSC::SlotVisitor::visitChildren): + (JSC::SlotVisitor::drain): + * heap/MarkStack.h: + * heap/MarkedBlock.cpp: + (JSC::MarkedBlock::callDestructor): + * heap/MarkedBlock.h: + * heap/VTableSpectrum.cpp: Added. + (JSC::VTableSpectrum::VTableSpectrum): + (JSC::VTableSpectrum::~VTableSpectrum): + (JSC::VTableSpectrum::countVPtr): + (JSC::VTableSpectrum::count): + (JSC::VTableAndCount::VTableAndCount): + (JSC::VTableAndCount::operator<): + (JSC::VTableSpectrum::dump): + * heap/VTableSpectrum.h: Added. + * wtf/Platform.h: + +2011-08-26 Juan C. Montemayor <jmont@apple.com> + + Update topCallFrame when calling host functions in the JIT + https://bugs.webkit.org/show_bug.cgi?id=67010 + + Reviewed by Oliver Hunt. + + The topCallFrame is not being updated when a host function is + called by the JIT. This causes problems when trying to create a + stack trace (https://bugs.webkit.org/show_bug.cgi?id=66994). + + * jit/JITOpcodes.cpp: + (JSC::JIT::privateCompileCTIMachineTrampolines): + (JSC::JIT::privateCompileCTINativeCall): + +2011-08-26 Alexey Proskuryakov <ap@apple.com> + + Get rid of frame life support timer + https://bugs.webkit.org/show_bug.cgi?id=66874 + + Reviewed by Geoff Garen. + + * runtime/JSGlobalObject.h: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + globalExec() no longer needs to be virtual, its only override was in JSDOMWindowBase. + +2011-08-26 Chao-ying Fu <fu@mips.com> + + Fix MIPS patchOffsetGetByIdSlowCaseCall + https://bugs.webkit.org/show_bug.cgi?id=67046 + + Reviewed by Gavin Barraclough. + + * jit/JIT.h: + +2011-08-25 Mark Hahnenberg <mhahnenberg@apple.com> + + Fixing broken build due to unused variables in release mode + https://bugs.webkit.org/show_bug.cgi?id=67004 + + Unreviewed, release build fix. + + Fixing broken build due to unused variables in ASSERTs in release build. + + * runtime/JSObject.h: + (JSC::JSObject::finishCreation): + * runtime/JSString.h: + (JSC::RopeBuilder::finishCreation): + * runtime/ScopeChain.h: + (JSC::ScopeChainNode::finishCreation): + +2011-08-25 Mark Hahnenberg <mhahnenberg@apple.com> + + Unzip initialization lists and constructors in JSCell hierarchy (1/7) + https://bugs.webkit.org/show_bug.cgi?id=66827 + + Reviewed by Geoffrey Garen. + + Added finishCreation() methods to all immediately subclasses of JSCell with + non-empty constructors. Part of a larger refactoring to "unzip" initialization + lists and constructor bodies. Also renamed JSCell's constructorBody() method + to finishCreation(). + + * runtime/Executable.h: + (JSC::ExecutableBase::ExecutableBase): + (JSC::ExecutableBase::constructorBody): + * runtime/GetterSetter.h: + (JSC::GetterSetter::GetterSetter): + * runtime/JSAPIValueWrapper.h: + (JSC::JSAPIValueWrapper::constructorBody): + (JSC::JSAPIValueWrapper::JSAPIValueWrapper): + * runtime/JSCell.h: + (JSC::JSCell::JSCell::JSCell): + (JSC::JSCell::JSCell::constructorBody): + * runtime/JSObject.h: + (JSC::JSObject::constructorBody): + (JSC::JSObject::JSObject): + * runtime/JSPropertyNameIterator.h: + (JSC::JSPropertyNameIterator::constructorBody): + * runtime/JSString.h: + (JSC::RopeBuilder::JSString): + (JSC::RopeBuilder::constructorBody): + * runtime/RegExp.cpp: + (JSC::RegExp::RegExp): + (JSC::RegExp::constructorBody): + * runtime/RegExp.h: + * runtime/ScopeChain.h: + (JSC::ScopeChainNode::ScopeChainNode): + (JSC::ScopeChainNode::constructorBody): + * runtime/Structure.cpp: + (JSC::Structure::Structure): + * runtime/StructureChain.cpp: + (JSC::StructureChain::StructureChain): + * runtime/StructureChain.h: + (JSC::StructureChain::create): + (JSC::StructureChain::constructorBody): + +2011-08-25 Gabor Loki <loki@webkit.org> + + REGRESSION(r93755): It made 14 jsc test and ~500 layout test fail on Qt-ARM bot + https://bugs.webkit.org/show_bug.cgi?id=66956 + + Rebaseline constants for patching GetByIdSlowCaseCall on ARM. + + Reviewed by Oliver Hunt. + + * jit/JIT.h: + +2011-08-24 Juan C. Montemayor <jmont@apple.com> + + Keep track of topCallFrame for Stack traces + https://bugs.webkit.org/show_bug.cgi?id=66571 + + Reviewed by Geoffrey Garen. + + This patch adds a TopCallFrame to JSC in order to have that information + when an error is thrown to create a stack trace. The TopCallFrame is + updated throughout select points in the Interpreter and the JSC. + + * interpreter/Interpreter.cpp: + (JSC::Interpreter::unwindCallFrame): + (JSC::Interpreter::throwException): + (JSC::Interpreter::execute): + (JSC::Interpreter::executeCall): + (JSC::Interpreter::executeConstruct): + (JSC::Interpreter::privateExecute): + * interpreter/Interpreter.h: + (JSC::TopCallFrameSetter::TopCallFrameSetter): + (JSC::TopCallFrameSetter::~TopCallFrameSetter): + * jit/JIT.h: + * jit/JITInlineMethods.h: + (JSC::JIT::updateTopCallFrame): + * jit/JITStubCall.h: + (JSC::JITStubCall::call): + * jit/JITStubs.cpp: + (JSC::throwExceptionFromOpCall): + (JSC::DEFINE_STUB_FUNCTION): + (JSC::arityCheckFor): + * runtime/JSGlobalData.cpp: + (JSC::JSGlobalData::JSGlobalData): + * runtime/JSGlobalData.h: + +2011-08-24 Filip Pizlo <fpizlo@apple.com> + + ErrorInstance::create sometimes has two heap object constructions + in flight at once + https://bugs.webkit.org/show_bug.cgi?id=66845 + + Reviewed by Darin Adler. + + The fix is simple since there is already a second create() method + that takes a UString. + + * runtime/ErrorInstance.cpp: + (JSC::ErrorInstance::create): + +2011-08-24 Filip Pizlo <fpizlo@apple.com> + + There is no facility for profiling how the write barrier is used + https://bugs.webkit.org/show_bug.cgi?id=66747 + + Reviewed by Geoffrey Garen. + + Added facilities for the JIT to specify the kind of write barrier + being executed. Added code for profiling the number of each kind + of barrier encountered. + + * GNUmakefile.list.am: + * JavaScriptCore.exp: + * JavaScriptCore.pro: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * dfg/DFGJITCodeGenerator.cpp: + (JSC::DFG::JITCodeGenerator::writeBarrier): + (JSC::DFG::JITCodeGenerator::cachedPutById): + * dfg/DFGJITCodeGenerator.h: + * dfg/DFGJITCompiler.cpp: + (JSC::DFG::JITCompiler::emitCount): + * dfg/DFGJITCompiler.h: + (JSC::DFG::JITCompiler::emitCount): + * dfg/DFGNonSpeculativeJIT.cpp: + (JSC::DFG::NonSpeculativeJIT::compile): + * dfg/DFGRepatch.cpp: + (JSC::DFG::tryCachePutByID): + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::compile): + * heap/Heap.h: + (JSC::Heap::writeBarrier): + * heap/WriteBarrierSupport.cpp: Added. + (JSC::WriteBarrierCounters::initialize): + * heap/WriteBarrierSupport.h: Added. + (JSC::WriteBarrierCounters::WriteBarrierCounters): + (JSC::WriteBarrierCounters::jitCounterFor): + (JSC::WriteBarrierCounters::countWriteBarrier): + * jit/JIT.h: + * jit/JITPropertyAccess.cpp: + (JSC::JIT::emit_op_put_by_id): + (JSC::JIT::privateCompilePutByIdTransition): + (JSC::JIT::emit_op_put_scoped_var): + (JSC::JIT::emit_op_put_global_var): + (JSC::JIT::emitWriteBarrier): + * jit/JITPropertyAccess32_64.cpp: + (JSC::JIT::emit_op_put_by_val): + (JSC::JIT::emit_op_put_by_id): + (JSC::JIT::privateCompilePutByIdTransition): + (JSC::JIT::emit_op_put_scoped_var): + (JSC::JIT::emit_op_put_global_var): + (JSC::JIT::emitWriteBarrier): + * runtime/InitializeThreading.cpp: + (JSC::initializeThreadingOnce): + * runtime/WriteBarrier.h: + (JSC::WriteBarrierBase::setWithoutWriteBarrier): + +2011-08-23 Mark Hahnenberg <mhahnenberg@apple.com> + + Add checks to ensure allocation does not take place during initialization of GC-managed objects + https://bugs.webkit.org/show_bug.cgi?id=65288 + + Reviewed by Darin Adler. + + Adding the new validation functionality. In its current state, it will performs checks, + but they don't fail unless you do allocation in the arguments to the parent constructor in the + initialization list of a class. The allocateCell() method turns on the global flag disallowing any new + allocations, and the constructorBody() method in JSCell turns it off. This way, allocation is still + allowed in constructor bodies while other refactoring efforts continue. + + * runtime/JSCell.h: + (JSC::JSCell::JSCell::constructorBody): + (JSC::JSCell::JSCell::JSCell): + (JSC::JSCell::allocateCell): + * runtime/JSGlobalData.cpp: + (JSC::JSGlobalData::JSGlobalData): + * runtime/JSGlobalData.h: + (JSC::JSGlobalData::isInitializingObject): + (JSC::JSGlobalData::setInitializingObject): + * runtime/StringObjectThatMasqueradesAsUndefined.h: + (JSC::StringObjectThatMasqueradesAsUndefined::create): + +2011-08-23 Gavin Barraclough <barraclough@apple.com> + + https://bugs.webkit.org/show_bug.cgi?id=55347 + "name" and "message" enumerable on *Error.prototype + + Reviewed by Sam Weinig. + + The default value of a NativeErrorPrototype's message + property is "", not the name of the error. + + * runtime/NativeErrorConstructor.cpp: + (JSC::NativeErrorConstructor::NativeErrorConstructor): + * runtime/NativeErrorConstructor.h: + (JSC::NativeErrorConstructor::create): + (JSC::NativeErrorConstructor::constructorBody): + * runtime/NativeErrorPrototype.cpp: + (JSC::NativeErrorPrototype::NativeErrorPrototype): + (JSC::NativeErrorPrototype::constructorBody): + * runtime/NativeErrorPrototype.h: + (JSC::NativeErrorPrototype::create): + * runtime/StringPrototype.cpp: + (JSC::StringPrototype::StringPrototype): + * runtime/StringPrototype.h: + (JSC::StringPrototype::create): + +2011-08-23 Steve Block <steveblock@google.com> + + Remove last occurrences of PLATFORM(ANDROID) + https://bugs.webkit.org/show_bug.cgi?id=66763 + + Reviewed by Tony Gentilcore. + + * wtf/Platform.h: + +2011-08-23 Steve Block <steveblock@google.com> + + Remove all mention of removed Android files from build scripts + https://bugs.webkit.org/show_bug.cgi?id=66755 + + Reviewed by Tony Gentilcore. + + * JavaScriptCore.gyp/JavaScriptCore.gyp: + * JavaScriptCore.gypi: + * gyp/JavaScriptCore.gyp: + +2011-08-23 Adam Barth <abarth@webkit.org> + + Remove WebCore/editing/android and other Android-specific directories + https://bugs.webkit.org/show_bug.cgi?id=66739 + + Reviewed by Steve Block. + + Now that Android shares more code with Chromium, we don't need these + Android-specific files. + + * wtf/android: Removed. + * wtf/android/AndroidThreading.h: Removed. + * wtf/android/MainThreadAndroid.cpp: Removed. + +2011-08-23 Ilya Tikhonovsky <loislo@chromium.org> + + Unreviewed build fix for compile error on Windows for r93560. + + * runtime/SamplingCounter.h: + +2011-08-22 Filip Pizlo <fpizlo@apple.com> + + Sampling counter support is in the bytecode directory + https://bugs.webkit.org/show_bug.cgi?id=66724 + + Reviewed by Darin Adler. + + Moved SamplingCounter to a separate header in runtime/. + + * GNUmakefile.list.am: + * JavaScriptCore.pro: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * bytecode/SamplingTool.cpp: + * bytecode/SamplingTool.h: + * runtime/SamplingCounter.cpp: Added. + (JSC::AbstractSamplingCounter::dump): + * runtime/SamplingCounter.h: Added. + (JSC::AbstractSamplingCounter::count): + (JSC::AbstractSamplingCounter::addressOfCounter): + (JSC::AbstractSamplingCounter::init): + (JSC::SamplingCounter::SamplingCounter): + (JSC::GlobalSamplingCounter::name): + (JSC::DeletableSamplingCounter::DeletableSamplingCounter): + (JSC::DeletableSamplingCounter::~DeletableSamplingCounter): + +2011-08-21 Martin Robinson <mrobinson@igalia.com> + + Fix 'make dist' for WebKitGTK+. + + * GNUmakefile.list.am: Add a missing header to the sources list. + +2011-08-20 Filip Pizlo <fpizlo@apple.com> + + JavaScriptCore bytecompiler does not compute scope depth correctly + in the case of constant declarations + https://bugs.webkit.org/show_bug.cgi?id=66572 + + Reviewed by Oliver Hunt. + + Changed the handling of const to add the dynamic scope depth. + + * bytecompiler/NodesCodegen.cpp: + (JSC::ConstDeclNode::emitCodeSingle): + +2011-08-19 Daniel Bates <dbates@webkit.org> + + Only #include <signal.h> and require SA_RESTART when building with JSC_MULTIPLE_THREADS + https://bugs.webkit.org/show_bug.cgi?id=66617 + + Both <signal.h> and SA_RESTART usage are guarded behind ENABLE(JSC_MULTIPLE_THREADS). + But we cause a compile error if the platform doesn't support SA_RESTART regardless of + whether JSC_MULTIPLE_THREADS is enabled for the port. Instead, we shouldn't require + SA_RESTART support unless we are building with JSC_MULTIPLE_THREADS enabled. + + Reviewed by Antonio Gomes. + + * heap/MachineStackMarker.cpp: + +2011-08-19 Filip Pizlo <fpizlo@apple.com> + + The JSC JIT currently has no facility to profile and report + the types of values + https://bugs.webkit.org/show_bug.cgi?id=65901 + + Reviewed by Gavin Barraclough. + + Added the ability to profile the values seen at function calls (both + arguments and results) and heap loads. This is done with emphasis + on performance. A value profiling site consists of: add, and, + move, and store; no branching is necessary. Each value profiling + site (called a ValueProfile) has a ring buffer of 8 recently-seen + values. ValueProfiles are stored in the CodeBlock; there will be + one for each argument (excluding this) and each heap load or callsite. + Each time a value profiling site executes, it stores the value into + a pseudo-random element in the ValueProfile buffer. The point is + that for frequently executed code, we will have 8 somewhat recent + values in the buffer and will be able to not only figure out what + type it is, but also to be able to reason about the actual values + if we wish to do so. + + This feature is currently disabled by default. When enabled, it + results in a 3.7% slow-down on SunSpider. + + * JavaScriptCore.xcodeproj/project.pbxproj: + * bytecode/CodeBlock.cpp: + (JSC::CodeBlock::~CodeBlock): + * bytecode/CodeBlock.h: + (JSC::CodeBlock::addValueProfile): + (JSC::CodeBlock::numberOfValueProfiles): + (JSC::CodeBlock::valueProfile): + (JSC::CodeBlock::valueProfileForBytecodeOffset): + * bytecode/ValueProfile.h: Added. + (JSC::ValueProfile::ValueProfile): + (JSC::ValueProfile::numberOfSamples): + (JSC::ValueProfile::computeProbability): + (JSC::ValueProfile::numberOfInt32s): + (JSC::ValueProfile::numberOfDoubles): + (JSC::ValueProfile::numberOfCells): + (JSC::ValueProfile::probabilityOfInt32): + (JSC::ValueProfile::probabilityOfDouble): + (JSC::ValueProfile::probabilityOfCell): + (JSC::getValueProfileBytecodeOffset): + * jit/JIT.cpp: + (JSC::JIT::privateCompileSlowCases): + (JSC::JIT::privateCompile): + * jit/JIT.h: + (JSC::JIT::emitValueProfilingSite): + * jit/JITCall.cpp: + (JSC::JIT::emit_op_call_put_result): + * jit/JITInlineMethods.h: + (JSC::JIT::emitValueProfilingSite): + * jit/JITPropertyAccess.cpp: + (JSC::JIT::emit_op_get_by_val): + (JSC::JIT::emitSlow_op_get_by_val): + (JSC::JIT::emit_op_method_check): + (JSC::JIT::emit_op_get_by_id): + (JSC::JIT::emitSlow_op_get_by_id): + * jit/JSInterfaceJIT.h: + * wtf/Platform.h: + * wtf/StdLibExtras.h: + (WTF::binarySearch): + (WTF::genericBinarySearch): + +2011-08-19 Daniel Bates <dbates@webkit.org> + + Don't include DisallowCType.h when building on QNX + https://bugs.webkit.org/show_bug.cgi?id=66616 + + Reviewed by Antonio Gomes. + + * config.h: + +2011-08-19 Daniel Bates <dbates@webkit.org> + + Implement ExecutableAllocator::cacheFlush() for QNX + https://bugs.webkit.org/show_bug.cgi?id=66611 + + Reviewed by Antonio Gomes. + + * jit/ExecutableAllocator.h: + (JSC::ExecutableAllocator::cacheFlush): + +2011-08-19 Daniel Bates <dbates@webkit.org> + + Implement WTF::atomic{Increment, Decrement}() for QNX + https://bugs.webkit.org/show_bug.cgi?id=66605 + + Reviewed by Darin Adler. + + * wtf/Atomics.h: + (WTF::atomicIncrement): + (WTF::atomicDecrement): + +2011-08-19 Beth Dakin <bdakin@apple.com> + + https://bugs.webkit.org/show_bug.cgi?id=66590 + Re-name scrollbar painter types + + Reviewed by Sam Weinig. + + WTF_USE_WK_SCROLLBAR_PAINTER is now WTF_USE_SCROLLBAR_PAINTER since WK no longer + applies. + * wtf/Platform.h: + +2011-08-18 Mark Hahnenberg <mhahnenberg@apple.com> + + Move allocation in constructors into separate constructorBody() methods + https://bugs.webkit.org/show_bug.cgi?id=66265 + + Reviewed by Oliver Hunt. + + Refactoring to put all allocations that need to be done after the object's + initialization list has executed but before the object is ready for use + into a separate constructorBody() method. This method is still called by the constructor, + so the patch doesn't resolve any potential issues, it's just to set up the code for further refactoring. + + * JavaScriptCore.exp: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * jsc.cpp: + (GlobalObject::constructorBody): + (GlobalObject::GlobalObject): + * runtime/ErrorInstance.cpp: + (JSC::ErrorInstance::ErrorInstance): + * runtime/ErrorInstance.h: + (JSC::ErrorInstance::constructorBody): + * runtime/ErrorPrototype.cpp: + (JSC::ErrorPrototype::ErrorPrototype): + (JSC::ErrorPrototype::constructorBody): + * runtime/ErrorPrototype.h: + * runtime/Executable.cpp: + (JSC::FunctionExecutable::FunctionExecutable): + * runtime/Executable.h: + (JSC::FunctionExecutable::constructorBody): + * runtime/InternalFunction.cpp: + (JSC::InternalFunction::InternalFunction): + * runtime/InternalFunction.h: + (JSC::InternalFunction::constructorBody): + * runtime/JSByteArray.cpp: + (JSC::JSByteArray::JSByteArray): + * runtime/JSByteArray.h: + (JSC::JSByteArray::constructorBody): + * runtime/JSFunction.cpp: + (JSC::JSFunction::JSFunction): + (JSC::JSFunction::constructorBody): + * runtime/JSFunction.h: + * runtime/JSGlobalObject.h: + (JSC::JSGlobalObject::JSGlobalObject): + (JSC::JSGlobalObject::constructorBody): + * runtime/JSPropertyNameIterator.cpp: + (JSC::JSPropertyNameIterator::JSPropertyNameIterator): + * runtime/JSPropertyNameIterator.h: + (JSC::JSPropertyNameIterator::constructorBody): + * runtime/JSString.h: + (JSC::RopeBuilder::JSString): + (JSC::RopeBuilder::constructorBody): + * runtime/NativeErrorConstructor.cpp: + (JSC::NativeErrorConstructor::NativeErrorConstructor): + * runtime/NativeErrorConstructor.h: + (JSC::NativeErrorConstructor::constructorBody): + * runtime/NativeErrorPrototype.cpp: + (JSC::NativeErrorPrototype::NativeErrorPrototype): + (JSC::NativeErrorPrototype::constructorBody): + * runtime/NativeErrorPrototype.h: + * runtime/StringObject.cpp: + * runtime/StringObject.h: + (JSC::StringObject::create): + * runtime/StringObjectThatMasqueradesAsUndefined.h: + (JSC::StringObjectThatMasqueradesAsUndefined::create): + (JSC::StringObjectThatMasqueradesAsUndefined::StringObjectThatMasqueradesAsUndefined): + * runtime/StringPrototype.cpp: + (JSC::StringPrototype::StringPrototype): + * runtime/StringPrototype.h: + (JSC::StringPrototype::create): + +2011-08-10 Filip Pizlo <fpizlo@apple.com> + + DFG non-speculative JIT does not inline the double case of ValueAdd + https://bugs.webkit.org/show_bug.cgi?id=66025 + + Reviewed by Gavin Barraclough. + + This is a 1.3% win on Kraken overall, with >=8% speed-ups on a few + benchmarks (imaging-darkroom, stanford-crypto-pbkdf2, + stanford-crypto-sha256-iterative). It looks like it might have + a speed-up in SunSpider (though not statistically significant or + particularly reproducible) and a slight slow-down in V8 (0.14%, + not statistically significant). It does slow down v8-crypto by + 1.5%. + + * dfg/DFGJITCodeGenerator.cpp: + (JSC::DFG::JITCodeGenerator::isKnownInteger): + (JSC::DFG::JITCodeGenerator::isKnownNumeric): + * dfg/DFGNonSpeculativeJIT.cpp: + (JSC::DFG::NonSpeculativeJIT::knownConstantArithOp): + (JSC::DFG::NonSpeculativeJIT::basicArithOp): + * dfg/DFGOperations.cpp: + +2011-08-18 Filip Pizlo <fpizlo@apple.com> + + [jsfunfuzz] DFG speculative JIT does divide-by-zero checks incorrectly + https://bugs.webkit.org/show_bug.cgi?id=66426 + + Reviewed by Oliver Hunt. + + Changed the branchTestPtr to branchTest32. + + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::compile): + +2011-08-17 Thouraya ANDOLSI <thouraya.andolsi@st.com> + + https://bugs.webkit.org/show_bug.cgi?id=66379 + implements load32WithCompactAddressOffsetPatch function + and fixes store32 and moveWithPatch functions for SH4 platforms. + + Reviewed by Gavin Barraclough. + + * assembler/MacroAssemblerSH4.h: + (JSC::MacroAssemblerSH4::rshift32): + (JSC::MacroAssemblerSH4::store32): + (JSC::MacroAssemblerSH4::load32WithCompactAddressOffsetPatch): + (JSC::MacroAssemblerSH4::moveWithPatch): + * assembler/SH4Assembler.h: + (JSC::SH4Assembler::movlMemRegCompact): + (JSC::SH4Assembler::readPointer): + (JSC::SH4Assembler::repatchCompact): + * jit/JIT.h: + +2011-08-17 Filip Pizlo <fpizlo@apple.com> + + JSC verbose debugging output sometimes doesn't work as expected. + https://bugs.webkit.org/show_bug.cgi?id=66107 + + Reviewed by Gavin Barraclough. + + Hardened the CodeBlock::dump() code so that it no longer crashes. Improved + the DFG verbose code so that it prints slightly more useful information. + + * assembler/LinkBuffer.h: + (JSC::LinkBuffer::debugSize): + * bytecode/CodeBlock.cpp: + (JSC::valueToSourceString): + (JSC::CodeBlock::dump): + * bytecode/CodeBlock.h: + (JSC::CodeBlock::numberOfRegExps): + * dfg/DFGJITCompiler.cpp: + (JSC::DFG::JITCompiler::link): + +2011-08-16 Michael Saboff <msaboff@apple.com> + + Crash in Structure::visitChildren running iAd.js regression test suite under memory pressure + https://bugs.webkit.org/show_bug.cgi?id=66351 + + JIT::privateCompilePutByIdTransition expects that regT0 and regT1 + have the basePayload and baseTag respectively. In some cases, + we may get to this generated code with one or both of these + registers trash. One know case is that regT0 on ARM may be + trashed as regT0 (r0) is also arg0 and can be overrun with sp due + to calls to JIT::restoreReturnAddress(). This patch uses the + values on the stack. A longer term solution is to work out all + cases so that the register entry assumptions can assured. + + While fixing this, also determined that the additional stack offset + of sizeof(void*) is not needed for ARM. + + Reviewed by Gavin Barraclough. + + * jit/JITPropertyAccess32_64.cpp: + (JSC::JIT::privateCompilePutByIdTransition): + +2011-08-15 Gavin Barraclough <barraclough@apple.com> + + https://bugs.webkit.org/show_bug.cgi?id=66263 + DFG JIT does not always zero extend boolean result of DFG operations + + Reviewed by Sam Weinig. + + * dfg/DFGOperations.cpp: + * dfg/DFGOperations.h: + - Change bool return values to a 64-bit type. + +2011-08-15 Gavin Barraclough <barraclough@apple.com> + + Crash accessing static property on sealed object + https://bugs.webkit.org/show_bug.cgi?id=66242 + + Reviewed by Sam Weinig. + + * runtime/JSObject.h: + (JSC::JSObject::putDirectInternal): + - should only check isExtensible if checkReadOnly. + +2011-08-15 Sam Weinig <sam@webkit.org> + + Fix release build when building with Clang. + + Reviewed by Anders Carlsson. + + * runtime/Identifier.cpp: + (JSC::Identifier::checkCurrentIdentifierTable): + Add NO_RETURN_DUE_TO_CRASH. + +2011-08-15 Oliver Varga <Varga.Oliver@stud.u-szeged.hu> + + Reviewed by Nikolas Zimmermann. + + Speed up SVGSMILElement::findInstanceTime. + https://bugs.webkit.org/show_bug.cgi?id=61025 + + Add a new parameter to StdlibExtras.h::binarySerarch function + to also handle cases when the array does not contain the key value. + This is needed for an svg function. + + * wtf/StdLibExtras.h: + (WTF::binarySearch): + +2011-08-13 Sam Weinig <sam@webkit.org> + + Add back 0xbbadbeef to CRASH to allow for old habits + https://bugs.webkit.org/show_bug.cgi?id=66190 + + Reviewed by David Kilzer. + + * wtf/Assertions.h: + Add back the assignment to the memory address 0xbbadbeef in the CRASH + macro, as it does not cause issue in the clang static analyzer and many + people use its presence in crash reports to easily identify ASSERTs. + +2011-08-13 Sam Weinig <sam@webkit.org> + + Fix a bunch of minor bugs caught by the clang static analyzer in JavaScriptCore + https://bugs.webkit.org/show_bug.cgi?id=66182 + + Reviewed by Dan Bernstein. + + Fixes 10 warnings in JavaScriptCore and 2 in testapi. + + * API/tests/testapi.c: + (main): + Remove dead variables. + + * dfg/DFGGraph.cpp: + (JSC::DFG::Graph::dump): + Initialize hasPrinted and silence an unused warning by casting to void (Ok here + since it is debug code and I want to keep it clear that if other cases are added, + the hasPrinted flag would be needed). + + * wtf/dtoa.cpp: + (WTF::d2b): + The variable "de" in the else block is always zero, so there is no reason to + use it. + +2011-08-12 Sam Weinig <sam@webkit.org> + + Use __builtin_trap() for CRASH when building with clang + https://bugs.webkit.org/show_bug.cgi?id=66152 + + Reviewed by Anders Carlsson. + + * wtf/Assertions.h: + Add Clang specific CRASH macro that calls __builtin_trap() instead + of silly techniques to crash. This allows the static analyzer to understand + that we are intentionally crashing. As a result, we need to mark some functions + as not returning. + + Also adds a macros that annotates a function as never returning due to ASSERT or CRASH. + + * wtf/Compiler.h: + Add COMPILIER(CLANG) and fix some formatting and spelling mistakes. + + * wtf/FastMalloc.cpp: + (WTF::Internal::fastMallocMatchFailed): + Add NO_RETURN_DUE_TO_CRASH. + + * yarr/YarrParser.h: + (JSC::Yarr::Parser::CharacterClassParserDelegate::assertionWordBoundary): + (JSC::Yarr::Parser::CharacterClassParserDelegate::atomBackReference): + Add NO_RETURN_DUE_TO_ASSERT. + +2011-08-12 Filip Pizlo <fpizlo@apple.com> + + DFG JIT has inconsistent use of boxDouble and unboxDouble, + inconsistent use of assertions regarding doubles, and those + assertions are not turned on in debug builds + https://bugs.webkit.org/show_bug.cgi?id=66160 + + Reviewed by Gavin Barraclough. + + JIT assertions are now turned on in debug builds. JIT + assertions are now used for boxing and unboxing doubles, and boxing + and unboxing no longer involves code duplication. + + * dfg/DFGJITCodeGenerator.cpp: + (JSC::DFG::JITCodeGenerator::fillDouble): + * dfg/DFGJITCodeGenerator.h: + (JSC::DFG::JITCodeGenerator::boxDouble): + (JSC::DFG::JITCodeGenerator::unboxDouble): + * dfg/DFGJITCompiler.cpp: + (JSC::DFG::JITCompiler::fillNumericToDouble): + (JSC::DFG::GeneralizedRegister::moveTo): + (JSC::DFG::GeneralizedRegister::swapWith): + * dfg/DFGJITCompiler.h: + (JSC::DFG::JITCompiler::boxDouble): + (JSC::DFG::JITCompiler::unboxDouble): + * dfg/DFGNode.h: + * dfg/DFGNonSpeculativeJIT.cpp: + (JSC::DFG::NonSpeculativeJIT::knownConstantArithOp): + (JSC::DFG::NonSpeculativeJIT::compile): + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::fillSpeculateDouble): + (JSC::DFG::SpeculativeJIT::convertToDouble): + +2011-08-12 Mark Rowe <mrowe@apple.com> + + Be more forward-looking in the choice of compiler. + + Rubber-stamped by Jon Honeycutt. + + * Configurations/CompilerVersion.xcconfig: + +2011-08-12 Kalev Lember <kalevlember@gmail.com> + + [GTK] Fix non-pthreads build after r91906. + https://bugs.webkit.org/show_bug.cgi?id=66151 + + Reviewed by David Levin. + + r91906 broke the non-pthreads GTK+ build by including a header which + doesn't exist. Fix it by including DateMath.h instead of DateMap.h. + + * wtf/gtk/ThreadingGtk.cpp: + +2011-08-12 Mark Rowe <mrowe@apple.com> + + Update some configuration settings that were missed back in r92432. + + * Configurations/CompilerVersion.xcconfig: + +2011-08-12 Filip Pizlo <fpizlo@apple.com> + + REGRESSION (r91610?): Bing Maps fail to initialize (InvalidOperation: + Matrix3D.invert) + https://bugs.webkit.org/show_bug.cgi?id=66038 + + Reviewed by Gavin Barraclough. + + Simplest and lowest-impact fix for the case where the spilled format + of a DFG node differs from the register format: if the format is + converted then indicate that the spilled value is no longer valid + ("kill the spill"). + + * dfg/DFGGenerationInfo.h: + (JSC::DFG::GenerationInfo::killSpilled): + * dfg/DFGJITCodeGenerator.cpp: + (JSC::DFG::JITCodeGenerator::fillDouble): + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::fillSpeculateDouble): + +2011-08-12 Sam Weinig <sam@webkit.org> + + Move compiler specific macros to their own header + https://bugs.webkit.org/show_bug.cgi?id=66119 + + Reviewed by Anders Carlsson. + + * JavaScriptCore.gypi: + * JavaScriptCore.vcproj/WTF/WTF.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * wtf/CMakeLists.txt: + Add Compiler.h + + * wtf/AlwaysInline.h: + Move the contents of this file (which no longer was just about ALWAYS_INLINE) to + Compiler.h. We can remove this file in a later commit. + + * wtf/Compiler.h: Added. + Put all compiler specific checks and features in this file. + + * wtf/Platform.h: + Move COMPILER macro and definitions (and the odd WARN_UNUSED_RETURN compiler feature) + to Compiler.h. Include Compiler.h since it is necessary. + +2011-08-11 Filip Pizlo <fpizlo@apple.com> + + DFG JIT-specific structure stub info code offset fields are signed + 8-bit, but it is possible for the offsets to be greater than 127 + https://bugs.webkit.org/show_bug.cgi?id=66122 + + Reviewed by Gavin Barraclough. + + * bytecode/StructureStubInfo.h: + * dfg/DFGJITCodeGenerator.cpp: + (JSC::DFG::JITCodeGenerator::cachedGetById): + (JSC::DFG::JITCodeGenerator::cachedPutById): + +2011-08-11 Filip Pizlo <fpizlo@apple.com> + + DFG JIT speculation failure code sometimes picks the wrong register + as a scratch register. + https://bugs.webkit.org/show_bug.cgi?id=66104 + + Reviewed by Gavin Barraclough. + + Hardened the code with more assertions and fixed the bug. Now a + spilled register is only used for scratch if it also isn't being + used for shuffling. + + * dfg/DFGJITCompiler.cpp: + (JSC::DFG::ShuffledRegister::handleNonCyclingPermutation): + (JSC::DFG::JITCompiler::jumpFromSpeculativeToNonSpeculative): + +2011-08-11 Sheriff Bot <webkit.review.bot@gmail.com> + + Unreviewed, rolling out r92880. + http://trac.webkit.org/changeset/92880 + https://bugs.webkit.org/show_bug.cgi?id=66123 + + Breaks compile in VS2010 (Requested by jamesr_ on #webkit). + + * wtf/PassRefPtr.h: + +2011-08-11 Mark Rowe <mrowe@apple.com> + + Don't conditionalize the use of -fomit-frame-pointer on compiler version as + all of our supported compilers are now new enough to have the same, sane behavior. + + Rubber-stamped by Sam Weinig. + + * Configurations/JavaScriptCore.xcconfig: + +2011-08-11 Filip Pizlo <fpizlo@apple.com> + + DFG JIT verbose mode does not report the generated types of nodes + https://bugs.webkit.org/show_bug.cgi?id=65830 + + Reviewed by Sam Weinig. + + Added code that prints the type selected for each node's result. + + * dfg/DFGGenerationInfo.h: + (JSC::DFG::dataFormatToString): + * dfg/DFGNonSpeculativeJIT.cpp: + (JSC::DFG::NonSpeculativeJIT::compile): + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::compile): + +2011-08-11 James Robinson <jamesr@chromium.org> + + nullptr can't be used for PassRefPtr + https://bugs.webkit.org/show_bug.cgi?id=66024 + + Reviewed by Anders Carlsson. + + * wtf/PassRefPtr.h: + (WTF::PassRefPtr::PassRefPtr): + +2011-08-11 Daniel Bates <dbates@rim.com> + + Removed unused variable in StackBounds::initialize() to resolve + compiler warning when building on QNX. + https://bugs.webkit.org/show_bug.cgi?id=66072 + + Reviewed by Antonio Gomes. + + * wtf/StackBounds.cpp: + (WTF::StackBounds::initialize): + +2011-08-11 Devdatta Deshpande <pwjd73@motorola.com> + + Implementation of monotonically increasing clock on GTK + https://bugs.webkit.org/show_bug.cgi?id=62175 + + Reviewed by Martin Robinson. + + * wtf/CurrentTime.cpp: + (WTF::monotonicallyIncreasingTime): + The default implementation of monotonicallyIncreasingTime only + guarantees the result to be non-decreasing. + If the system time is changed to past then default implementation will + still fail and WebCore timers will not fire. + +2011-08-10 Geoffrey Garen <ggaren@apple.com> + + Removed some incorrect code that was dead. + + Reviewed by Oliver Hunt. + + clearSingleTransition() wasn't resetting m_data. Luckily, + no one cares, because its caller was unused. Removed both. + + * runtime/Structure.cpp: + * runtime/StructureTransitionTable.h: + (JSC::StructureTransitionTable::~StructureTransitionTable): + +2011-08-10 Filip Pizlo <fpizlo@apple.com> + + REGRESSION(r92670-r92744): WebKit crashes when opening Gmail + https://bugs.webkit.org/show_bug.cgi?id=66010 + + Reviewed by Oliver Hunt. + + Made sure that Construct calls use() on the this argument. + + * dfg/DFGJITCodeGenerator.cpp: + (JSC::DFG::JITCodeGenerator::emitCall): + +2011-08-10 Mark Hahnenberg <mhahnenberg@apple.com> + + JSC should always throw when function arg list is too long + https://bugs.webkit.org/show_bug.cgi?id=65869 + + Reviewed by Oliver Hunt. + + Changed the behavior of the interpreter and JIT to throw an exception + when too many arguments are passed rather than truncating the list. Added + a new method to create a "Too many arguments." exception used by this + new functionality. + + * interpreter/Interpreter.cpp: + (JSC::Interpreter::privateExecute): + * jit/JITStubs.cpp: + (JSC::DEFINE_STUB_FUNCTION): + * runtime/ExceptionHelpers.cpp: + (JSC::createTooManyParamsError): + * runtime/ExceptionHelpers.h: + +2011-08-10 Oliver Hunt <oliver@apple.com> + + Make GC checks more aggressive in release builds + https://bugs.webkit.org/show_bug.cgi?id=66001 + + Reviewed by Gavin Barraclough. + + * heap/HandleHeap.cpp: + (JSC::HandleHeap::visitStrongHandles): + (JSC::HandleHeap::visitWeakHandles): + (JSC::HandleHeap::finalizeWeakHandles): + (JSC::HandleHeap::writeBarrier): + (JSC::HandleHeap::isLiveNode): + (JSC::HandleHeap::isValidWeakNode): + Increase handle heap validation logic, and make some of + the crashes trigger in release builds as well as debug. + * heap/HandleHeap.h: + (JSC::HandleHeap::allocate): + (JSC::HandleHeap::makeWeak): + Ditto + * runtime/JSGlobalData.cpp: + (WTF::Recompiler::operator()): + * runtime/JSGlobalObject.cpp: + (JSC::JSGlobalObject::visitChildren): + Fix GC bugs found while testing this patch + +2011-08-10 Oliver Hunt <oliver@apple.com> + + JSEvaluteScript does not return the correct object when given JSONP data + https://bugs.webkit.org/show_bug.cgi?id=66003 + + Reviewed by Gavin Barraclough. + + Make sure we propagate the result of the function call rather than the + argument. + + * interpreter/Interpreter.cpp: + (JSC::Interpreter::execute): + +2011-08-10 Filip Pizlo <fpizlo@apple.com> + + DFG JIT heap prediction causes regressions when combined with + aggressive integer prediction + https://bugs.webkit.org/show_bug.cgi?id=65954 + + Reviewed by Gavin Barraclough. + + Disabled heap prediction, but did not remove the capability. + This improves V8 crypto performance by 20%. + + * dfg/DFGGraph.h: + (JSC::DFG::Graph::predict): + +2011-08-09 Filip Pizlo <fpizlo@apple.com> + + DFG JIT does not speculative integers as aggressively as it should + https://bugs.webkit.org/show_bug.cgi?id=65949 + + Reviewed by Gavin Barraclough. + + Added a tree walk to propagate integer predictions through arithmetic + expressions. + + This is a 71% speed-up on Kraken's imaging-gaussian-blur, which + translates to a 19% speed-up on Kraken overall. It's neutral on + other benchmarks. + + * dfg/DFGByteCodeParser.cpp: + (JSC::DFG::ByteCodeParser::predictInt32): + +2011-08-09 Filip Pizlo <fpizlo@apple.com> + + DFG JIT has no way of propagating predictions to loads and calls + https://bugs.webkit.org/show_bug.cgi?id=65883 + + Reviewed by Gavin Barraclough. + + This introduces the capability to store predictions on graph + nodes. To save space while being somewhat consistent, the + prediction is always stored in the second OpInfo slot (since + a GetById will use the first one for the identifier). This + change is a natural extension of r92593 (global variable + prediction). + + This is a 1.5% win on V8 in the arithmetic mean, and a 0.6% + win on V8 in the geometric mean. It is neutral on SunSpider + and Kraken. Interestingly, on V8 it regresses crypto by 3% + while progressing deltablue and richards by 2.6% and 4.3%, + respectively. + + * dfg/DFGByteCodeParser.cpp: + (JSC::DFG::ByteCodeParser::addToGraph): + (JSC::DFG::ByteCodeParser::addCall): + (JSC::DFG::ByteCodeParser::parseBlock): + * dfg/DFGGraph.cpp: + (JSC::DFG::Graph::dump): + * dfg/DFGGraph.h: + (JSC::DFG::Graph::predict): + (JSC::DFG::Graph::getPrediction): + * dfg/DFGNode.h: + (JSC::DFG::isCellPrediction): + (JSC::DFG::isArrayPrediction): + (JSC::DFG::isInt32Prediction): + (JSC::DFG::isDoublePrediction): + (JSC::DFG::isNumberPrediction): + (JSC::DFG::predictionToString): + (JSC::DFG::Node::Node): + (JSC::DFG::Node::hasPrediction): + (JSC::DFG::Node::getPrediction): + (JSC::DFG::Node::predict): + +2011-08-09 Filip Pizlo <fpizlo@apple.com> + + DFG JIT passes the this argument to constructors even though + it's not necessary + https://bugs.webkit.org/show_bug.cgi?id=65943 + + Reviewed by Gavin Barraclough. + + * dfg/DFGJITCodeGenerator.cpp: + (JSC::DFG::JITCodeGenerator::emitCall): + +2011-08-09 Chao-ying Fu <fu@mips.com> + + Fix one MIPS instruction to call JITStubThunked_##op + https://bugs.webkit.org/show_bug.cgi?id=65942 + + Reviewed by Gavin Barraclough. + + Changed "bal" to "jalr" for a possible processor mode change from + MIPS32 to MIPS16. + + * jit/JITStubs.cpp: + +2011-08-09 Filip Pizlo <fpizlo@apple.com> + + DFG JIT failure loading web site + https://bugs.webkit.org/show_bug.cgi?id=65930 + + Reviewed by Oliver Hunt. + + Put the use() call after the fpr()/gpr() calls, since doing otherwise + breaks the register allocator. + + * dfg/DFGNonSpeculativeJIT.cpp: + (JSC::DFG::NonSpeculativeJIT::compile): + +2011-08-09 Mark Hahnenberg <mhahnenberg@apple.com> + + Add ParentClass typedef in all JSC classes + https://bugs.webkit.org/show_bug.cgi?id=65731 + + Reviewed by Oliver Hunt. + + Just added the Base typedefs in all the classes that are a subclass of JSCell + to point at their parent classes. This is a change to support future changes to the way + constructors and destructors are implemented in JS objects, among other things. + + * API/JSCallbackConstructor.h: + * API/JSCallbackFunction.h: + * API/JSCallbackObject.h: + (JSC::JSCallbackObject::createStructure): + (JSC::JSCallbackObject::visitChildren): + * API/JSCallbackObjectFunctions.h: + (JSC::::asCallbackObject): + (JSC::::JSCallbackObject): + (JSC::::init): + (JSC::::className): + (JSC::::getOwnPropertySlot): + (JSC::::getOwnPropertyDescriptor): + (JSC::::put): + (JSC::::deleteProperty): + (JSC::::getConstructData): + (JSC::::construct): + (JSC::::hasInstance): + (JSC::::getCallData): + (JSC::::call): + (JSC::::getOwnPropertyNames): + (JSC::::toNumber): + (JSC::::toString): + (JSC::::setPrivate): + (JSC::::getPrivate): + (JSC::::inherits): + (JSC::::getStaticValue): + (JSC::::staticFunctionGetter): + (JSC::::callbackGetter): + * debugger/DebuggerActivation.h: + * jsc.cpp: + * runtime/Arguments.h: + * runtime/ArrayConstructor.h: + * runtime/ArrayPrototype.h: + * runtime/BooleanConstructor.h: + * runtime/BooleanObject.h: + * runtime/BooleanPrototype.h: + * runtime/DateConstructor.h: + * runtime/DateInstance.h: + * runtime/DatePrototype.h: + * runtime/Error.cpp: + * runtime/ErrorConstructor.h: + * runtime/ErrorInstance.h: + * runtime/ErrorPrototype.h: + * runtime/ExceptionHelpers.cpp: + * runtime/Executable.h: + * runtime/FunctionConstructor.h: + * runtime/FunctionPrototype.h: + * runtime/GetterSetter.h: + * runtime/InternalFunction.h: + * runtime/JSAPIValueWrapper.h: + * runtime/JSActivation.h: + * runtime/JSArray.h: + * runtime/JSFunction.h: + * runtime/JSGlobalObject.h: + * runtime/JSNotAnObject.h: + * runtime/JSONObject.h: + * runtime/JSObject.h: + * runtime/JSPropertyNameIterator.h: + * runtime/JSStaticScopeObject.h: + * runtime/JSString.h: + * runtime/JSVariableObject.h: + * runtime/JSWrapperObject.h: + * runtime/MathObject.h: + * runtime/NativeErrorConstructor.h: + * runtime/NativeErrorPrototype.h: + * runtime/NumberConstructor.h: + * runtime/NumberObject.h: + * runtime/NumberPrototype.h: + * runtime/ObjectConstructor.h: + * runtime/ObjectPrototype.h: + * runtime/RegExp.h: + * runtime/RegExpConstructor.h: + * runtime/RegExpMatchesArray.h: + * runtime/RegExpObject.h: + (JSC::RegExpObject::create): + * runtime/RegExpPrototype.h: + * runtime/ScopeChain.h: + * runtime/StrictEvalActivation.h: + * runtime/StringConstructor.h: + * runtime/StringObject.h: + * runtime/StringObjectThatMasqueradesAsUndefined.h: + * runtime/StringPrototype.h: + * runtime/Structure.h: + * runtime/StructureChain.h: + +2011-08-08 Oliver Hunt <oliver@apple.com> + + Using mprotect to create guard pages breaks our use of madvise to release executable memory + https://bugs.webkit.org/show_bug.cgi?id=65870 + + Reviewed by Gavin Barraclough. + + Use mmap rather than mprotect to clear guard page permissions. + + * wtf/OSAllocatorPosix.cpp: + (WTF::OSAllocator::reserveAndCommit): + +2011-08-08 Oliver Hunt <oliver@apple.com> + + Non-extensibility does not prevent mutating [[Prototype]] + https://bugs.webkit.org/show_bug.cgi?id=65832 + + Reviewed by Gavin Barraclough. + + Disallow mutation of __proto__ on objects that are not extensible. + + * runtime/JSObject.cpp: + (JSC::JSObject::put): + +2011-08-08 Filip Pizlo <fpizlo@apple.com> + + DFG JIT does not track speculation decisions for global variables + https://bugs.webkit.org/show_bug.cgi?id=65825 + + Reviewed by Gavin Barraclough. + + Added the capability to track predictions for global variables, and + ensured that code can abstract over the source of prediction (local + versus global variable) wherever it is appropriate to do so. Also + cleaned up the code in SpeculativeJIT that decides how to speculate + based on recorded predictions (for example instead of using isInteger, + which makes sense for local predictions where the GetLocal would + return an integer value, we now tend to use shouldSpeculateInteger, + which checks if the value is either already an integer or should be + speculated to be an integer). + + This is an 0.8% win on SunSpider, almost entirely thanks to a 25% + win on controlflow-recursive. It's also a 4.8% win on v8-crypto. + + * dfg/DFGByteCodeParser.cpp: + (JSC::DFG::ByteCodeParser::predictArray): + (JSC::DFG::ByteCodeParser::predictInt32): + (JSC::DFG::ByteCodeParser::parseBlock): + * dfg/DFGGraph.cpp: + (JSC::DFG::Graph::dump): + * dfg/DFGGraph.h: + (JSC::DFG::Graph::predictGlobalVar): + (JSC::DFG::Graph::predict): + (JSC::DFG::Graph::getGlobalVarPrediction): + (JSC::DFG::Graph::getPrediction): + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::compile): + * dfg/DFGSpeculativeJIT.h: + (JSC::DFG::SpeculativeJIT::shouldSpeculateInteger): + (JSC::DFG::SpeculativeJIT::shouldSpeculateDouble): + +2011-08-07 Martin Robinson <mrobinson@igalia.com> + + Distribution fix for GTK+. + + * GNUmakefile.list.am: Strip removed files from the source list. + +2011-08-06 Gavin Barraclough <barraclough@apple.com> + + https://bugs.webkit.org/show_bug.cgi?id=65821 + Don't form identifiers the first time a string is used as a property name. + + Reviewed by Oliver Hunt. + + This is a 1% win on SunSpider. + + * dfg/DFGOperations.cpp: + - Use fastGetOwnProperty. + * jit/JITStubs.cpp: + (JSC::DEFINE_STUB_FUNCTION): + - Use fastGetOwnProperty. + * runtime/JSCell.h: + * runtime/JSObject.h: + (JSC::JSCell::fastGetOwnProperty): + - Fast call to get a property without creating an identifier the first time. + * runtime/PropertyMapHashTable.h: + (JSC::PropertyTable::find): + (JSC::PropertyTable::findWithString): + - Add interface to look up by either strinsg or identifiers. + * runtime/Structure.h: + (JSC::Structure::get): + - Add a get() call that takes a UString, not an Identifier. + * wtf/text/StringImpl.h: + (WTF::StringImpl::hasHash): + - Add a call to check if the has has been set (to detect the first use as a property name). + +2011-08-06 Aron Rosenberg <arosenberg@logitech.com> + + Reviewed by Benjamin Poulain. + + [Qt] Fix build with Intel compiler on Windows + https://bugs.webkit.org/show_bug.cgi?id=65088 + + Intel compiler needs .lib suffixes instead of .a + Intel compiler doesn't support nullptr + Intel compiler supports unsized arrays + + * JavaScriptCore.pri: + * jsc.cpp: + * wtf/ByteArray.h: + * wtf/NullPtr.h: + +2011-08-05 Gavin Barraclough <barraclough@apple.com> + + String replace with the empty string means string removal + https://bugs.webkit.org/show_bug.cgi?id=65799 + + Reviewed by Sam Weinig. + + Optimization for String.prototype.replace([RegExp], ""), this improves v8-regexp by ~3%. + + * runtime/StringPrototype.cpp: + (JSC::jsSpliceSubstrings): + (JSC::stringProtoFuncReplace): + +2011-08-05 Noel Gordon <noel.gordon@gmail.com> + + [Chromium] Remove JSZombie references from gyp project files. + https://bugs.webkit.org/show_bug.cgi?id=65798 + + JSC runtime/JSZombie.{cpp,h} were removed in r92046. Remove references to these + file names from the gyp projects. + + Reviewed by Darin Adler. + + * JavaScriptCore.gypi: zombies be gone. + +2011-08-05 Mark Rowe <mrowe@apple.com> + + <http://webkit.org/b/65785> ThreadRestrictionVerifier needs a mode where an object + is tied to a particular dispatch queue + + A RefCounted object can be opted in to this mode by calling setDispatchQueueForVerifier + with the dispatch queue it will be tied to. This will cause ThreadRestrictionVerifier + to ensure that all operations are performed on the given dispatch queue. + + Reviewed by Anders Carlsson. + + * wtf/RefCounted.h: + (WTF::RefCountedBase::setDispatchQueueForVerifier): + * wtf/ThreadRestrictionVerifier.h: + (WTF::ThreadRestrictionVerifier::ThreadRestrictionVerifier): + (WTF::ThreadRestrictionVerifier::~ThreadRestrictionVerifier): + (WTF::ThreadRestrictionVerifier::setDispatchQueueMode): + (WTF::ThreadRestrictionVerifier::setShared): + (WTF::ThreadRestrictionVerifier::isSafeToUse): + +2011-08-05 Oliver Hunt <oliver@apple.com> + + Inline allocation of function objects + https://bugs.webkit.org/show_bug.cgi?id=65779 + + Reviewed by Gavin Barraclough. + + Inline allocation and initilisation of function objects + in generated code. This ended up being a 60-70% improvement + in function allocation performance. This improvement shows + up as a ~2% improvement in 32bit sunspider and V8, but is a + wash on 64-bit. + + We currently don't inline the allocation of named function + expressions, as that requires being able to gc allocate a + variable object. + + * jit/JIT.cpp: + (JSC::JIT::privateCompileSlowCases): + * jit/JIT.h: + (JSC::JIT::emitStoreCell): + * jit/JITInlineMethods.h: + (JSC::JIT::emitAllocateBasicJSObject): + (JSC::JIT::emitAllocateJSFinalObject): + (JSC::JIT::emitAllocateJSFunction): + * jit/JITOpcodes.cpp: + (JSC::JIT::emit_op_new_func): + (JSC::JIT::emitSlow_op_new_func): + (JSC::JIT::emit_op_new_func_exp): + (JSC::JIT::emitSlow_op_new_func_exp): + * jit/JITOpcodes32_64.cpp: + Removed duplicate implementation of op_new_func and op_new_func_exp + * runtime/JSFunction.h: + (JSC::JSFunction::offsetOfScopeChain): + (JSC::JSFunction::offsetOfExecutable): + +2011-08-04 David Levin <levin@chromium.org> + + CStringBuffer should have thread safety checks turned on. + https://bugs.webkit.org/show_bug.cgi?id=58093 + + Reviewed by Dmitry Titov. + + * wtf/text/CString.h: + (WTF::CStringBuffer::CStringBuffer): Removed the ifdef that + turned this off for Chromium. + +2011-08-04 Mark Rowe <mrowe@apple.com> + + Future-proof Xcode configuration settings. + + * Configurations/Base.xcconfig: + * Configurations/DebugRelease.xcconfig: + * Configurations/JavaScriptCore.xcconfig: + * Configurations/Version.xcconfig: + +2011-08-04 Mark Hahnenberg <mhahnenberg@apple.com> + + Interpreter can potentially GC in the middle of initializing a structure chain + https://bugs.webkit.org/show_bug.cgi?id=65638 + + Reviewed by Oliver Hunt. + + Moved the allocation of a prototype StructureChain before the initialization of + the structure chain within the interpreter that was causing intermittent GC crashes. + + * interpreter/Interpreter.cpp: + (JSC::Interpreter::tryCachePutByID): + * wtf/Platform.h: + +2011-08-04 Filip Pizlo <fpizlo@apple.com> + + Eval handling attempts literal parsing even when the eval + string is in the cache + https://bugs.webkit.org/show_bug.cgi?id=65675 + + Reviewed by Oliver Hunt. + + This is a 25% speed-up on date-format-tofte and a 1.5% speed-up overall + in SunSpider. It's neutral on V8. + + * bytecode/EvalCodeCache.h: + (JSC::EvalCodeCache::tryGet): + (JSC::EvalCodeCache::getSlow): + (JSC::EvalCodeCache::get): + * interpreter/Interpreter.cpp: + (JSC::Interpreter::callEval): + +2011-08-03 Mark Rowe <mrowe@apple.com> + + Bring some order to FeatureDefines.xcconfig to make it easier to follow. + + Reviewed by Sam Weinig. + + * Configurations/FeatureDefines.xcconfig: + +2011-08-03 Mark Rowe <mrowe@apple.com> + + Clean up FeatureDefines.xcconfig to remove some unnecessary conditional settings + + Reviewed by Dave Kilzer. + + * Configurations/FeatureDefines.xcconfig: + +2011-08-03 Filip Pizlo <fpizlo@apple.com> + + JSC GC heap size improvement breaks build on some platforms due to + unused parameter + https://bugs.webkit.org/show_bug.cgi?id=65641 + + Reviewed by Darin Adler. + + Fix build on non-x86 platforms, by ensuring that the relevant + parameter always appears to be used even when it isn't. + + * heap/Heap.cpp: + +2011-08-03 Carlos Garcia Campos <cgarcia@igalia.com> + + [GTK] Reorganize pkg-config files + https://bugs.webkit.org/show_bug.cgi?id=65548 + + Reviewed by Martin Robinson. + + * GNUmakefile.am: + * javascriptcoregtk.pc.in: Renamed from Source/WebKit/gtk/javascriptcoregtk.pc.in. + +2011-08-01 David Levin <levin@chromium.org> + + Add asserts to RefCounted to make sure ref/deref happens on the right thread. + https://bugs.webkit.org/show_bug.cgi?id=31639 + + Reviewed by Dmitry Titov. + + * GNUmakefile.list.am: Added new files to the build. + * JavaScriptCore.gypi: Ditto. + * JavaScriptCore.vcproj/WTF/WTF.vcproj: Ditto. + * JavaScriptCore.xcodeproj/project.pbxproj: Ditto. + * jit/ExecutableAllocator.h: + (JSC::ExecutablePool::ExecutablePool): Turned off checks for this + due to not being able to figure out what was guarding it (bug 58091). + * parser/SourceProvider.h: + (JSC::SourceProvider::SourceProvider): Ditto. + * wtf/CMakeLists.txt: Added new files to the build. + * wtf/ThreadRestrictionVerifier.h: Added. + Everything is done in the header to avoid the issue with exports + that are only useful in debug but still needing to export them. + * wtf/RefCounted.h: + (WTF::RefCountedBase::ref): Added checks using the non thread safe verifier. + and filed bug 58171 about making it stricter. + (WTF::RefCountedBase::hasOneRef): Ditto. + (WTF::RefCountedBase::refCount): Ditto. + (WTF::RefCountedBase::setMutexForVerifier): Expose a way to change the checks to be based + on a mutex. This is in the header to avoid adding more exports from JavaScriptCore. + (WTF::RefCountedBase::deprecatedTurnOffVerifier): Temporary way to turn off verification. + Filed bug 58174 to remove this method. + (WTF::RefCountedBase::derefBase): + * wtf/SizeLimits.cpp: Adjusted the debug size check for RefCounted. + * wtf/text/CString.h: + (WTF::CStringBuffer::CStringBuffer): Turned off checks for this while a fix is being + done in Chromium (bug 58093). + +2011-08-02 Filip Pizlo <fpizlo@apple.com> + + JSC GC may not be able to reuse partially-free blocks after a + full collection + https://bugs.webkit.org/show_bug.cgi?id=65585 + + Reviewed by Darin Adler. + + This fixes the linked list management bug. This fix is performance + neutral on SunSpider. + + * heap/NewSpace.cpp: + (JSC::NewSpace::removeBlock): + +2011-07-30 Oliver Hunt <oliver@apple.com> + + Simplify JSFunction creation for functions written in JS + https://bugs.webkit.org/show_bug.cgi?id=65422 + + Reviewed by Gavin Barraclough. + + Remove hash lookups used to write name property and transition + function structure by caching the resultant structure and property + offset in JSGlobalObject. This doesn't impact performance, but + we can use this change to make other improvements later. + + * runtime/Executable.cpp: + (JSC::FunctionExecutable::FunctionExecutable): + * runtime/Executable.h: + (JSC::ScriptExecutable::ScriptExecutable): + (JSC::FunctionExecutable::jsName): + * runtime/JSFunction.cpp: + (JSC::JSFunction::JSFunction): + * runtime/JSGlobalObject.cpp: + (JSC::JSGlobalObject::reset): + * runtime/JSGlobalObject.h: + (JSC::JSGlobalObject::namedFunctionStructure): + (JSC::JSGlobalObject::functionNameOffset): + +2011-08-02 Filip Pizlo <fpizlo@apple.com> + + JSC GC uses dummy cells to avoid having to remember which cells + it has already destroyed + https://bugs.webkit.org/show_bug.cgi?id=65556 + + Reviewed by Oliver Hunt. + + This gets rid of dummy cells, and ensures that it's not necessary + to invoke a destructor on cells that have already been swept. In + the common case, a block knows that either all of its free cells + still need to have destructors called, or none of them do, which + minimizes the amount of branching that needs to happen per cell + when performing a sweep. + + This is performance neutral on SunSpider and V8. It is meant as + a stepping stone to simplify the implementation of more + sophisticated sweeping algorithms. + + * heap/Heap.cpp: + (JSC::CountFunctor::ClearMarks::operator()): + * heap/MarkedBlock.cpp: + (JSC::MarkedBlock::initForCellSize): + (JSC::MarkedBlock::callDestructor): + (JSC::MarkedBlock::specializedReset): + (JSC::MarkedBlock::reset): + (JSC::MarkedBlock::specializedSweep): + (JSC::MarkedBlock::sweep): + (JSC::MarkedBlock::produceFreeList): + (JSC::MarkedBlock::lazySweep): + (JSC::MarkedBlock::blessNewBlockForFastPath): + (JSC::MarkedBlock::blessNewBlockForSlowPath): + (JSC::MarkedBlock::canonicalizeBlock): + * heap/MarkedBlock.h: + (JSC::MarkedBlock::FreeCell::setNoObject): + (JSC::MarkedBlock::setDestructorState): + (JSC::MarkedBlock::destructorState): + (JSC::MarkedBlock::notifyMayHaveFreshFreeCells): + * runtime/JSCell.cpp: + * runtime/JSCell.h: + (JSC::JSCell::JSCell::JSCell): + * runtime/JSGlobalData.cpp: + (JSC::JSGlobalData::JSGlobalData): + (JSC::JSGlobalData::clearBuiltinStructures): + * runtime/JSGlobalData.h: + * runtime/Structure.h: + +2011-08-01 Michael Saboff <msaboff@apple.com> + + Virtual copying of FastMalloc allocated memory causes madvise MADV_FREE_REUSABLE errors + https://bugs.webkit.org/show_bug.cgi?id=65502 + + Reviewed by Anders Carlsson. + + With the fix of the issues causing madvise MADV_FREE_REUSABLE to fail, + added an assert to the return code of madvise to catch any regressions. + + * wtf/TCSystemAlloc.cpp: + (TCMalloc_SystemRelease): + +2011-08-02 Anders Carlsson <andersca@apple.com> + + Fix Windows build. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + +2011-08-02 Anders Carlsson <andersca@apple.com> + + Fix a Windows build error. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + +2011-08-02 Filip Pizlo <fpizlo@apple.com> + + JSC GC is far too conservative about growing the heap size, particularly + on desktop platforms + https://bugs.webkit.org/show_bug.cgi?id=65438 + + Reviewed by Oliver Hunt. + + The minimum heap size is now 16MB instead of 512KB, provided all of the + following are true: + a) ENABLE(LARGE_HEAP) is set, which currently only happens on + x86 targets, but could reasonably happen on any platform that is + known to have a decent amount of RAM. + b) JSGlobalData is initialized with HeapSize = LargeHeap, which + currently only happens when it's the JSDOMWindowBase in WebCore or + in the jsc command-line tool. + + This is a 4.1% speed-up on SunSpider. + + * JavaScriptCore.exp: + * heap/Heap.cpp: + (JSC::Heap::Heap): + (JSC::Heap::collect): + * heap/Heap.h: + * jsc.cpp: + (main): + * runtime/JSGlobalData.cpp: + (JSC::JSGlobalData::JSGlobalData): + (JSC::JSGlobalData::createContextGroup): + (JSC::JSGlobalData::create): + (JSC::JSGlobalData::createLeaked): + (JSC::JSGlobalData::sharedInstance): + * runtime/JSGlobalData.h: + * wtf/Platform.h: + +2011-08-02 Filip Pizlo <fpizlo@apple.com> + + JSC does a GC even when the heap still has free pages + https://bugs.webkit.org/show_bug.cgi?id=65445 + + Reviewed by Oliver Hunt. + + If the high watermark is not reached, then we allocate new blocks as + before. If the current watermark does reach (or exceed) the high + watermark, then we check if there is a block on the free block pool. + If there is, we simply allocation from it. If there isn't, we + invoke a collectin as before. This effectively couples the elastic + scavenging to the collector's decision function. That is, if an + application rapidly varies its heap usage (sometimes using more and + sometimes less) then the collector will not thrash as it used to. + But if heap usage drops and stays low then the scavenger thread and + the GC will eventually reach a kind of consensus: the GC will set + the watermark low because of low heap usage, and the scavenger thread + will steadily eliminate pages from the free page pool, until the size + of the free pool is below the high watermark. + + On command-line, this is neutral on SunSpider and Kraken and a 3% win + on V8. In browser, this is a 1% win on V8 and neutral on the other + two. + + * heap/Heap.cpp: + (JSC::Heap::allocateSlowCase): + (JSC::Heap::allocateBlock): + * heap/Heap.h: + +2011-08-02 Jeff Miller <jeffm@apple.com> + + Move WTF_USE_AVFOUNDATION from JavaScriptCore/wtf/platform.h to WebCore/config.h + https://bugs.webkit.org/show_bug.cgi?id=65552 + + Since this is a WebCore feature, there's no need to define it in JavaScriptCore/wtf/platform.h. + + Reviewed by Adam Roben. + + * wtf/Platform.h: Removed WTF_USE_AVFOUNDATION. + +2011-08-01 Jean-luc Brouillet <jeanluc@chromium.org> + + Removing old source files in gyp files that slow build + https://bugs.webkit.org/show_bug.cgi?id=65503 + + Reviewed by Adam Barth. + + A number of stale files are listed in the gyp files. These slow the + build on Visual Studio 2010. Removing them. + + * JavaScriptCore.gypi: + +2011-07-14 David Levin <levin@chromium.org> + + currentThread is too slow! + https://bugs.webkit.org/show_bug.cgi?id=64577 + + Reviewed by Darin Adler and Dmitry Titov. + + The problem is that currentThread results in a pthread_once call which always takes a lock. + With this change, currentThread is 10% faster than isMainThread in release mode and only + 5% slower than isMainThread in debug. + + * wtf/ThreadIdentifierDataPthreads.cpp: + (WTF::ThreadIdentifierData::initializeOnce): Remove the pthread once stuff + which is no longer needed because this is called from initializeThreading(). + (WTF::ThreadIdentifierData::identifier): Remove the initializeKeyOnce call because + intialization of the pthread key should already be done. + (WTF::ThreadIdentifierData::initialize): Ditto. + * wtf/ThreadIdentifierDataPthreads.h: + * wtf/ThreadingPthreads.cpp: + (WTF::initializeThreading): Acquire the pthread key here. + +2011-08-01 Filip Pizlo <fpizlo@apple.com> + + DFG JIT sometimes creates speculation check data structures that have + invalid information about the format of a register + https://bugs.webkit.org/show_bug.cgi?id=65490 + + Reviewed by Gavin Barraclough. + + The code now makes sure to (1) always have correct and up-to-date + information about register format at the time that a speculation + check is emitted, (2) assert that speculation data is correct + inside the speculation check implementation, and (3) avoid creating + speculation data altogether if compilation has already failed, since + at that point the format data is almost guaranteed to be bogus. + + * dfg/DFGNonSpeculativeJIT.cpp: + (JSC::DFG::EntryLocation::EntryLocation): + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculationCheck::SpeculationCheck): + (JSC::DFG::SpeculativeJIT::fillSpeculateCell): + (JSC::DFG::SpeculativeJIT::compile): + * dfg/DFGSpeculativeJIT.h: + (JSC::DFG::SpeculativeJIT::speculationCheck): + +2011-08-01 Filip Pizlo <fpizlo@apple.com> + + REGRESSION(r92092): Build fails on 64 bit + https://bugs.webkit.org/show_bug.cgi?id=65458 + + Reviewed by Oliver Hunt. + + The build was broken because some compilers were smart enough to see + an array index out of bounds due to the decision fuction for when to + go from precise size classes to imprecise size classes being broken: + it would assume that sizes in the range 97..128 belonged to a precise + size class when in fact they belonged to an imprecise one. + + In fact, the code would have run correctly, by way of a fluke, because + though the 4th precise size class (for 97..128) didn't exist, the next + array over from m_preciseSizeClasses was m_impreciseSizeClasses, and + its first entry would have been a size class that is appropriate for + allocations in the range 97..128. However, this relies on specific + ordering of fields in NewSpace, so it's still a bug. + + This fixes the bug by ensuring that allocations larger than 96 use + the imprecise size classes. + + * heap/NewSpace.h: + (JSC::NewSpace::sizeClassFor): + +2011-07-31 Gavin Barraclough <barraclough@apple.com> + + https://bugs.webkit.org/show_bug.cgi?id=64679 + Fix bugs in Array.prototype this handling. + + Unreviewed - rolling out r91290. + + Looks like the wild wild web isn't ready for this yet. + + This change broke http://slides.html5rocks.com/#landing-slide. + Interestingly, this might only be due to our lack of bind support - + it looks like this site is calling Array.prototype.slice as a part + of its bind implementation. + + * runtime/ArrayPrototype.cpp: + (JSC::arrayProtoFuncJoin): + (JSC::arrayProtoFuncConcat): + (JSC::arrayProtoFuncPop): + (JSC::arrayProtoFuncPush): + (JSC::arrayProtoFuncReverse): + (JSC::arrayProtoFuncShift): + (JSC::arrayProtoFuncSlice): + (JSC::arrayProtoFuncSort): + (JSC::arrayProtoFuncSplice): + (JSC::arrayProtoFuncUnShift): + (JSC::arrayProtoFuncFilter): + (JSC::arrayProtoFuncMap): + (JSC::arrayProtoFuncEvery): + (JSC::arrayProtoFuncForEach): + (JSC::arrayProtoFuncSome): + (JSC::arrayProtoFuncReduce): + (JSC::arrayProtoFuncReduceRight): + (JSC::arrayProtoFuncIndexOf): + (JSC::arrayProtoFuncLastIndexOf): + +2011-07-31 Filip Pizlo <fpizlo@apple.com> + + JSC GC lays out size classes under wrong assumptions about expected + object size. + https://bugs.webkit.org/show_bug.cgi?id=65437 + + Reviewed by Oliver Hunt. + + Changed the atom size - which is both the smallest allocation size and + the smallest possible stepping unit for size class spacing - from + 8 bytes to 4 pointer-size words. This is a 1% win on SunSpider. + + * heap/MarkedBlock.h: + +2011-07-31 Filip Pizlo <fpizlo@apple.com> + + DFG non-speculative JIT does not optimize PutByVal + https://bugs.webkit.org/show_bug.cgi?id=65424 + + Reviewed by Gavin Barraclough. + + Added code to emit PutByVal inline fast path. + + * dfg/DFGNonSpeculativeJIT.cpp: + (JSC::DFG::NonSpeculativeJIT::compile): + +2011-07-31 Filip Pizlo <fpizlo@apple.com> + + The JSC garbage collector returns memory to the operating system too + eagerly. + https://bugs.webkit.org/show_bug.cgi?id=65382 + + Reviewed by Oliver Hunt. + + This introduces a memory reuse model similar to the one in FastMalloc. + A periodic scavenger thread runs in the background and returns half the + free memory to the OS on each timer fire. New block allocations first + attempt to get the memory from the collector's internal pool, reverting + to OS allocation only when this pool is empty. + + * heap/Heap.cpp: + (JSC::Heap::Heap): + (JSC::Heap::~Heap): + (JSC::Heap::destroy): + (JSC::Heap::waitForRelativeTimeWhileHoldingLock): + (JSC::Heap::waitForRelativeTime): + (JSC::Heap::blockFreeingThreadStartFunc): + (JSC::Heap::blockFreeingThreadMain): + (JSC::Heap::allocateBlock): + (JSC::Heap::freeBlocks): + (JSC::Heap::releaseFreeBlocks): + * heap/Heap.h: + * heap/MarkedBlock.cpp: + (JSC::MarkedBlock::destroy): + (JSC::MarkedBlock::MarkedBlock): + (JSC::MarkedBlock::initForCellSize): + (JSC::MarkedBlock::reset): + * heap/MarkedBlock.h: + * wtf/Platform.h: + +2011-07-30 Filip Pizlo <fpizlo@apple.com> + + DFG JIT speculation failure pass sometimes forgets to emit code to + move certain registers. + https://bugs.webkit.org/show_bug.cgi?id=65421 + + Reviewed by Oliver Hunt. + + Restructured the offending loops (for gprs and fprs). It's once again + possible to use spreadsheets on docs.google.com. + + * dfg/DFGJITCompiler.cpp: + (JSC::DFG::JITCompiler::jumpFromSpeculativeToNonSpeculative): + +2011-07-30 Patrick Gansterer <paroga@webkit.org> + + Remove inclusion of MainThread.h from Threading.h + https://bugs.webkit.org/show_bug.cgi?id=65081 + + Reviewed by Darin Adler. + + Add missing and remove unneeded include statements for MainThread. + + * wtf/CryptographicallyRandomNumber.cpp: + * wtf/Threading.h: + * wtf/ThreadingPthreads.cpp: + * wtf/text/StringStatics.cpp: + +2011-07-30 Oliver Hunt <oliver@apple.com> + + Reduce the size of JSGlobalObject slightly + https://bugs.webkit.org/show_bug.cgi?id=65417 + + Reviewed by Dan Bernstein. + + Push a few members that either aren't commonly used, + or aren't frequently accessed into a separate struct. + + * runtime/JSGlobalObject.cpp: + (JSC::JSGlobalObject::init): + (JSC::JSGlobalObject::WeakMapsFinalizer::finalize): + * runtime/JSGlobalObject.h: + (JSC::JSGlobalObject::JSGlobalObjectRareData::JSGlobalObjectRareData): + (JSC::JSGlobalObject::createRareDataIfNeeded): + (JSC::JSGlobalObject::setProfileGroup): + (JSC::JSGlobalObject::profileGroup): + (JSC::JSGlobalObject::registerWeakMap): + (JSC::JSGlobalObject::deregisterWeakMap): + +2011-07-30 Balazs Kelemen <kbalazs@webkit.org> + + MessageQueue::waitForMessageFilteredWithTimeout can triggers an assertion + https://bugs.webkit.org/show_bug.cgi?id=65263 + + Reviewed by Dmitry Titov. + + * wtf/Deque.h: + (WTF::::operator): Don't check the validity of an iterator + that will be reassigned right now. + * wtf/MessageQueue.h: + (WTF::::removeIf): Revert r51198 as I beleave this is the better + solution for the problem that was solved by that. + +2011-07-29 Filip Pizlo <fpizlo@apple.com> + + JSC GC zombie support no longer works, and is likely no longer needed. + https://bugs.webkit.org/show_bug.cgi?id=65404 + + Reviewed by Darin Adler. + + This removes zombies, because they no longer work, are not tested, are + probably not needed, and are getting in the way of GC optimization + work. + + * JavaScriptCore.xcodeproj/project.pbxproj: + * heap/Handle.h: + (JSC::HandleConverter::operator->): + (JSC::HandleConverter::operator*): + * heap/HandleHeap.cpp: + (JSC::HandleHeap::isValidWeakNode): + * heap/Heap.cpp: + (JSC::Heap::destroy): + (JSC::Heap::collect): + * heap/MarkedBlock.cpp: + (JSC::MarkedBlock::sweep): + * heap/MarkedBlock.h: + (JSC::MarkedBlock::clearMarks): + * interpreter/Register.h: + (JSC::Register::Register): + (JSC::Register::operator=): + * runtime/ArgList.h: + (JSC::MarkedArgumentBuffer::append): + (JSC::ArgList::ArgList): + * runtime/JSCell.cpp: + (JSC::isZombie): + * runtime/JSCell.h: + * runtime/JSGlobalData.cpp: + (JSC::JSGlobalData::JSGlobalData): + (JSC::JSGlobalData::clearBuiltinStructures): + * runtime/JSGlobalData.h: + * runtime/JSValue.h: + * runtime/JSValueInlineMethods.h: + (JSC::JSValue::JSValue): + * runtime/JSZombie.cpp: Removed. + * runtime/JSZombie.h: Removed. + * runtime/WriteBarrier.h: + (JSC::WriteBarrierBase::setEarlyValue): + (JSC::WriteBarrierBase::operator*): + (JSC::WriteBarrierBase::setWithoutWriteBarrier): + * wtf/Platform.h: + +2011-07-29 Filip Pizlo <fpizlo@apple.com> + + DFG JIT verbose mode provides no details about predictions + https://bugs.webkit.org/show_bug.cgi?id=65389 + + Reviewed by Darin Adler. + + Added a print-out of the predictions to the IR dump, with names as follows: + "p-bottom" = the parser made no predictions + "p-int32" = the parser predicted int32 + ... (same for array, cell, double, number) + "p-top" = the parser made conflicting predictions which will be ignored. + + * dfg/DFGGraph.cpp: + (JSC::DFG::Graph::dump): + * dfg/DFGGraph.h: + (JSC::DFG::predictionToString): + +2011-07-29 Filip Pizlo <fpizlo@apple.com> + + DFG JIT does not have any way of undoing double speculation. + https://bugs.webkit.org/show_bug.cgi?id=65334 + + Reviewed by Gavin Barraclough. + + This adds code to do a branchConvertDoubleToInt on specualtion failure. + This is performance-neutral on most benchmarks but does result in + a slight improvement in Kraken. + + * dfg/DFGJITCompiler.cpp: + (JSC::DFG::GeneralizedRegister::moveTo): + (JSC::DFG::GeneralizedRegister::swapWith): + (JSC::DFG::ShuffledRegister::handleNonCyclingPermutation): + (JSC::DFG::ShuffledRegister::handleCyclingPermutation): + (JSC::DFG::JITCompiler::jumpFromSpeculativeToNonSpeculative): + +2011-07-29 Filip Pizlo <fpizlo@apple.com> + + Crash when opening docs.google.com + https://bugs.webkit.org/show_bug.cgi?id=65327 + + Reviewed by Gavin Barraclough. + + The speculative JIT was only checking whether a value is an array when + we had already checked that it was, rather then when we hadn't. + + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::compile): + +2011-07-28 Oliver Hunt <oliver@apple.com> + + *_list instructions are only used in one place, where the code is wrong. + https://bugs.webkit.org/show_bug.cgi?id=65348 + + Reviewed by Darin Adler. + + Simply remove the instructions and all users. Speeds up the interpreter + slightly due to code motion, but otherwise has no effect (because none + of the _list instructions are ever used). + + * bytecode/CodeBlock.cpp: + (JSC::isPropertyAccess): + (JSC::CodeBlock::dump): + (JSC::CodeBlock::visitStructures): + * bytecode/Instruction.h: + * bytecode/Opcode.h: + * interpreter/Interpreter.cpp: + (JSC::Interpreter::privateExecute): + * jit/JIT.cpp: + (JSC::JIT::privateCompileMainPass): + +2011-07-28 Gavin Barraclough <barraclough@apple.com> + + https://bugs.webkit.org/show_bug.cgi?id=65325 + Performance tweak to parseInt + + Reviewed by Oliver Hunt. + + * runtime/JSGlobalObjectFunctions.cpp: + (JSC::globalFuncParseInt): + - This change may an existing optimization redundant, + cleanup from Darin's comments, plus fix existing bugs. + +2011-07-28 Gavin Barraclough <barraclough@apple.com> + + https://bugs.webkit.org/show_bug.cgi?id=65325 + Performance tweak to parseInt + + Reviewed by Oliver Hunt. + + * runtime/JSGlobalObjectFunctions.cpp: + (JSC::globalFuncParseInt): + - parseInt applied to small positive numbers = floor. + +2011-07-28 Dan Bernstein <mitz@apple.com> + + Build fix. + + * runtime/Executable.cpp: + (JSC::FunctionExecutable::compileForCallInternal): + +2011-07-28 Kent Tamura <tkent@chromium.org> + + Improve StringImpl::stripWhiteSpace() and simplifyWhiteSpace(). + https://bugs.webkit.org/show_bug.cgi?id=65300 + + Reviewed by Darin Adler. + + r91837 had performance regression of StringImpl::stripWhiteSpace() + and simplifyWhiteSpace(). This changes the code so that compilers + generates code equivalent to r91836 or piror. + + * wtf/text/StringImpl.cpp: + (WTF::StringImpl::stripMatchedCharacters): + A template member function for stripWhiteSpace(). This function takes a functor. + (WTF::UCharPredicate): + A functor for generic predicate for single UChar argument. + (WTF::SpaceOrNewlinePredicate): + A special functor for isSpaceOrNewline(). + (WTF::StringImpl::stripWhiteSpace): + Use stripmatchedCharacters(). + (WTF::StringImpl::simplifyMatchedCharactersToSpace): + A template member function for simplifyWhiteSpace(). + (WTF::StringImpl::simplifyWhiteSpace): + Use simplifyMatchedCharactersToSpace(). + * wtf/text/StringImpl.h: + +2011-07-27 Dmitry Lomov <dslomov@google.com> + + [chromium] Turn on WTF_MULTIPLE_THREADS. + https://bugs.webkit.org/show_bug.cgi?id=61017 + The patch turns on WTF_MULTIPLE_THREADS in chromium and + pushes some relevant initializations from JSC::initializeThreading + to WTF::initializeThreading. + + Reviewed by David Levin. + + * runtime/InitializeThreading.cpp: + (JSC::initializeThreadingOnce): + * wtf/FastMalloc.cpp: + (WTF::isForbidden): + (WTF::fastMallocForbid): + (WTF::fastMallocAllow): + * wtf/Platform.h: + * wtf/ThreadingPthreads.cpp: + (WTF::initializeThreading): + * wtf/ThreadingWin.cpp: + (WTF::initializeThreading): + * wtf/gtk/ThreadingGtk.cpp: + (WTF::initializeThreading): + * wtf/qt/ThreadingQt.cpp: + (WTF::initializeThreading): + +2011-07-27 Mark Hahnenberg <mhahnenberg@apple.com> + + Remove operator new from JSCell + https://bugs.webkit.org/show_bug.cgi?id=64999 + + Reviewed by Oliver Hunt. + + Removed the implementation of operator new in JSCell, so any further uses + will not successfully link. Also removed any remaining uses of operator new. + + * API/JSContextRef.cpp: + * debugger/DebuggerActivation.h: + (JSC::DebuggerActivation::create): + * interpreter/Interpreter.cpp: + (JSC::Interpreter::execute): + (JSC::Interpreter::createExceptionScope): + (JSC::Interpreter::privateExecute): + * jit/JITStubs.cpp: + (JSC::DEFINE_STUB_FUNCTION): + * runtime/JSCell.h: + * runtime/JSGlobalObject.h: + (JSC::JSGlobalObject::create): + * runtime/JSStaticScopeObject.h: + (JSC::JSStaticScopeObject::create): + (JSC::JSStaticScopeObject::JSStaticScopeObject): + * runtime/StrictEvalActivation.h: + (JSC::StrictEvalActivation::create): + +2011-07-27 Filip Pizlo <fpizlo@apple.com> + + DFG graph has no notion of double prediction. + https://bugs.webkit.org/show_bug.cgi?id=65234 + + Reviewed by Gavin Barraclough. + + Added the notion of PredictDouble, and PredictNumber, which is the least + upper bound of PredictInt32 and PredictDouble. Least upper bound is + defined as the bitwise-or of two predictions. Bottom is defined as 0, + and Top is defined as all bits being set. Added the ability to explicitly + distinguish between a node having had a prediction associated with it, + and that prediction still being valid (i.e. no conflicting predictions + have also been added). Used this to guard the speculative JIT from + speculating Int32 in cases where the graph knows that the value is + double, which currently only happens for GetLocal nodes on arguments + which were double at compile-time. + + * dfg/DFGGraph.cpp: + (JSC::DFG::Graph::predictArgumentTypes): + * dfg/DFGGraph.h: + (JSC::DFG::isCellPrediction): + (JSC::DFG::isArrayPrediction): + (JSC::DFG::isInt32Prediction): + (JSC::DFG::isDoublePrediction): + (JSC::DFG::isNumberPrediction): + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::compile): + (JSC::DFG::SpeculativeJIT::checkArgumentTypes): + (JSC::DFG::SpeculativeJIT::initializeVariableTypes): + * dfg/DFGSpeculativeJIT.h: + (JSC::DFG::SpeculativeJIT::isRegisterDataFormatDouble): + +2011-07-27 Gavin Barraclough <barraclough@apple.com> + + https://bugs.webkit.org/show_bug.cgi?id=65294 + DFG JIT - may speculate based on wrong arguments. + + Reviewed by Oliver Hunt + + In the case of a DFG compiled function calling to and compiling a second function that + also compiles through the DFG JIT (i.e. compilation triggered with DFGOperations.cpp), + we call compileFor passing the caller functions exec state, rather than the callee's. + This may lead to mis-optimization, since the DFG compiler will example the exec state's + arguments on the assumption that these will be passed to the callee - it is wanting the + callee exec state, not the caller's exec state. + + Fixing this for all cases of compilation is tricksy, due to the way the numeric sort + function is compiled, & the structure of the calls in the Interpreter::execute methods. + Only fix for compilation from the JIT, in other calls don't speculate based on arguments + for now. + + * dfg/DFGOperations.cpp: + * runtime/Executable.cpp: + (JSC::tryDFGCompile): + (JSC::tryDFGCompileFunction): + (JSC::FunctionExecutable::compileForCallInternal): + * runtime/Executable.h: + (JSC::FunctionExecutable::compileForCall): + (JSC::FunctionExecutable::compileFor): + +2011-07-27 Oliver Hunt <oliver@apple.com> + + Handle callback oriented JSONP + https://bugs.webkit.org/show_bug.cgi?id=65271 + + Reviewed by Gavin Barraclough. + + Handle the callback oriented versions of JSONP. The Literal parser + now handles <Identifier> (. <Identifier>)* (jsonData). + + * interpreter/Interpreter.cpp: + (JSC::Interpreter::execute): + * runtime/LiteralParser.cpp: + (JSC::LiteralParser::tryJSONPParse): + (JSC::LiteralParser::Lexer::lex): + * runtime/LiteralParser.h: + +2011-07-27 Stephanie Lewis <slewis@apple.com> + + Revert http://trac.webkit.org/changeset/90415. + Caused a 5% sunspider regression in-browser. + + Unreviewed rollout. + + * bytecode/CodeBlock.cpp: + (JSC::CodeBlock::visitAggregate): + * heap/Heap.cpp: + (JSC::Heap::collectAllGarbage): + * heap/MarkStack.h: + (JSC::MarkStack::MarkStack): + * runtime/JSGlobalData.cpp: + (JSC::JSGlobalData::releaseExecutableMemory): + * runtime/RegExp.cpp: + (JSC::RegExp::compile): + (JSC::RegExp::invalidateCode): + * runtime/RegExp.h: + +2011-07-27 Shinya Kawanaka <shinyak@google.com> + + Added an interface to take IsWhiteSpaceFunctionPtr. + https://bugs.webkit.org/show_bug.cgi?id=57746 + + Reviewed by Kent Tamura. + + * wtf/text/StringImpl.cpp: + (WTF::StringImpl::stripWhiteSpace): + Added an interface to take IsWhiteSpaceFunctionPtr. + (WTF::StringImpl::simplifyWhiteSpace): ditto. + * wtf/text/StringImpl.h: + * wtf/text/WTFString.cpp: + (WTF::String::stripWhiteSpace): ditto. + (WTF::String::simplifyWhiteSpace): ditto. + * wtf/text/WTFString.h: + +2011-07-27 Filip Pizlo <fpizlo@apple.com> + + DFG JIT speculation failure code performs incorrect conversions in + the case where two registers need to be swapped. + https://bugs.webkit.org/show_bug.cgi?id=65233 + + Reviewed by Gavin Barraclough. + + * dfg/DFGJITCompiler.cpp: + (JSC::DFG::GeneralizedRegister::swapWith): + +2011-07-26 Mark Hahnenberg <mhahnenberg@apple.com> + + reduce and reduceRight bind callback's this to null rather than undefined + https://bugs.webkit.org/show_bug.cgi?id=62264 + + Reviewed by Oliver Hunt. + + Fixed Array.prototype.reduce and Array.prototype.reduceRight so that they behave correctly + when calling the callback function without an argument for this, which means it should + be undefined according to ES 15.4.4.21 and 15.4.4.22. + + * runtime/ArrayPrototype.cpp: + (JSC::arrayProtoFuncReduce): + (JSC::arrayProtoFuncReduceRight): + +2011-07-26 Filip Pizlo <fpizlo@apple.com> + + JSC command-line tool does not come with any facility for + measuring time precisely. + https://bugs.webkit.org/show_bug.cgi?id=65223 + + Reviewed by Gavin Barraclough. + + Exposed WTF::currentTime() as currentTimePrecise(). + + * jsc.cpp: + (GlobalObject::GlobalObject): + (functionPreciseTime): + +2011-07-26 Filip Pizlo <fpizlo@apple.com> + + DFG speculative JIT never emits inline double comparisons, even when it + would be obvious more efficient to do so. + https://bugs.webkit.org/show_bug.cgi?id=65212 + + Reviewed by Gavin Barraclough. + + This handles the obvious case of inlining double comparisons: it only addresses + the speculative JIT, and only for fused compare/branch sequences. But it does + handle the case where both operands are double (and there is no slow path), + or where one operand is double and the other is unknown type (in which case it + attempts to unbox the double, otherwise taking slow path). This is an 0.8% + speed-up on SunSpider. + + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::convertToDouble): + (JSC::DFG::SpeculativeJIT::compilePeepHoleDoubleBranch): + (JSC::DFG::SpeculativeJIT::compare): + (JSC::DFG::SpeculativeJIT::compile): + * dfg/DFGSpeculativeJIT.h: + (JSC::DFG::SpeculativeJIT::isRegisterDataFormatDouble): + (JSC::DFG::SpeculativeJIT::shouldSpeculateInteger): + +2011-07-26 Filip Pizlo <fpizlo@apple.com> + + https://bugs.webkit.org/show_bug.cgi?id=64969 + DFG JIT generates inefficient code for speculation failures. + + Reviewed by Gavin Barraclough. + + This implements a speculation failure strategy where (1) values spilled on + non-speculative but not spilled on speculative are spilled, (2) values that + are in registers on both paths are rearranged without ever touching memory, + and (3) values spilled on speculative but not spilled on non-speculative are + filled. + + The register shuffling is the most interesting part of this patch. It + constructs a permutation graph for registers. Each node represents a + register, and each directed edge corresponds to the register's value having + to be moved to a different register as part of the shuffling. This is a + directed graph where each node may only have 0 or 1 incoming edges, and + 0 or 1 outgoing edges. The algorithm then first finds maximal non-cyclic + subgraphs where all nodes in the subgraph are reachable from a start node. + Such subgraphs always resemble linked lists, and correspond to simply + moving the value in the second-to-last register into the last register, and + then moving the value in the third-to-last register into the second-to-last + register, and so on. Once these subgraphs are taken care of, the remaining + subgraphs are cycles, and are handled using either (a) conversion or no-op + if the cycle involves one node, (b) swap if it involves two nodes, or (c) + a cyclic shuffle involving a scratch register if there are three or more + nodes. + + * dfg/DFGGenerationInfo.h: + (JSC::DFG::needDataFormatConversion): + * dfg/DFGJITCompiler.cpp: + (JSC::DFG::GeneralizedRegister::GeneralizedRegister): + (JSC::DFG::GeneralizedRegister::createGPR): + (JSC::DFG::GeneralizedRegister::createFPR): + (JSC::DFG::GeneralizedRegister::dump): + (JSC::DFG::GeneralizedRegister::findInSpeculationCheck): + (JSC::DFG::GeneralizedRegister::findInEntryLocation): + (JSC::DFG::GeneralizedRegister::previousDataFormat): + (JSC::DFG::GeneralizedRegister::nextDataFormat): + (JSC::DFG::GeneralizedRegister::convert): + (JSC::DFG::GeneralizedRegister::moveTo): + (JSC::DFG::GeneralizedRegister::swapWith): + (JSC::DFG::ShuffledRegister::ShuffledRegister): + (JSC::DFG::ShuffledRegister::isEndOfNonCyclingPermutation): + (JSC::DFG::ShuffledRegister::handleNonCyclingPermutation): + (JSC::DFG::ShuffledRegister::handleCyclingPermutation): + (JSC::DFG::ShuffledRegister::lookup): + (JSC::DFG::lookupForRegister): + (JSC::DFG::NodeToRegisterMap::Tuple::Tuple): + (JSC::DFG::NodeToRegisterMap::NodeToRegisterMap): + (JSC::DFG::NodeToRegisterMap::set): + (JSC::DFG::NodeToRegisterMap::end): + (JSC::DFG::NodeToRegisterMap::find): + (JSC::DFG::NodeToRegisterMap::clear): + (JSC::DFG::JITCompiler::jumpFromSpeculativeToNonSpeculative): + (JSC::DFG::JITCompiler::linkSpeculationChecks): + * dfg/DFGJITCompiler.h: + * dfg/DFGNonSpeculativeJIT.cpp: + (JSC::DFG::EntryLocation::EntryLocation): + * dfg/DFGNonSpeculativeJIT.h: + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculationCheck::SpeculationCheck): + * dfg/DFGSpeculativeJIT.h: + +2011-07-26 Oliver Hunt <oliver@apple.com> + + Buffer overflow creating error messages for JSON.parse + https://bugs.webkit.org/show_bug.cgi?id=65211 + + Reviewed by Darin Adler. + + Parse string length to the UString constructor. + + * runtime/LiteralParser.cpp: + (JSC::LiteralParser::parse): + +2011-07-26 Mark Hahnenberg <mhahnenberg@apple.com> + + Refactor automatically generated JS DOM bindings to replace operator new with static create methods + https://bugs.webkit.org/show_bug.cgi?id=64732 + + Reviewed by Oliver Hunt. + + Replacing the public constructors in the automatically generated JS DOM bindings with static + create methods. JSByteArray is used by several of these bindings in WebCore. + + * JavaScriptCore.exp: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * runtime/JSByteArray.cpp: + (JSC::JSByteArray::create): + * runtime/JSByteArray.h: + +2011-07-26 Alexis Menard <alexis.menard@openbossa.org> + + Unreviewed build fix for Qt/Linux. + + On platforms with no glib and gstreamer we should not build javascriptcore + with the Glib support. This is related to http://trac.webkit.org/changeset/91752. + + * wtf/wtf.pri: + +2011-07-26 Juan C. Montemayor <jmont@apple.com> + + JSON errors should be informative + https://bugs.webkit.org/show_bug.cgi?id=63339 + + Added error messages to the JSON Parser. + + Reviewed by Oliver Hunt. + + * runtime/JSONObject.cpp: + (JSC::JSONProtoFuncParse): + * runtime/LiteralParser.cpp: + (JSC::LiteralParser::Lexer::lex): + (JSC::LiteralParser::Lexer::lexString): + (JSC::LiteralParser::Lexer::lexNumber): + (JSC::LiteralParser::parse): + * runtime/LiteralParser.h: + (JSC::LiteralParser::getErrorMessage): + (JSC::LiteralParser::Lexer::sawError): + (JSC::LiteralParser::Lexer::getErrorMessage): + +2011-07-26 Sheriff Bot <webkit.review.bot@gmail.com> + + Unreviewed, rolling out r91746. + http://trac.webkit.org/changeset/91746 + https://bugs.webkit.org/show_bug.cgi?id=65180 + + It broke SL build (Requested by Ossy on #webkit). + + * wtf/text/StringImpl.cpp: + (WTF::StringImpl::stripWhiteSpace): + (WTF::StringImpl::simplifyWhiteSpace): + * wtf/text/StringImpl.h: + * wtf/text/WTFString.cpp: + * wtf/text/WTFString.h: + +2011-07-26 Alexis Menard <alexis.menard@openbossa.org> + + Reviewed by Andreas Kling. + + [Qt] Change default backend to use GStreamer on Linux and QuickTime on Mac. + https://bugs.webkit.org/show_bug.cgi?id=63472 + + Enable the bits needed for GStreamer only when QtMultimedia is not used. + + * wtf/wtf.pri: + +2011-07-26 Shinya Kawanaka <shinyak@google.com> + + Added an interface to take IsWhiteSpaceFunctionPtr. + https://bugs.webkit.org/show_bug.cgi?id=57746 + + Reviewed by Kent Tamura. + + * wtf/text/StringImpl.cpp: + (WTF::StringImpl::stripWhiteSpace): + Added an interface to take IsWhiteSpaceFunctionPtr. + (WTF::StringImpl::simplifyWhiteSpace): ditto. + * wtf/text/StringImpl.h: + * wtf/text/WTFString.cpp: + (WTF::String::stripWhiteSpace): ditto. + (WTF::String::simplifyWhiteSpace): ditto. + * wtf/text/WTFString.h: + +2011-07-25 Filip Pizlo <fpizlo@apple.com> + + DFG non-speculative JIT emits inefficient code for arithmetic + involving two registers + https://bugs.webkit.org/show_bug.cgi?id=65160 + + Reviewed by Gavin Barraclough. + + The non-speculative JIT now emits inline code for double arithmetic, but + still attempts integer arithmetic first. This is a speed-up on SunSpider + (albeit a small one), and a large speed-up on Kraken. + + * dfg/DFGNonSpeculativeJIT.cpp: + (JSC::DFG::NonSpeculativeJIT::basicArithOp): + +2011-07-25 Ryuan Choi <ryuan.choi@samsung.com> + + [EFL] Build break with --debug after r89153. + https://bugs.webkit.org/show_bug.cgi?id=65150 + + Unreviewed build fix. + + * wtf/CMakeListsEfl.txt: Add missing libraries. + +2011-07-25 Filip Pizlo <fpizlo@apple.com> + + DFG non-speculative JIT emits obviously inefficient code for arithmetic + where one operand is a constant. + https://bugs.webkit.org/show_bug.cgi?id=65146 + + Reviewed by Gavin Barraclough. + + Changed the code to emit double arithmetic inline. + + * dfg/DFGNonSpeculativeJIT.cpp: + (JSC::DFG::NonSpeculativeJIT::knownConstantArithOp): + +2011-07-25 Filip Pizlo <fpizlo@apple.com> + + DFG JIT bytecode parser misuses pointers into objects allocated as part of a + WTF::Vector. + https://bugs.webkit.org/show_bug.cgi?id=65128 + + Reviewed by Gavin Barraclough. + + The bytecode parser code seems to be right to have a DFGNode& phiNode reference + into the graph, since this makes the code greatly more readable. This patch + thus makes the minimal change necessary to make the code right: it uses a + pointer (to disambiguate between reloading the pointer and performing a + copy from one location of the vector to another) and reloads it after the + calls to addToGraph(). + + * dfg/DFGByteCodeParser.cpp: + (JSC::DFG::ByteCodeParser::processPhiStack): + +2011-07-25 Sheriff Bot <webkit.review.bot@gmail.com> + + Unreviewed, rolling out r91686. + http://trac.webkit.org/changeset/91686 + https://bugs.webkit.org/show_bug.cgi?id=65144 + + 1.5% regression in JSC (Requested by jmontemayor on #webkit). + + * runtime/JSONObject.cpp: + (JSC::JSONProtoFuncParse): + * runtime/LiteralParser.cpp: + (JSC::LiteralParser::Lexer::lex): + (JSC::LiteralParser::Lexer::lexString): + (JSC::LiteralParser::Lexer::lexNumber): + (JSC::LiteralParser::parse): + * runtime/LiteralParser.h: + +2011-07-25 Jon Lee <jonlee@apple.com> + + Assertion called in ExecutableBase::generatedJITCodeForCall() when JIT is not available + https://bugs.webkit.org/show_bug.cgi?id=65132 + <rdar://problem/9836297> + + Reviewed by Oliver Hunt. + + Make sure the JIT is available to use before running the following calls: + + * bytecode/CodeBlock.cpp: + (JSC::CodeBlock::unlinkCalls): Added check, return early if JIT is not available. + * bytecode/CodeBlock.h: + (JSC::CodeBlock::addMethodCallLinkInfos): Added assertion. + +2011-07-25 Juan C. Montemayor <jmont@apple.com> + + JSON errors should be informative + https://bugs.webkit.org/show_bug.cgi?id=63339 + + Added error messages to the JSON Parser. + + Reviewed by Oliver Hunt. + + * runtime/JSONObject.cpp: + (JSC::JSONProtoFuncParse): + * runtime/LiteralParser.cpp: + (JSC::LiteralParser::Lexer::lex): + (JSC::LiteralParser::Lexer::lexString): + (JSC::LiteralParser::Lexer::lexNumber): + (JSC::LiteralParser::parse): + * runtime/LiteralParser.h: + (JSC::LiteralParser::getErrorMessage): + (JSC::LiteralParser::Lexer::sawError): + (JSC::LiteralParser::Lexer::getErrorMessage): + +2011-07-25 Filip Pizlo <fpizlo@apple.com> + + X86-64 assembler emits three instructions instead of two for certain + loads and stores. + https://bugs.webkit.org/show_bug.cgi?id=65095 + + Reviewed by Gavin Barraclough. + + Simply made these four methods in the assembler use the scratch register, + which they were previously avoiding. It still optimizes for the case where + an absolute address memory accesses is using EAX. This results in a slight + performance improvement. + + * assembler/MacroAssemblerX86_64.h: + (JSC::MacroAssemblerX86_64::load32): + (JSC::MacroAssemblerX86_64::store32): + (JSC::MacroAssemblerX86_64::loadPtr): + (JSC::MacroAssemblerX86_64::storePtr): + +2011-07-25 Ryuan Choi <ryuan.choi@samsung.com> + + [EFL] Implement EFL-specific current time and monotonicallyIncreasingTime. + https://bugs.webkit.org/show_bug.cgi?id=64354 + + Use ecore_time_unix_get which returns unix time as double type for currentTime + and ecore_time_get which uses monotonic clock for monotonicallyIncreasingTime. + + Reviewed by Kent Tamura. + + * wtf/CurrentTime.cpp: + (WTF::currentTime): + (WTF::monotonicallyIncreasingTime): + +2011-07-22 Sommer Panage <panage@apple.com> + + Reviewed by Oliver Hunt. + + export JSContextCreateBacktrace as SPI in JSContextRefPrivate.h + https://bugs.webkit.org/show_bug.cgi?id=64981 + + UIAutomation for iOS would like to support a Javascript backtrace in our error logs. + Currently, the C API does not provide the tools to do this. However, the private API + does expose the necessary functionality to get a backtrace + (via Interpreter::retrieveLastCaller). We recognize this information may result in + failure in the cases of programs run by 'eval', stack frames beneath host function + call frames, and in programs run from other programs. Thus, we propose exporting our + JSContextCreateBacktrace in JSContextRefPrivate.h. This will provide us with the tools + we need while not advertising an API that isn't really ready for full use. + + * API/JSContextRef.cpp: + * API/JSContextRefPrivate.h: + * JavaScriptCore.exp: + + +2011-07-22 Gavin Barraclough <barraclough@apple.com> + + https://bugs.webkit.org/show_bug.cgi?id=65051 + DFG JIT - Enable by default for mac platform on x86-64. + + Rubber Stamped by Geoff Garen. + + This is now a performance progression. + + * wtf/Platform.h: + - Removed definition of ENABLE_DFG_JIT_RESTRICTIONS. + +2011-07-22 Gavin Barraclough <barraclough@apple.com> + + https://bugs.webkit.org/show_bug.cgi?id=65047 + DFG JIT - Add support for op_resolve/op_resolve_base + + Reviewed by Sam Weinig. + + These are necessary for any significant eval code coverage + (and as such increase LayoutTest coverage). + + * dfg/DFGAliasTracker.h: + (JSC::DFG::AliasTracker::recordResolve): + - Conservatively blow aliasing optimizations for now. + * dfg/DFGByteCodeParser.cpp: + (JSC::DFG::ByteCodeParser::parseBlock): + - Add support for op_resolve/op_resolve_base. + * dfg/DFGJITCodeGenerator.h: + (JSC::DFG::JITCodeGenerator::callOperation): + - Add call with exec, identifer aguments. + * dfg/DFGNode.h: + - Add new node types. + (JSC::DFG::Node::hasIdentifier): + - Resolve nodes have identifiers, too! + * dfg/DFGNonSpeculativeJIT.cpp: + (JSC::DFG::NonSpeculativeJIT::compile): + - Add generation for new Nodes. + * dfg/DFGOperations.cpp: + * dfg/DFGOperations.h: + - Added new operations. + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::compile): + - Add generation for new Nodes. + +2011-07-22 Gavin Barraclough <barraclough@apple.com> + + https://bugs.webkit.org/show_bug.cgi?id=65036 + Messing with the register allocation within flow control = badness. + + Reviewed by Sam Weinig. + + * dfg/DFGNonSpeculativeJIT.cpp: + (JSC::DFG::NonSpeculativeJIT::compile): + - Fix register allocation. + +2011-07-22 Mark Hahnenberg <mhahnenberg@apple.com> + + Date.prototype.toISOString doesn't handle negative years or years > 9999 correctly. + https://bugs.webkit.org/show_bug.cgi?id=63986 + + Reviewed by Geoffrey Garen. + + Changed the implementation of Date.prototype.toISOString() to use the extended year + format (+/-yyyyyy) for years outside of [0,9999] to be in compliance with ES 15.9.1.15.1. + + * runtime/DatePrototype.cpp: + (JSC::dateProtoFuncToISOString): + +2011-07-21 Gavin Barraclough <barraclough@apple.com> + + Windows build fix + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + +2011-07-21 Ryosuke Niwa <rniwa@webkit.org> + + Build fix after r91555. + + * JavaScriptCore.exp: + +2011-07-21 Gavin Barraclough <barraclough@apple.com> + + https://bugs.webkit.org/show_bug.cgi?id=19271 + eliminate PIC branches by changing NaN handling in JSValue::toNumber + + Reviewed by Sam Weinig. + + Moving the non-numeric cases out of line seems to be a consistent + win on SunSpider for me, to the order of about 0.5%. + + * runtime/JSCell.h: + (JSC::JSCell::JSValue::toNumber): + - Changed to only handle values that are already numbers, moce non-numeric cases out of line. + * runtime/JSValue.cpp: + (JSC::JSValue::toNumberSlowCase): + - Added toNumberSlowCase, handling non-numeric cases. + * runtime/JSValue.h: + - Add declaration of toNumberSlowCase. + +2011-07-21 Gavin Barraclough <barraclough@apple.com> + + https://bugs.webkit.org/show_bug.cgi?id=64875 + Use of `yield` keyword is broken + + Reviewed by Sam Weinig. + + * parser/Lexer.cpp: + (JSC::Lexer::parseIdentifier): + - The bug here is that a successful match of a RESERVED_IF_STRICT token from + parseKeyword is being nullified back to IDENT. The problem is that in the + case of IDENT matches parseKeyword should not move the lexer's input + position, but in the case of RESERVED_IF_STRICT it has done so. + +2011-07-21 Gavin Barraclough <barraclough@apple.com> + + https://bugs.webkit.org/show_bug.cgi?id=64900 + Function.prototype.apply should accept an array-like object as its second argument + + Reviewed by Sam Weinig. + + * interpreter/Interpreter.cpp: + (JSC::Interpreter::privateExecute): + * jit/JITStubs.cpp: + (JSC::DEFINE_STUB_FUNCTION): + * runtime/FunctionPrototype.cpp: + (JSC::functionProtoFuncApply): + - Remove the type error if object is not an array. + +2011-07-21 Gavin Barraclough <barraclough@apple.com> + + https://bugs.webkit.org/show_bug.cgi?id=64964 + DFG JIT - Enable support for eval code + + Reviewed by Sam Weinig. + + This is basically the same as program code, to the JIT! + + * bytecode/Opcode.cpp: + * bytecode/Opcode.h: + - Enable opcodeNames in !NDEBUG builds. + * dfg/DFGOperations.cpp: + - Fix a bug exposed by eval support, throw correct type error for new. + * runtime/Executable.cpp: + (JSC::EvalExecutable::compileInternal): + - Enable DFG JIT for eval code. + +2011-07-20 Sheriff Bot <webkit.review.bot@gmail.com> + + Unreviewed, rolling out r91380. + http://trac.webkit.org/changeset/91380 + https://bugs.webkit.org/show_bug.cgi?id=64924 + + Caused assertion failures in Chromium's IndexedDB tests + (Requested by rniwa on #webkit). + + * wtf/ThreadIdentifierDataPthreads.cpp: + (WTF::ThreadIdentifierData::identifier): + (WTF::ThreadIdentifierData::initialize): + (WTF::ThreadIdentifierData::initializeKeyOnceHelper): + (WTF::ThreadIdentifierData::initializeKeyOnce): + * wtf/ThreadIdentifierDataPthreads.h: + * wtf/ThreadingPthreads.cpp: + (WTF::initializeThreading): + +2011-07-20 Filip Pizlo <fpizlo@apple.com> + + DFG non-speculative JIT does not use() the aliased GetByVal, + resulting in bloated use counts. + https://bugs.webkit.org/show_bug.cgi?id=64911 + + Reviewed by Gavin Barraclough. + + Inserted a call to use() for the aliased GetByVal. + + * dfg/DFGNonSpeculativeJIT.cpp: + (JSC::DFG::NonSpeculativeJIT::compile): + +2011-07-20 Gavin Barraclough <barraclough@apple.com> + + https://bugs.webkit.org/show_bug.cgi?id=64909 + DFG JIT - Missing ToInt32 conversions for double constants. + + Reviewed by Sam Weinig. + + * dfg/DFGByteCodeParser.cpp: + (JSC::DFG::ByteCodeParser::toInt32): + - We cannot trivially omit ToInt32 conversions on double constants. + +2011-07-20 Filip Pizlo <fpizlo@apple.com> + + DFG speculative JIT sometimes claims to use compare operands twice, leading to + use count corruption. + https://bugs.webkit.org/show_bug.cgi?id=64903 + + Reviewed by Gavin Barraclough. + + Move the calls to use() in SpeculativeJIT::compare() so that they only happen + if the JITCodeGenerator's helper method (which also calls use()) is not called. + + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::compare): + +2011-07-20 Oliver Hunt <oliver@apple.com> + + Don't throw away code when JSGarbageCollect API is called + https://bugs.webkit.org/show_bug.cgi?id=64894 + + Reviewed by Sam Weinig. + + Just call collectAllGarbage. That will clean up all unneeded + code without causing any pathological recompilation problems. + + * API/JSBase.cpp: + (JSGarbageCollect): + +2011-07-20 Oliver Hunt <oliver@apple.com> + + Codeblock doesn't visit cached structures in global resolve instructions + https://bugs.webkit.org/show_bug.cgi?id=64889 + + Reviewed by Sam Weinig. + + Visit the global resolve instructions. This fixes a couple + of random crashes seen in the jquery tests when using the + interpreter. + + * bytecode/CodeBlock.cpp: + (JSC::CodeBlock::visitAggregate): + +2011-07-20 James Robinson <jamesr@chromium.org> + + Revert worker and WebKit2 runloops to use currentTime() for scheduling instead of the monotonic clock + https://bugs.webkit.org/show_bug.cgi?id=64841 + + Reviewed by Mark Rowe. + + http://trac.webkit.org/changeset/91206 converted most of WebKit's deferred work scheduling to using the + monotonic clock instead of WTF::currentTime(). This broke many plugin tests on WebKit2 for reasons that are + unclear. This reverts everything except for WebCore::ThreadTimers back to the previous behavior. + + * wtf/ThreadingPthreads.cpp: + (WTF::ThreadCondition::timedWait): + * wtf/ThreadingWin.cpp: + (WTF::absoluteTimeToWaitTimeoutInterval): + * wtf/gtk/ThreadingGtk.cpp: + (WTF::ThreadCondition::timedWait): + * wtf/qt/ThreadingQt.cpp: + (WTF::ThreadCondition::timedWait): + +2011-07-14 David Levin <levin@chromium.org> + + currentThread is too slow! + https://bugs.webkit.org/show_bug.cgi?id=64577 + + Reviewed by Darin Adler and Dmitry Titov. + + The problem is that currentThread results in a pthread_once call which always takes a lock. + With this change, currentThread is 10% faster than isMainThread in release mode and only + 5% slower than isMainThread in debug. + + * wtf/ThreadIdentifierDataPthreads.cpp: + (WTF::ThreadIdentifierData::initializeOnce): Remove the pthread once stuff + which is no longer needed because this is called from initializeThreading(). + (WTF::ThreadIdentifierData::identifier): Remove the initializeKeyOnce call because + intialization of the pthread key should already be done. + (WTF::ThreadIdentifierData::initialize): Ditto. + * wtf/ThreadIdentifierDataPthreads.h: + * wtf/ThreadingPthreads.cpp: + (WTF::initializeThreading): Acquire the pthread key here. + +2011-07-20 Mark Rowe <mrowe@apple.com> + + Fix the 32-bit build. + + * runtime/ObjectPrototype.cpp: + (JSC::objectProtoFuncToString): + +2011-07-19 Gavin Barraclough <barraclough@apple.com> + + https://bugs.webkit.org/show_bug.cgi?id=64678 + Fix bugs in Object.prototype this handling. + + Reviewed by Darin Adler. + + Fix ES5.1 correctness issues identified by Mads Ager. + + * runtime/ObjectPrototype.cpp: + (JSC::objectProtoFuncToString): + - ES5.1 expects toString of undefined/null to produce "[object Undefined]"/"[object Null]". + +2011-07-19 Mark Hahnenberg <mhahnenberg@apple.com> + + [JSC] WebKit allocates gigabytes of memory when doing repeated string concatenation + https://bugs.webkit.org/show_bug.cgi?id=63918 + + Reviewed by Darin Adler. + + When allocating JSStrings during concatenation, we needed to call the Heap's reportExtraMemoryCost + method due to additional string copying within several of the constructors when dealing with + UStrings. This has been added to the UString version of the appendStringInConstruct method + within the JSString class. + + * runtime/JSString.h: + (JSC::RopeBuilder::JSString): + (JSC::RopeBuilder::appendStringInConstruct): + +2011-07-19 Gavin Barraclough <barraclough@apple.com> + + https://bugs.webkit.org/show_bug.cgi?id=64679 + Fix bugs in Array.prototype this handling. + + Reviewed by Oliver Hunt. + + * runtime/ArrayPrototype.cpp: + (JSC::arrayProtoFuncJoin): + (JSC::arrayProtoFuncConcat): + (JSC::arrayProtoFuncPop): + (JSC::arrayProtoFuncPush): + (JSC::arrayProtoFuncReverse): + (JSC::arrayProtoFuncShift): + (JSC::arrayProtoFuncSlice): + (JSC::arrayProtoFuncSort): + (JSC::arrayProtoFuncSplice): + (JSC::arrayProtoFuncUnShift): + (JSC::arrayProtoFuncFilter): + (JSC::arrayProtoFuncMap): + (JSC::arrayProtoFuncEvery): + (JSC::arrayProtoFuncForEach): + (JSC::arrayProtoFuncSome): + (JSC::arrayProtoFuncReduce): + (JSC::arrayProtoFuncReduceRight): + (JSC::arrayProtoFuncIndexOf): + (JSC::arrayProtoFuncLastIndexOf): + - These methods should throw if this value is undefined. + +2011-07-19 Gavin Barraclough <barraclough@apple.com> + + https://bugs.webkit.org/show_bug.cgi?id=64677 + Fix bugs in String.prototype this handling. + + Reviewed by Oliver Hunt. + + undefined/null this values should throw TypeErrors, not convert to + the global object, and primitive values should not be converted via + object types. + + * runtime/StringPrototype.cpp: + (JSC::stringProtoFuncReplace): + (JSC::stringProtoFuncCharAt): + (JSC::stringProtoFuncCharCodeAt): + (JSC::stringProtoFuncIndexOf): + (JSC::stringProtoFuncLastIndexOf): + (JSC::stringProtoFuncMatch): + (JSC::stringProtoFuncSearch): + (JSC::stringProtoFuncSlice): + (JSC::stringProtoFuncSplit): + (JSC::stringProtoFuncSubstr): + (JSC::stringProtoFuncSubstring): + (JSC::stringProtoFuncToLowerCase): + (JSC::stringProtoFuncToUpperCase): + (JSC::stringProtoFuncLocaleCompare): + (JSC::stringProtoFuncBig): + (JSC::stringProtoFuncSmall): + (JSC::stringProtoFuncBlink): + (JSC::stringProtoFuncBold): + (JSC::stringProtoFuncFixed): + (JSC::stringProtoFuncItalics): + (JSC::stringProtoFuncStrike): + (JSC::stringProtoFuncSub): + (JSC::stringProtoFuncSup): + (JSC::stringProtoFuncFontcolor): + (JSC::stringProtoFuncFontsize): + (JSC::stringProtoFuncAnchor): + (JSC::stringProtoFuncLink): + (JSC::trimString): + - These methods should throw if this value is undefined, + convert ToString directly, not via ToObject. + +2011-07-19 Filip Pizlo <fpizlo@apple.com> + + DFG JIT sometimes emits spill code even when the respective values + are never needed. + https://bugs.webkit.org/show_bug.cgi?id=64774 + + Reviewed by Gavin Barraclough. + + The main high-level change is that it is now easier to call use() on a + virtual register. JSValueOperand and its other-typed relatives now have + a handy use() method, and jsValueResult() and friends now make it easier to + pass UseChildrenCalledExplicitly. + + The rest of this patch hoists the call to use() as high as possible for + all of those cases where either flushRegisters() or silentSpillAllRegisters() + may be called. + + * dfg/DFGJITCodeGenerator.cpp: + (JSC::DFG::JITCodeGenerator::cachedGetById): + (JSC::DFG::JITCodeGenerator::cachedGetMethod): + (JSC::DFG::JITCodeGenerator::nonSpeculativePeepholeBranch): + (JSC::DFG::JITCodeGenerator::nonSpeculativeNonPeepholeCompare): + (JSC::DFG::JITCodeGenerator::nonSpeculativeCompare): + (JSC::DFG::JITCodeGenerator::nonSpeculativePeepholeStrictEq): + (JSC::DFG::JITCodeGenerator::nonSpeculativeNonPeepholeStrictEq): + (JSC::DFG::JITCodeGenerator::nonSpeculativeStrictEq): + (JSC::DFG::JITCodeGenerator::emitBranch): + * dfg/DFGJITCodeGenerator.h: + (JSC::DFG::JITCodeGenerator::use): + (JSC::DFG::JITCodeGenerator::integerResult): + (JSC::DFG::JITCodeGenerator::jsValueResult): + (JSC::DFG::IntegerOperand::use): + (JSC::DFG::DoubleOperand::use): + (JSC::DFG::JSValueOperand::use): + * dfg/DFGNonSpeculativeJIT.cpp: + (JSC::DFG::NonSpeculativeJIT::valueToNumber): + (JSC::DFG::NonSpeculativeJIT::valueToInt32): + (JSC::DFG::NonSpeculativeJIT::knownConstantArithOp): + (JSC::DFG::NonSpeculativeJIT::basicArithOp): + (JSC::DFG::NonSpeculativeJIT::compile): + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::compile): + * dfg/DFGSpeculativeJIT.h: + (JSC::DFG::SpeculateStrictInt32Operand::use): + (JSC::DFG::SpeculateCellOperand::use): + +2011-07-19 Xan Lopez <xlopez@igalia.com> + + ARMv7 backend broken, lacks 3 parameter rshift32 method + https://bugs.webkit.org/show_bug.cgi?id=64571 + + Reviewed by Zoltan Herczeg. + + * assembler/MacroAssemblerARMv7.h: + (JSC::MacroAssemblerARMv7::rshift32): add missing rshift32 method. + +2011-07-18 Filip Pizlo <fpizlo@apple.com> + + DFG JIT does not optimize strict equality as effectively as the old JIT does. + https://bugs.webkit.org/show_bug.cgi?id=64759 + + Reviewed by Gavin Barraclough. + + This adds a more complete set of strict equality optimizations. If either + operand is known numeric, then the code reverts to the old style of optimizing + (first try integer comparison). Otherwise it uses the old JIT's trick of + first simultaneously checking if both operands are either numbers or cells; + if not then a fast path is taken. + + * dfg/DFGJITCodeGenerator.cpp: + (JSC::DFG::JITCodeGenerator::nonSpeculativePeepholeStrictEq): + (JSC::DFG::JITCodeGenerator::nonSpeculativeNonPeepholeStrictEq): + (JSC::DFG::JITCodeGenerator::nonSpeculativeStrictEq): + * dfg/DFGJITCodeGenerator.h: + * dfg/DFGNonSpeculativeJIT.cpp: + (JSC::DFG::NonSpeculativeJIT::compile): + * dfg/DFGOperations.cpp: + * dfg/DFGOperations.h: + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::compile): + +2011-07-18 Gavin Barraclough <barraclough@apple.com> + + https://bugs.webkit.org/show_bug.cgi?id=64760 + DFG JIT - Should be able to compile program code. + + Reviewed by Geoff Garen. + + Add support for op_end, hooks to compile program code in Executable.cpp. + + * dfg/DFGByteCodeParser.cpp: + (JSC::DFG::ByteCodeParser::parseBlock): + - Add support for op_end + * dfg/DFGJITCompiler.cpp: + (JSC::DFG::JITCompiler::compileEntry): + (JSC::DFG::JITCompiler::compileBody): + (JSC::DFG::JITCompiler::link): + - Added, separate out steps of compileFunction. + (JSC::DFG::JITCompiler::compile): + - Added, compile program code. + (JSC::DFG::JITCompiler::compileFunction): + - Sections separated out to helper functions. + * dfg/DFGJITCompiler.h: + (JSC::DFG::JITCompiler::JITCompiler): + - Added m_exceptionCheckCount. + * runtime/Executable.cpp: + (JSC::tryDFGCompile): + (JSC::tryDFGCompileFunction): + (JSC::ProgramExecutable::compileInternal): + (JSC::FunctionExecutable::compileForCallInternal): + - Renamed tryDFGCompile to tryDFGCompileFunction, added tryDFGCompile to compile program code. + +2011-07-18 Gavin Barraclough <barraclough@apple.com> + + https://bugs.webkit.org/show_bug.cgi?id=64678 + Fix bugs in Object.prototype this handling. + + Reviewed by Oliver Hunt. + + undefined/null this values should throw TypeErrors, not convert to the global object, + also, to toLocaleString should be calling the ToObject & invoking the object's toString + function, even for values that are already strings. + + * runtime/ObjectPrototype.cpp: + (JSC::objectProtoFuncValueOf): + (JSC::objectProtoFuncHasOwnProperty): + (JSC::objectProtoFuncIsPrototypeOf): + (JSC::objectProtoFuncPropertyIsEnumerable): + (JSC::objectProtoFuncToLocaleString): + (JSC::objectProtoFuncToString): + +2011-07-18 Filip Pizlo <fpizlo@apple.com> + + JSC GC lazy sweep does not inline the common cases of cell destruction. + https://bugs.webkit.org/show_bug.cgi?id=64745 + + Reviewed by Oliver Hunt. + + This inlines the case of JSFinalObject destruction. + + * heap/MarkedBlock.cpp: + (JSC::MarkedBlock::lazySweep): + +2011-07-18 Oliver Hunt <oliver@apple.com> + + Interpreter build-fix + + * interpreter/Interpreter.cpp: + (JSC::Interpreter::privateExecute): + +2011-07-18 Filip Pizlo <fpizlo@apple.com> + + DFG JIT does not optimize equal-null comparisons and branches. + https://bugs.webkit.org/show_bug.cgi?id=64659 + + Reviewed by Gavin Barraclough. + + Added a peephole-aware compare-to-null implementation to JITCodeGenerator, + which is used by both the speculative and non-speculative JIT. Through + the use of the new isNullConstant helper, the two JITs invoke the + nonSpecualtiveCompareNull() helper instead of their regular comparison + helpers when compiling CompareEq. Through the use of the new isKnownCell + helper, the compare-null code will skip the is-a-cell check if the + speculative JIT had been speculating cell. + + * dfg/DFGJITCodeGenerator.cpp: + (JSC::DFG::JITCodeGenerator::isKnownCell): + (JSC::DFG::JITCodeGenerator::nonSpeculativeNonPeepholeCompareNull): + (JSC::DFG::JITCodeGenerator::nonSpeculativePeepholeBranchNull): + (JSC::DFG::JITCodeGenerator::nonSpeculativeCompareNull): + * dfg/DFGJITCodeGenerator.h: + (JSC::DFG::JITCodeGenerator::isNullConstant): + * dfg/DFGNonSpeculativeJIT.cpp: + (JSC::DFG::NonSpeculativeJIT::compile): + * dfg/DFGOperations.cpp: + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::compile): + +2011-07-18 James Robinson <jamesr@chromium.org> + + Timer scheduling should be based off the monotonic clock + https://bugs.webkit.org/show_bug.cgi?id=64544 + + Reviewed by Darin Adler. + + Switches ThreadCondition::timedWait and related utility functions from currentTime() to + monotonicallyIncreasingTime(). + + Add WTF::monotonicallyIncreasingTime() to list of exported functions so it can be accessed from WebCore/WebKit. + + * JavaScriptCore.exp: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * wtf/ThreadingPthreads.cpp: + (WTF::ThreadCondition::timedWait): + * wtf/ThreadingWin.cpp: + (WTF::absoluteTimeToWaitTimeoutInterval): + * wtf/gtk/ThreadingGtk.cpp: + (WTF::ThreadCondition::timedWait): + * wtf/qt/ThreadingQt.cpp: + (WTF::ThreadCondition::timedWait): + +2011-07-18 Filip Pizlo <fpizlo@apple.com> + + JSC JIT does not inline GC allocation fast paths + https://bugs.webkit.org/show_bug.cgi?id=64582 + + Reviewed by Oliver Hunt. + + This addresses inlining allocation for the easiest-to-allocate cases: + op_new_object and op_create_this. Inlining GC allocation fast paths + required three changes. First, the JSGlobalData now saves the vtable + pointer of JSFinalObject, since that's what op_new_object and + op_create_this allocate. Second, the Heap exposes a reference to + the appropriate SizeClass, so that the JIT may inline accesses + directly to the SizeClass for JSFinalObject allocations. And third, + the JIT is extended with code to emit inline fast paths for GC + allocation. A stub call is emitted in the case where the inline fast + path fails. + + * heap/Heap.h: + (JSC::Heap::sizeClassFor): + (JSC::Heap::allocate): + * jit/JIT.cpp: + (JSC::JIT::privateCompileSlowCases): + * jit/JIT.h: + * jit/JITInlineMethods.h: + (JSC::JIT::emitAllocateJSFinalObject): + * jit/JITOpcodes.cpp: + (JSC::JIT::emit_op_new_object): + (JSC::JIT::emitSlow_op_new_object): + (JSC::JIT::emit_op_create_this): + (JSC::JIT::emitSlow_op_create_this): + * jit/JITOpcodes32_64.cpp: + (JSC::JIT::emit_op_new_object): + (JSC::JIT::emitSlow_op_new_object): + (JSC::JIT::emit_op_create_this): + (JSC::JIT::emitSlow_op_create_this): + * runtime/JSGlobalData.cpp: + (JSC::JSGlobalData::storeVPtrs): + * runtime/JSGlobalData.h: + * runtime/JSObject.h: + (JSC::JSFinalObject::JSFinalObject): + (JSC::JSObject::offsetOfInheritorID): + +2011-07-18 Mark Hahnenberg <mhahnenberg@apple.com> + + Refactor JSC to replace JSCell::operator new with static create method + https://bugs.webkit.org/show_bug.cgi?id=64466 + + Reviewed by Oliver Hunt (oliver@apple.com) and Darin Adler (darin@apple.com). + + First step in a longer refactoring process to remove the use of + operator new overloading in order to allocate GC objects and to replace + this method with static create methods for each individual type of heap-allocated + JS object. This particular patch only deals with replacing uses of + operator new within JSC proper. Future patches will remove it from the + parts that interface with the DOM. Due to the DOM's continued dependence + on it, operator new has not actually been removed from JSCell. + + * API/JSCallbackConstructor.h: + (JSC::JSCallbackConstructor::create): + * API/JSCallbackFunction.h: + (JSC::JSCallbackFunction::create): + * API/JSCallbackObject.h: + (JSC::JSCallbackObject::operator new): + (JSC::JSCallbackObject::create): + * API/JSCallbackObjectFunctions.h: + (JSC::::staticFunctionGetter): + * API/JSClassRef.cpp: + (OpaqueJSClass::prototype): + * API/JSContextRef.cpp: + * API/JSObjectRef.cpp: + (JSObjectMake): + (JSObjectMakeFunctionWithCallback): + (JSObjectMakeConstructor): + * JavaScriptCore.exp: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * bytecode/CodeBlock.cpp: + (JSC::CodeBlock::createActivation): + * bytecompiler/BytecodeGenerator.cpp: + (JSC::BytecodeGenerator::BytecodeGenerator): + * bytecompiler/BytecodeGenerator.h: + (JSC::BytecodeGenerator::makeFunction): + * bytecompiler/NodesCodegen.cpp: + (JSC::RegExpNode::emitBytecode): + * interpreter/Interpreter.cpp: + (JSC::Interpreter::privateExecute): + (JSC::Interpreter::retrieveArguments): + * jit/JITStubs.cpp: + (JSC::DEFINE_STUB_FUNCTION): + * jsc.cpp: + (GlobalObject::create): + (GlobalObject::GlobalObject): + (functionRun): + (jscmain): + * runtime/Arguments.h: + (JSC::Arguments::create): + (JSC::Arguments::createNoParameters): + * runtime/ArrayConstructor.cpp: + (JSC::constructArrayWithSizeQuirk): + * runtime/ArrayConstructor.h: + (JSC::ArrayConstructor::create): + * runtime/ArrayPrototype.cpp: + (JSC::arrayProtoFuncSplice): + * runtime/ArrayPrototype.h: + (JSC::ArrayPrototype::create): + * runtime/BooleanConstructor.cpp: + (JSC::constructBoolean): + (JSC::constructBooleanFromImmediateBoolean): + * runtime/BooleanConstructor.h: + (JSC::BooleanConstructor::create): + * runtime/BooleanObject.h: + (JSC::BooleanObject::create): + * runtime/BooleanPrototype.h: + (JSC::BooleanPrototype::create): + * runtime/DateConstructor.cpp: + (JSC::constructDate): + * runtime/DateConstructor.h: + (JSC::DateConstructor::create): + * runtime/DateInstance.h: + (JSC::DateInstance::create): + * runtime/DatePrototype.h: + (JSC::DatePrototype::create): + * runtime/Error.cpp: + (JSC::createError): + (JSC::createEvalError): + (JSC::createRangeError): + (JSC::createReferenceError): + (JSC::createSyntaxError): + (JSC::createTypeError): + (JSC::createURIError): + (JSC::StrictModeTypeErrorFunction::create): + (JSC::createTypeErrorFunction): + * runtime/ErrorConstructor.h: + (JSC::ErrorConstructor::create): + * runtime/ErrorInstance.cpp: + (JSC::ErrorInstance::ErrorInstance): + (JSC::ErrorInstance::create): + * runtime/ErrorInstance.h: + * runtime/ErrorPrototype.cpp: + (JSC::ErrorPrototype::ErrorPrototype): + * runtime/ErrorPrototype.h: + (JSC::ErrorPrototype::create): + * runtime/ExceptionHelpers.cpp: + (JSC::InterruptedExecutionError::InterruptedExecutionError): + (JSC::InterruptedExecutionError::create): + (JSC::createInterruptedExecutionException): + (JSC::TerminatedExecutionError::TerminatedExecutionError): + (JSC::TerminatedExecutionError::create): + (JSC::createTerminatedExecutionException): + * runtime/Executable.cpp: + (JSC::FunctionExecutable::FunctionExecutable): + (JSC::FunctionExecutable::fromGlobalCode): + * runtime/Executable.h: + (JSC::ExecutableBase::create): + (JSC::NativeExecutable::create): + (JSC::ScriptExecutable::ScriptExecutable): + (JSC::EvalExecutable::create): + (JSC::ProgramExecutable::create): + (JSC::FunctionExecutable::create): + (JSC::FunctionExecutable::make): + * runtime/FunctionConstructor.cpp: + (JSC::constructFunctionSkippingEvalEnabledCheck): + * runtime/FunctionConstructor.h: + (JSC::FunctionConstructor::create): + * runtime/FunctionPrototype.cpp: + (JSC::FunctionPrototype::addFunctionProperties): + * runtime/FunctionPrototype.h: + (JSC::FunctionPrototype::create): + * runtime/GetterSetter.h: + (JSC::GetterSetter::create): + * runtime/JSAPIValueWrapper.h: + (JSC::JSAPIValueWrapper::create): + (JSC::jsAPIValueWrapper): + * runtime/JSActivation.cpp: + (JSC::JSActivation::argumentsGetter): + * runtime/JSActivation.h: + (JSC::JSActivation::create): + * runtime/JSArray.h: + (JSC::JSArray::create): + * runtime/JSCell.h: + (JSC::JSCell::allocateCell): + * runtime/JSFunction.h: + (JSC::JSFunction::create): + * runtime/JSGlobalObject.cpp: + (JSC::JSGlobalObject::init): + (JSC::JSGlobalObject::reset): + * runtime/JSGlobalObject.h: + (JSC::constructEmptyArray): + (JSC::constructArray): + * runtime/JSNotAnObject.h: + (JSC::JSNotAnObject::create): + * runtime/JSONObject.h: + (JSC::JSONObject::create): + * runtime/JSObject.cpp: + (JSC::JSObject::defineGetter): + (JSC::JSObject::defineSetter): + (JSC::putDescriptor): + * runtime/JSObject.h: + (JSC::JSFinalObject::create): + * runtime/JSPropertyNameIterator.cpp: + (JSC::JSPropertyNameIterator::create): + * runtime/JSPropertyNameIterator.h: + (JSC::JSPropertyNameIterator::create): + * runtime/JSString.cpp: + (JSC::JSString::substringFromRope): + (JSC::JSString::replaceCharacter): + (JSC::StringObject::create): + * runtime/JSString.h: + (JSC::RopeBuilder::JSString): + (JSC::RopeBuilder::create): + (JSC::RopeBuilder::createHasOtherOwner): + (JSC::jsSingleCharacterString): + (JSC::jsSingleCharacterSubstring): + (JSC::jsNontrivialString): + (JSC::jsString): + (JSC::jsSubstring): + (JSC::jsOwnedString): + * runtime/JSValue.cpp: + (JSC::JSValue::toObjectSlowCase): + (JSC::JSValue::synthesizeObject): + (JSC::JSValue::synthesizePrototype): + * runtime/Lookup.cpp: + (JSC::setUpStaticFunctionSlot): + * runtime/MathObject.h: + (JSC::MathObject::create): + * runtime/NativeErrorConstructor.cpp: + (JSC::NativeErrorConstructor::NativeErrorConstructor): + * runtime/NativeErrorConstructor.h: + (JSC::NativeErrorConstructor::create): + * runtime/NativeErrorPrototype.h: + (JSC::NativeErrorPrototype::create): + * runtime/NumberConstructor.cpp: + (JSC::constructWithNumberConstructor): + * runtime/NumberConstructor.h: + (JSC::NumberConstructor::create): + * runtime/NumberObject.cpp: + (JSC::constructNumber): + * runtime/NumberObject.h: + (JSC::NumberObject::create): + * runtime/NumberPrototype.h: + (JSC::NumberPrototype::create): + * runtime/ObjectConstructor.h: + (JSC::ObjectConstructor::create): + * runtime/ObjectPrototype.h: + (JSC::ObjectPrototype::create): + * runtime/Operations.h: + (JSC::jsString): + * runtime/RegExp.cpp: + (JSC::RegExp::RegExp): + (JSC::RegExp::createWithoutCaching): + (JSC::RegExp::create): + * runtime/RegExp.h: + * runtime/RegExpCache.cpp: + (JSC::RegExpCache::lookupOrCreate): + * runtime/RegExpConstructor.cpp: + (JSC::RegExpConstructor::arrayOfMatches): + (JSC::constructRegExp): + * runtime/RegExpConstructor.h: + (JSC::RegExpConstructor::create): + * runtime/RegExpMatchesArray.h: + (JSC::RegExpMatchesArray::create): + * runtime/RegExpObject.h: + (JSC::RegExpObject::create): + * runtime/RegExpPrototype.cpp: + (JSC::regExpProtoFuncCompile): + * runtime/RegExpPrototype.h: + (JSC::RegExpPrototype::create): + * runtime/ScopeChain.h: + (JSC::ScopeChainNode::create): + (JSC::ScopeChainNode::push): + * runtime/SmallStrings.cpp: + (JSC::SmallStrings::createEmptyString): + (JSC::SmallStrings::createSingleCharacterString): + * runtime/StringConstructor.cpp: + (JSC::constructWithStringConstructor): + * runtime/StringConstructor.h: + (JSC::StringConstructor::create): + * runtime/StringObject.h: + (JSC::StringObject::create): + * runtime/StringObjectThatMasqueradesAsUndefined.h: + (JSC::StringObjectThatMasqueradesAsUndefined::create): + * runtime/StringPrototype.cpp: + (JSC::stringProtoFuncMatch): + (JSC::stringProtoFuncSearch): + * runtime/StringPrototype.h: + (JSC::StringPrototype::create): + * runtime/Structure.h: + (JSC::Structure::create): + (JSC::Structure::createStructure): + * runtime/StructureChain.h: + (JSC::StructureChain::create): + +2011-07-17 Ryuan Choi <ryuan.choi@samsung.com> + + [EFL] Refactor scheduleDispatchFunctionsOnMainThread to fix crash. + https://bugs.webkit.org/show_bug.cgi?id=64337 + + Replace ecore_timer_add to Ecore_Pipe. + This is needed because ecore_timer should not be called in a child thread, + but in the main thread. + + Reviewed by Antonio Gomes. + + * wtf/efl/MainThreadEfl.cpp: + (WTF::pipeObject): + (WTF::monitorDispatchFunctions): + (WTF::initializeMainThreadPlatform): + (WTF::scheduleDispatchFunctionsOnMainThread): + +2011-07-17 Filip Pizlo <fpizlo@apple.com> + + DFG JIT operationCompareEqual does not inline JSValue::equalSlowCaseInline. + https://bugs.webkit.org/show_bug.cgi?id=64637 + + Reviewed by Gavin Barraclough. + + * dfg/DFGOperations.cpp: + +2011-07-16 Gavin Barraclough <barraclough@apple.com> + + https://bugs.webkit.org/show_bug.cgi?id=64657 + Converted this value not preserved when accessed via direct eval. + + Reviewed by Oliver Hunt. + + Upon entry into a non-strict function, primitive this values should be boxed as Object types + (or substituted with the global object) - which is done by op_convert_this. However we only + do so where this is used lexically within the function (we omit the conversion op if not). + The problem comes if a direct eval (running within the function's scope) accesses the this + value. + + We are safe in the case of a single eval, since the this object will be converted within + callEval, however the converted value is not preserved, and a new wrapper object is allocated + each time eval is invoked. This is inefficient and incorrect, since any changes to the wrapper + object will be lost between eval statements. + + * bytecompiler/BytecodeGenerator.cpp: + (JSC::BytecodeGenerator::BytecodeGenerator): + - If a function uses eval, we always need to convert this. + * interpreter/Interpreter.cpp: + (JSC::Interpreter::execute): + - Don't convert primitive values here - this is too late! + (JSC::Interpreter::privateExecute): + - Changed op_convert_this to call new isPrimitive method. + * jit/JITStubs.cpp: + (JSC::DEFINE_STUB_FUNCTION): + - Changed op_convert_this to call new isPrimitive method. + * runtime/JSCell.h: + (JSC::JSCell::JSValue::isPrimitive): + - Added JSValue::isPrimitive. + * runtime/JSValue.h: + - Added JSValue::isPrimitive. + +2011-07-16 Filip Pizlo <fpizlo@apple.com> + + DFG JIT compare/branch code emits is-integer tests even when a value is + definitely not an integer. + https://bugs.webkit.org/show_bug.cgi?id=64654 + + Reviewed by Gavin Barraclough. + + Added the isKnownNotInteger() method, which returns true if a node is + definitely not an integer and will always fail any is-integer test. Then + modified the compare and branch code to use this method; if it returns + true then is-int tests are omitted and the compiler always emits a slow + call. + + * dfg/DFGJITCodeGenerator.cpp: + (JSC::DFG::JITCodeGenerator::isKnownNotInteger): + (JSC::DFG::JITCodeGenerator::nonSpeculativePeepholeBranch): + (JSC::DFG::JITCodeGenerator::nonSpeculativeNonPeepholeCompare): + (JSC::DFG::JITCodeGenerator::nonSpeculativeCompare): + * dfg/DFGJITCodeGenerator.h: + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::compare): + +2011-07-16 Filip Pizlo <fpizlo@apple.com> + + DFG speculative JIT has dead code for slow calls for branches. + https://bugs.webkit.org/show_bug.cgi?id=64653 + + Reviewed by Gavin Barraclough. + + Removed SpeculativeJIT::compilePeepHoleCall. + + * dfg/DFGSpeculativeJIT.cpp: + * dfg/DFGSpeculativeJIT.h: + +2011-07-15 Mark Rowe <mrowe@apple.com> + + Fix the build. + + * dfg/DFGGraph.h: + +2011-07-15 Gavin Barraclough <barraclough@apple.com> + + NativeError.prototype objects have [[Class]] of "Object" but should be "Error" + https://bugs.webkit.org/show_bug.cgi?id=55346 + + Reviewed by Sam Weinig. + + * runtime/ErrorPrototype.cpp: + (JSC::ErrorPrototype::ErrorPrototype): + - Switch to putDirect since we're not the only ones tranitioning this Structure now. + * runtime/NativeErrorPrototype.cpp: + (JSC::NativeErrorPrototype::NativeErrorPrototype): + * runtime/NativeErrorPrototype.h: + - Switch base class to ErrorPrototype. + +2011-07-15 Gavin Barraclough <barraclough@apple.com> + + DFG JIT - Where arguments passed are integers, speculate this. + https://bugs.webkit.org/show_bug.cgi?id=64630 + + Reviewed by Sam Weinig. + + Presently the DFG JIT is overly aggressively predicting double. + Use a bit of dynamic information, and curtail this a little. + + * dfg/DFGGraph.cpp: + (JSC::DFG::Graph::predictArgumentTypes): + - Check for integer arguments. + * dfg/DFGGraph.h: + - Function declaration. + * runtime/Executable.cpp: + (JSC::tryDFGCompile): + (JSC::FunctionExecutable::compileForCallInternal): + - Add call to predictArgumentTypes. + +2011-07-15 Filip Pizlo <fpizlo@apple.com> + + DFG JIT is inconsistent about fusing branches and speculating + integer comparisons for branches. + https://bugs.webkit.org/show_bug.cgi?id=64573 + + Reviewed by Gavin Barraclough. + + This patch moves some of NonSpeculativeJIT's functionality up into the + JITCodeGenerator superclass so that it can be used from both JITs. Now, + in cases where the speculative JIT doesn't want to speculate but still + wants to emit good code, it can reliably emit the same code sequence as + the non-speculative JIT. This patch also extends the non-speculative + JIT's compare optimizations to include compare/branch fusing, and + extends the speculative JIT's compare optimizations to cover StrictEqual. + + * dfg/DFGJITCodeGenerator.cpp: + (JSC::DFG::JITCodeGenerator::isKnownInteger): + (JSC::DFG::JITCodeGenerator::isKnownNumeric): + (JSC::DFG::JITCodeGenerator::nonSpeculativePeepholeBranch): + (JSC::DFG::JITCodeGenerator::nonSpeculativeCompare): + * dfg/DFGJITCodeGenerator.h: + (JSC::DFG::JITCodeGenerator::detectPeepHoleBranch): + * dfg/DFGNonSpeculativeJIT.cpp: + (JSC::DFG::NonSpeculativeJIT::compile): + * dfg/DFGNonSpeculativeJIT.h: + * dfg/DFGOperations.cpp: + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::compare): + (JSC::DFG::SpeculativeJIT::compile): + * dfg/DFGSpeculativeJIT.h: + * wtf/Platform.h: + +2011-07-14 Gavin Barraclough <barraclough@apple.com> + + https://bugs.webkit.org/show_bug.cgi?id=64250 + Global strict mode function leaking global object as "this". + + Reviewed by Oliver Hunt. + + The root problem here is that we pass the wrong values into + calls, and then try to fix them up in the callee. Correct + behaviour per the spec is to pass in the value undefined, + as this unless either (1) the function call is based on an + explicit property access or (2) the base of the call comes + directly from a 'with'. + + This change does away with the need for this conversion of + objects (non strict code should only box primitives), and + does away with all this conversion for strict functions. + + This patch may have web compatibility ramifications, and may + require some advocacy. + + * bytecode/CodeBlock.cpp: + (JSC::CodeBlock::dump): + - Removed op_convert_this_strict, added op_resolve_with_this. + * bytecode/Opcode.h: + - Removed op_convert_this_strict, added op_resolve_with_this. + * bytecompiler/BytecodeGenerator.cpp: + (JSC::BytecodeGenerator::BytecodeGenerator): + (JSC::BytecodeGenerator::emitResolveWithThis): + - Removed op_convert_this_strict, added op_resolve_with_this. + * bytecompiler/BytecodeGenerator.h: + - Removed op_convert_this_strict, added op_resolve_with_this. + * bytecompiler/NodesCodegen.cpp: + (JSC::EvalFunctionCallNode::emitBytecode): + (JSC::FunctionCallResolveNode::emitBytecode): + - Removed op_convert_this_strict, added op_resolve_with_this. + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::compile): + - Change NeedsThisConversion check to test for JSString's vptr + (objects no longer need conversion). + * interpreter/Interpreter.cpp: + (JSC::Interpreter::resolveThisAndProperty): + - Based on resolveBaseAndProperty, but produce correct this value. + (JSC::Interpreter::privateExecute): + - Removed op_convert_this_strict, added op_resolve_with_this. + * interpreter/Interpreter.h: + * jit/JIT.cpp: + (JSC::JIT::privateCompileMainPass): + (JSC::JIT::privateCompileSlowCases): + - Removed op_convert_this_strict, added op_resolve_with_this. + * jit/JIT.h: + * jit/JITOpcodes.cpp: + (JSC::JIT::emit_op_resolve_with_this): + - Removed op_convert_this_strict, added op_resolve_with_this. + (JSC::JIT::emit_op_convert_this): + (JSC::JIT::emitSlow_op_convert_this): + - Change NeedsThisConversion check to test for JSString's vptr + (objects no longer need conversion). + * jit/JITOpcodes32_64.cpp: + (JSC::JIT::emit_op_resolve_with_this): + - Removed op_convert_this_strict, added op_resolve_with_this. + (JSC::JIT::emit_op_convert_this): + (JSC::JIT::emitSlow_op_convert_this): + - Change NeedsThisConversion check to test for JSString's vptr + (objects no longer need conversion). + * jit/JITStubs.cpp: + (JSC::DEFINE_STUB_FUNCTION): + - Removed op_convert_this_strict, added op_resolve_with_this. + * jit/JITStubs.h: + - Removed op_convert_this_strict, added op_resolve_with_this. + * runtime/JSActivation.h: + - removed NeedsThisConversion flag, added IsEnvironmentRecord. + * runtime/JSStaticScopeObject.h: + - removed NeedsThisConversion flag, added IsEnvironmentRecord. + * runtime/JSString.h: + (JSC::RopeBuilder::createStructure): + - removed NeedsThisConversion. + * runtime/JSTypeInfo.h: + (JSC::TypeInfo::isEnvironmentRecord): + (JSC::TypeInfo::overridesHasInstance): + - removed NeedsThisConversion flag, added IsEnvironmentRecord. + * runtime/JSValue.h: + - removed NeedsThisConversion. + * runtime/JSVariableObject.h: + - Corrected StructureFlags inheritance. + * runtime/StrictEvalActivation.h: + (JSC::StrictEvalActivation::createStructure): + - Added IsEnvironmentRecord to StructureFlags, addded createStructure. + * runtime/Structure.h: + - removed NeedsThisConversion. + * tests/mozilla/ecma/String/15.5.4.6-2.js: + (getTestCases): + - Removed invalid test case. + +2011-07-15 Sheriff Bot <webkit.review.bot@gmail.com> + + Unreviewed, rolling out r91082, r91087, and r91089. + http://trac.webkit.org/changeset/91082 + http://trac.webkit.org/changeset/91087 + http://trac.webkit.org/changeset/91089 + https://bugs.webkit.org/show_bug.cgi?id=64616 + + gtk tests are failing a lot after this change. (Requested by + dave_levin on #webkit). + + * wtf/ThreadIdentifierDataPthreads.cpp: + (WTF::ThreadIdentifierData::identifier): + (WTF::ThreadIdentifierData::initialize): + (WTF::ThreadIdentifierData::initializeKeyOnceHelper): + (WTF::ThreadIdentifierData::initializeKeyOnce): + * wtf/ThreadIdentifierDataPthreads.h: + * wtf/ThreadingPthreads.cpp: + (WTF::initializeThreading): + +2011-07-15 David Levin <levin@chromium.org> + + Another attempted build fix. + + * wtf/ThreadIdentifierDataPthreads.cpp: Add include to pick + up the definition of PTHREAD_KEYS_MAX. + +2011-07-15 David Levin <levin@chromium.org> + + Chromium build fix. + + * wtf/ThreadIdentifierDataPthreads.cpp: Add include to pick + up the definition of PTHREAD_KEYS_MAX. + +2011-07-14 David Levin <levin@chromium.org> + + currentThread is too slow! + https://bugs.webkit.org/show_bug.cgi?id=64577 + + Reviewed by Darin Adler and Dmitry Titov. + + The problem is that currentThread results in a pthread_once call which always takes a lock. + With this change, currentThread is 10% faster than isMainThread in release mode and only + 5% slower than isMainThread in debug. + + * wtf/ThreadIdentifierDataPthreads.cpp: + (WTF::ThreadIdentifierData::initializeOnce): Remove the pthread once stuff + which is no longer needed because this is called from initializeThreading(). + (WTF::ThreadIdentifierData::identifier): Remove the initializeKeyOnce call because + intialization of the pthread key should already be done. + (WTF::ThreadIdentifierData::initialize): Ditto. + * wtf/ThreadIdentifierDataPthreads.h: + * wtf/ThreadingPthreads.cpp: + (WTF::initializeThreading): Acquire the pthread key here. + +2011-07-14 Filip Pizlo <fpizlo@apple.com> + + DFG JIT does not optimize Branch as well as it could. + https://bugs.webkit.org/show_bug.cgi?id=64574 + + Reviewed by Gavin Barraclough. + + This creates a common code path for emitting unfused branches, which does + no speculation, and only performs a slow call if absolutely necessary. + + * dfg/DFGJITCodeGenerator.cpp: + (JSC::DFG::JITCodeGenerator::emitBranch): + * dfg/DFGJITCodeGenerator.h: + * dfg/DFGNonSpeculativeJIT.cpp: + (JSC::DFG::NonSpeculativeJIT::compile): + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::compile): + +2011-07-14 Filip Pizlo <fpizlo@apple.com> + + GC allocation fast path has too many operations. + https://bugs.webkit.org/show_bug.cgi?id=64493 + + Reviewed by Darin Adler. + + Changed the timing of the lazy sweep so that it occurs when we land on + a previously-unsweeped block, rather than whenever we land on an unsweeped + cell. After the per-block lazy sweep occurs, the block is turned into a + singly linked list of free cells. The allocation fast path is now just a + load-branch-store to remove a cell from the head of the list. + + Additionally, this changes the way new blocks are allocated. Previously, + they would be populated with dummy cells. With this patch, they are + turned into a free list, which means that there will never be destructor + calls for allocations in fresh blocks. + + These changes result in a 1.9% speed-up on V8, and a 0.6% speed-up on + SunSpider. There are no observed statistically significant slow-downs + on any individual benchmark. + + * JavaScriptCore.exp: + * heap/Heap.cpp: + (JSC::Heap::allocateSlowCase): + (JSC::Heap::collect): + (JSC::Heap::canonicalizeBlocks): + (JSC::Heap::resetAllocator): + * heap/Heap.h: + (JSC::Heap::forEachProtectedCell): + (JSC::Heap::forEachCell): + (JSC::Heap::forEachBlock): + (JSC::Heap::allocate): + * heap/MarkedBlock.cpp: + (JSC::MarkedBlock::MarkedBlock): + (JSC::MarkedBlock::lazySweep): + (JSC::MarkedBlock::blessNewBlockForFastPath): + (JSC::MarkedBlock::blessNewBlockForSlowPath): + (JSC::MarkedBlock::canonicalizeBlock): + * heap/MarkedBlock.h: + * heap/NewSpace.cpp: + (JSC::NewSpace::addBlock): + (JSC::NewSpace::canonicalizeBlocks): + * heap/NewSpace.h: + (JSC::NewSpace::allocate): + (JSC::NewSpace::SizeClass::SizeClass): + (JSC::NewSpace::SizeClass::canonicalizeBlock): + * heap/OldSpace.cpp: + (JSC::OldSpace::addBlock): + +2011-07-14 Filip Pizlo <fpizlo@apple.com> + + DFG JIT crashes on host constructor calls in debug mode. + https://bugs.webkit.org/show_bug.cgi?id=64562 + + Reviewed by Gavin Barraclough. + + Fixed the relevant ASSERT. + + * dfg/DFGOperations.cpp: + +2011-07-14 Filip Pizlo <fpizlo@apple.com> + + DFG speculative JIT contains a FIXME for rewinding speculative code generation that + has already been fixed. + https://bugs.webkit.org/show_bug.cgi?id=64022 + + Reviewed by Gavin Barraclough. + + * dfg/DFGSpeculativeJIT.h: + (JSC::DFG::SpeculativeJIT::terminateSpeculativeExecution): + +2011-07-14 Ryuan Choi <ryuan.choi@samsung.com> + + [EFL] Add OwnPtr specialization for Ecore_Pipe. + https://bugs.webkit.org/show_bug.cgi?id=64515 + + Add an overload for deleteOwnedPtr(Ecore_Pipe*) on EFL port. + + Reviewed by Xan Lopez. + + * wtf/OwnPtrCommon.h: + * wtf/efl/OwnPtrEfl.cpp: + (WTF::deleteOwnedPtr): + +2011-07-14 Filip Pizlo <fpizlo@apple.com> + + DFG JIT unnecessarily boxes and unboxes values during silent spilling. + https://bugs.webkit.org/show_bug.cgi?id=64068 + + Reviewed by Gavin Barraclough. + + Silent spilling and filling of registers is done during slow-path C + function calls. The silent spill/fill logic does not affect register + allocation on paths that don't involve the C function call. + + This changes the silent spilling code to spill in unboxed form. The + silent fill will refill in whatever form the register was spilled in. + For example, the silent spill code may choose not to spill the register + because it was already spilled previously, which would imply that it + was spilled in boxed form. The filling code detects this and either + unboxes, or not, depending on what is appropriate. + + This change also results in a simplification of the silent spill/fill + API: silent spilling no longer needs to know about the set of registers + that cannot be trampled, since it never does boxing and hence does not + need a temporary register. + + * dfg/DFGJITCodeGenerator.cpp: + (JSC::DFG::JITCodeGenerator::cachedGetById): + (JSC::DFG::JITCodeGenerator::cachedPutById): + * dfg/DFGJITCodeGenerator.h: + (JSC::DFG::JITCodeGenerator::silentSpillGPR): + (JSC::DFG::JITCodeGenerator::silentSpillFPR): + (JSC::DFG::JITCodeGenerator::silentFillFPR): + (JSC::DFG::JITCodeGenerator::silentSpillAllRegisters): + * dfg/DFGNonSpeculativeJIT.cpp: + (JSC::DFG::NonSpeculativeJIT::valueToNumber): + (JSC::DFG::NonSpeculativeJIT::valueToInt32): + (JSC::DFG::NonSpeculativeJIT::knownConstantArithOp): + (JSC::DFG::NonSpeculativeJIT::basicArithOp): + (JSC::DFG::NonSpeculativeJIT::compare): + (JSC::DFG::NonSpeculativeJIT::compile): + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::compile): + +2011-07-13 Michael Saboff <msaboff@apple.com> + + https://bugs.webkit.org/show_bug.cgi?id=64202 + Enh: Improve handling of RegExp in the form of /.*blah.*/ + + Reviewed by Gavin Barraclough. + + Added code to both the Yarr interpreter and JIT to handle + these expressions a little differently. First off, the terms + in between the leading and trailing .*'s cannot capture and + also this enhancement is limited to single alternative expressions. + If an expression is of the right form with the aforementioned + restrictions, we process the inner terms and then look for the + beginning of the string and end of the string. There is handling + for multiline expressions to allow the beginning and end to be + right after and right before newlines. + + This enhancement speeds up expressions of this type 12x on + a MacBookPro. + + Cleaned up 'case' statement indentation. + + A new set of tests was added as LayoutTests/fast/regex/dotstar.html + + * yarr/YarrInterpreter.cpp: + (JSC::Yarr::Interpreter::InputStream::end): + (JSC::Yarr::Interpreter::matchDotStarEnclosure): + (JSC::Yarr::Interpreter::matchDisjunction): + (JSC::Yarr::ByteCompiler::assertionDotStarEnclosure): + (JSC::Yarr::ByteCompiler::emitDisjunction): + * yarr/YarrInterpreter.h: + (JSC::Yarr::ByteTerm::DotStarEnclosure): + * yarr/YarrJIT.cpp: + (JSC::Yarr::YarrGenerator::generateDotStarEnclosure): + (JSC::Yarr::YarrGenerator::backtrackDotStarEnclosure): + (JSC::Yarr::YarrGenerator::generateTerm): + (JSC::Yarr::YarrGenerator::backtrackTerm): + * yarr/YarrPattern.cpp: + (JSC::Yarr::YarrPatternConstructor::setupAlternativeOffsets): + (JSC::Yarr::YarrPatternConstructor::containsCapturingTerms): + (JSC::Yarr::YarrPatternConstructor::optimizeDotStarWrappedExpressions): + (JSC::Yarr::YarrPattern::compile): + * yarr/YarrPattern.h: + (JSC::Yarr::PatternTerm::PatternTerm): + +2011-07-13 Xan Lopez <xlopez@igalia.com> + + [GTK] Fix distcheck + + Reviewed by Martin Robinson. + + * GNUmakefile.list.am: add missing files. + +2011-07-13 Filip Pizlo <fpizlo@apple.com> + + DFG JIT does not implement prototype chain or list caching for get_by_id. + https://bugs.webkit.org/show_bug.cgi?id=64147 + + Reviewed by Gavin Barraclough. + + This implements unified support for prototype caching, prototype chain + caching, and polymorphic (i.e. list) prototype and prototype chain + caching. This is done by creating common code for emitting prototype + or chain access stubs, and having it factored out into + generateProtoChainAccessStub(). This function is called by + tryCacheGetByID once the latter determines that some form of prototype + access caching is necessary (i.e. the slot being accessed is not on the + base value but on some other object). + + Direct prototype list, and prototype chain list, caching is implemented by + linking the slow path to operationGetByIdProtoBuildList(), which uses the + same helper function (generateProtoChainAccessStub()) as tryCacheGetByID. + + This change required ensuring that the value in the scratchGPR field in + StructureStubInfo is preserved even after the stub info is in the + chain, or proto_list, states. Hence scratchGPR was moved out of the union + and into the top-level of StructureStubInfo. + + * bytecode/StructureStubInfo.h: + * dfg/DFGJITCompiler.cpp: + (JSC::DFG::JITCompiler::compileFunction): + * dfg/DFGOperations.cpp: + * dfg/DFGOperations.h: + * dfg/DFGRepatch.cpp: + (JSC::DFG::emitRestoreScratch): + (JSC::DFG::linkRestoreScratch): + (JSC::DFG::generateProtoChainAccessStub): + (JSC::DFG::tryCacheGetByID): + (JSC::DFG::tryBuildGetByIDProtoList): + (JSC::DFG::dfgBuildGetByIDProtoList): + (JSC::DFG::tryCachePutByID): + * dfg/DFGRepatch.h: + +2011-07-12 Brent Fulgham <bfulgham@webkit.org> + + Standardize WinCairo conditionalized code under PLATFORM macro. + https://bugs.webkit.org/show_bug.cgi?id=64377 + + Reviewed by Maciej Stachowiak. + + * wtf/Platform.h: Update to use PLATFORM(WIN_CAIRO) for tests. + +2011-07-13 David Levin <levin@chromium.org> + + Possible race condition in ThreadIdentifierData::initializeKeyOnce and shouldCallRealDebugger. + https://bugs.webkit.org/show_bug.cgi?id=64465 + + Reviewed by Dmitry Titov. + + There isn't a good way to test this as it is very highly unlikely to occur. + + * wtf/ThreadIdentifierDataPthreads.cpp: + (WTF::ThreadIdentifierData::initializeKeyOnce): Since scoped static initialization + isn't thread-safe, change the initialization to be global. + +2011-07-12 Gavin Barraclough <barraclough@apple.com> + + https://bugs.webkit.org/show_bug.cgi?id=64424 + Our direct eval behaviour deviates slightly from the spec. + + Reviewed by Oliver Hunt. + + The ES5 spec defines a concept of 'Direct Call to Eval' (see section 15.1.2.1.1), where + behaviour will differ from that of an indirect call (e.g. " { eval: window.eval }.eval();" + or "var a = eval; a();" are indirect calls), particularly in non-strict scopes variables + may be introduced into the caller's environment. + + ES5 direct calls are any call where the callee function is provided by a reference, a base + of that Reference is an EnvironmentRecord (this corresponds to all productions + "PrimaryExpression: Identifier", see 10.2.2.1 GetIdentifierReference), and where the name + of the reference is "eval". This means any expression of the form "eval(...)", and that + calls the standard built in eval method from on the Global Object, is considered to be + direct. + + In JavaScriptCore we are currently overly restrictive. We also check that the + EnvironmentRecord that is the base of the reference is the Declaractive Environment Record + at the root of the scope chain, corresponding to the Global Object - an "eval(..)" statement + that hits a var eval in a nested scope is not considered to be direct. This behaviour does + not emanate from the spec, and is incorrect. + + * interpreter/Interpreter.cpp: + (JSC::Interpreter::privateExecute): + - Fixed direct eval check in op_call_eval. + * jit/JITStubs.cpp: + (JSC::DEFINE_STUB_FUNCTION): + - Fixed direct eval check in op_call_eval. + * runtime/Executable.h: + (JSC::isHostFunction): + - Added check for host function with specific NativeFunction. + +2011-07-13 Ademar de Souza Reis Jr. <ademar.reis@openbossa.org> + + Reviewed by Andreas Kling. + + Broken build on QNX + https://bugs.webkit.org/show_bug.cgi?id=63717 + + QNX doesn't support pthread's SA_RESTART (required by + JSC_MULTIPLE_THREADS), JIT is broken at runtime and there a + few minor compilation errors here and there. + + Original patch by Ritt Konstantin <ritt.ks@gmail.com>, also + tested by him on QNX v6.5 (x86) + + * wtf/DateMath.cpp: fix usage of abs/labs + * wtf/Platform.h: Disable JIT and JSC_MULTIPLE_THREADS + * wtf/StackBounds.cpp: Add a couple of missing includes (and sort them) + +2011-07-12 Anders Carlsson <andersca@apple.com> + + If a compiler has nullptr support, include <cstddef> to get the nullptr_t definition + https://bugs.webkit.org/show_bug.cgi?id=64429 + + Include the cstddef which has the nullptr_t typedef according to the C++0x standard. + + * wtf/NullPtr.h: + +2011-07-13 MORITA Hajime <morrita@google.com> + + Refactoring: Ignored ExceptionCode value should be less annoying. + https://bugs.webkit.org/show_bug.cgi?id=63688 + + Added ASSERT_AT macro. + + Reviewed by Darin Adler. + + * wtf/Assertions.h: + +2011-07-12 Filip Pizlo <fpizlo@apple.com> + + DFG JIT does not implement op_construct. + https://bugs.webkit.org/show_bug.cgi?id=64066 + + Reviewed by Gavin Barraclough. + + This is a fixed implementation of op_construct. Constructor calls are implemented + by reusing almost all of the code for Call, with care taken to make sure that + where the are differences (like selecting different code blocks), those differences + are respected. The two fixes over the last patch are: (1) make sure the + CodeBlock::unlinkCalls respects differences between Call and Construct, and (2) + make sure that virtualFor() in DFGOperations respects the CodeSpecializationKind + (either CodeForCall or CodeForConstruct) when invoking the compiler. + + * dfg/DFGAliasTracker.h: + (JSC::DFG::AliasTracker::recordConstruct): + * dfg/DFGByteCodeParser.cpp: + (JSC::DFG::ByteCodeParser::addCall): + (JSC::DFG::ByteCodeParser::parseBlock): + * dfg/DFGJITCodeGenerator.cpp: + (JSC::DFG::JITCodeGenerator::emitCall): + * dfg/DFGNode.h: + * dfg/DFGNonSpeculativeJIT.cpp: + (JSC::DFG::NonSpeculativeJIT::compile): + * dfg/DFGOperations.cpp: + * dfg/DFGOperations.h: + * dfg/DFGRepatch.cpp: + (JSC::DFG::dfgLinkFor): + * dfg/DFGRepatch.h: + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::compile): + * runtime/CodeBlock.cpp: + (JSC::CodeBlock::unlinkCalls): + +2011-07-12 Oliver Hunt <oliver@apple.com> + + Overzealous type validation in method_check + https://bugs.webkit.org/show_bug.cgi?id=64415 + + Reviewed by Gavin Barraclough. + + method_check is essentially just a value look up + optimisation, but it internally stores the value + as a JSFunction, even though it never relies on + this fact. Under GC validation however we end up + trying to enforce that assumption. The fix is + simply to store the value as a correct supertype. + + * bytecode/CodeBlock.h: + * dfg/DFGRepatch.cpp: + (JSC::DFG::dfgRepatchGetMethodFast): + (JSC::DFG::tryCacheGetMethod): + * jit/JIT.h: + * jit/JITPropertyAccess.cpp: + (JSC::JIT::patchMethodCallProto): + * jit/JITStubs.cpp: + (JSC::DEFINE_STUB_FUNCTION): + +2011-07-12 Filip Pizlo <fpizlo@apple.com> + + COLLECT_ON_EVERY_ALLOCATION no longer works. + https://bugs.webkit.org/show_bug.cgi?id=64388 + + Reviewed by Oliver Hunt. + + Added a flag to Heap that determines if it's safe to collect (which for now means that + JSGlobalObject has actually been initialized, but it should work for other things, too). + This allows JSGlobalObject to allocate even if the allocator wants to GC; instead of + GCing it just grows the heap, if necessary. + + Then changed Heap::allocate() to not recurse ad infinitum when + COLLECT_ON_EVERY_ALLOCATION is set. This also makes the allocator generally more + resilient against bugs; this change allowed me to put in handy assertions, such as that + an allocation must succeed after either a collection or after a new block was added. + + * heap/Heap.cpp: + (JSC::Heap::Heap): + (JSC::Heap::tryAllocate): + (JSC::Heap::allocate): + (JSC::Heap::collectAllGarbage): + (JSC::Heap::collect): + * heap/Heap.h: + (JSC::Heap::notifyIsSafeToCollect): + * runtime/JSGlobalData.cpp: + (JSC::JSGlobalData::JSGlobalData): + +2011-07-12 Filip Pizlo <fpizlo@apple.com> + + DFG JIT put_by_id transition caching does not inform the GC about the structure and + prototype chain that it is referencing. + https://bugs.webkit.org/show_bug.cgi?id=64387 + + Reviewed by Gavin Barraclough. + + Fixed the relevant code in DFGRepatch to call StructureStubInfo::initPutByIdTransition(). + + * dfg/DFGRepatch.cpp: + (JSC::DFG::tryCachePutByID): + +2011-07-12 Adam Roben <aroben@apple.com> + + Ensure no intermediate WTF::Strings are created when concatenating with string literals + + Fixes <http://webkit.org/b/63330> Concatenating string literals and WTF::Strings using + operator+ is suboptimal + + Reviewed by Darin Adler. + + * wtf/text/StringConcatenate.h: + (WTF::StringTypeAdapter<String>::writeTo): Added a macro that can be used for testing how + many WTF::Strings get copied while evaluating an operator+ expression. + + * wtf/text/StringOperators.h: + (WTF::operator+): Changed the overload that takes a StringAppend to take it on the left-hand + side, since operator+ is left-associative. Having the StringAppend on the right-hand side + was causing us to make intermediate WTF::Strings when evaluating expressions that contained + multiple calls to operator+. Added some more overloads for that take a left-hand side of + const char* to resolve overload ambiguity for certain expressions. Added overloads that take + a left-hand side of const UChar* (matching the const char* overloads) so that wide string + literals don't first have to be converted to a WTF::String in operator+ expressions. + +2011-07-12 Adam Roben <aroben@apple.com> + + Unreviewed, rolling out r90811. + http://trac.webkit.org/changeset/90811 + https://bugs.webkit.org/show_bug.cgi?id=61025 + + Several svg tests failing assertions beneath + SVGSMILElement::findInstanceTime + + * wtf/StdLibExtras.h: + (WTF::binarySearch): + +2011-07-12 Oliver Varga <Varga.Oliver@stud.u-szeged.hu> + + Reviewed by Nikolas Zimmermann. + + Speed up SVGSMILElement::findInstanceTime. + https://bugs.webkit.org/show_bug.cgi?id=61025 + + Add a new parameter to StdlibExtras.h::binarySerarch function + to also handle cases when the array does not contain the key value. + This is needed for an svg function. + + * wtf/StdLibExtras.h: + (WTF::binarySearch): + +2011-07-11 Filip Pizlo <fpizlo@apple.com> + + DFG speculative JIT does not guard itself against floating point speculation + failures on non-floating-point constants. + https://bugs.webkit.org/show_bug.cgi?id=64330 + + Reviewed by Gavin Barraclough. + + Made fillSpeculateDouble immediate invoke terminateSpeculativeExecution() as + soon as it notices that it's speculating on something that is a non-numeric + JSConstant. + + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::fillSpeculateDouble): + +2011-07-11 Filip Pizlo <fpizlo@apple.com> + + DFG Speculative JIT does not always insert speculation checks when speculating + arrays. + https://bugs.webkit.org/show_bug.cgi?id=64254 + + Reviewed by Gavin Barraclough. + + Changed the SetLocal instruction to always validate that the value being stored + into the local variable is an array, if that variable was marked PredictArray. + This is necessary since uses of arrays assume that if a PredictArray value is + in a local variable then the speculation check validating that the value is an + array was already performed. + + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::compile): + +2011-07-11 Gabor Loki <loki@webkit.org> + + Fix the condition of the optimized code in doubleTransfer + https://bugs.webkit.org/show_bug.cgi?id=64261 + + Reviewed by Zoltan Herczeg. + + The condition of the optimized code in doubleTransfer is wrong. The + data transfer should be executed with four bytes aligned address. + VFP cannot perform unaligned memory access. + + Reported by Jacob Bramley. + + * assembler/ARMAssembler.cpp: + (JSC::ARMAssembler::doubleTransfer): + +2011-07-11 Gabor Loki <loki@webkit.org> + + Signed arithmetic bug in dataTransfer32. + https://bugs.webkit.org/show_bug.cgi?id=64257 + + Reviewed by Zoltan Herczeg. + + An arithmetic bug is fixed. If the offset of dataTransfer is half of the + addressable memory space on a 32-bit machine (-2147483648 = 0x80000000) + a load instruction is emitted with a wrong zero offset. + + Inspired by Jacob Bramley's patch from JaegerMonkey. + + * assembler/ARMAssembler.cpp: + (JSC::ARMAssembler::dataTransfer32): + +2011-07-09 Thouraya Andolsi <thouraya.andolsi@st.com> + + Fix unaligned userspace access for SH4 platforms. + https://bugs.webkit.org/show_bug.cgi?id=62993 + + * wtf/Platform.h: + +2011-07-09 Chao-ying Fu <fu@mips.com> + + Fix MIPS build due to readInt32 and readPointer + https://bugs.webkit.org/show_bug.cgi?id=63962 + + * assembler/MIPSAssembler.h: + (JSC::MIPSAssembler::readInt32): + (JSC::MIPSAssembler::readPointer): + * assembler/MacroAssemblerMIPS.h: + (JSC::MacroAssemblerMIPS::rshift32): + +2011-07-08 Gavin Barraclough <barraclough@apple.com> + + https://bugs.webkit.org/show_bug.cgi?id=64181 + REGRESSION (r90602): Gmail doesn't load + + Rolling out r90601, r90602. + + * dfg/DFGAliasTracker.h: + * dfg/DFGByteCodeParser.cpp: + (JSC::DFG::ByteCodeParser::addVarArgChild): + (JSC::DFG::ByteCodeParser::parseBlock): + * dfg/DFGJITCodeGenerator.cpp: + (JSC::DFG::JITCodeGenerator::emitCall): + * dfg/DFGNode.h: + * dfg/DFGNonSpeculativeJIT.cpp: + (JSC::DFG::NonSpeculativeJIT::compile): + * dfg/DFGOperations.cpp: + * dfg/DFGOperations.h: + * dfg/DFGRepatch.cpp: + (JSC::DFG::tryCacheGetByID): + (JSC::DFG::dfgLinkCall): + * dfg/DFGRepatch.h: + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::compile): + * runtime/JSObject.h: + (JSC::JSObject::isUsingInlineStorage): + +2011-07-08 Kalev Lember <kalev@smartlink.ee> + + Reviewed by Adam Roben. + + Add missing _WIN32_WINNT and WINVER definitions + https://bugs.webkit.org/show_bug.cgi?id=59702 + + Moved _WIN32_WINNT and WINVER definitions to config.h so that they are + available for all source files. + + In particular, wtf/FastMalloc.cpp uses CreateTimerQueueTimer and + DeleteTimerQueueTimer which are both guarded by + #if (_WIN32_WINNT >= 0x0500) + in MinGW headers. + + * config.h: + * wtf/Assertions.cpp: + +2011-07-08 Chang Shu <cshu@webkit.org> + + Rename "makeSecure" to "fill" and remove the support for displaying last character + to avoid layering violatation. + https://bugs.webkit.org/show_bug.cgi?id=59114 + + Reviewed by Alexey Proskuryakov. + + * JavaScriptCore.exp: + * JavaScriptCore.order: + * wtf/text/StringImpl.cpp: + (WTF::StringImpl::fill): + * wtf/text/StringImpl.h: + * wtf/text/WTFString.h: + (WTF::String::fill): + +2011-07-08 Benjamin Poulain <benjamin@webkit.org> + + [WK2] Do not forward touch events to the web process when it does not need them + https://bugs.webkit.org/show_bug.cgi?id=64164 + + Reviewed by Kenneth Rohde Christiansen. + + Add a convenience function to obtain a reference to the last element of a Deque. + + * wtf/Deque.h: + (WTF::Deque::last): + +2011-07-07 Filip Pizlo <fpizlo@apple.com> + + DFG JIT does not implement op_construct. + https://bugs.webkit.org/show_bug.cgi?id=64066 + + Reviewed by Gavin Barraclough. + + * dfg/DFGAliasTracker.h: + (JSC::DFG::AliasTracker::recordConstruct): + * dfg/DFGByteCodeParser.cpp: + (JSC::DFG::ByteCodeParser::addCall): + (JSC::DFG::ByteCodeParser::parseBlock): + * dfg/DFGJITCodeGenerator.cpp: + (JSC::DFG::JITCodeGenerator::emitCall): + * dfg/DFGNode.h: + * dfg/DFGNonSpeculativeJIT.cpp: + (JSC::DFG::NonSpeculativeJIT::compile): + * dfg/DFGOperations.cpp: + * dfg/DFGOperations.h: + * dfg/DFGRepatch.cpp: + (JSC::DFG::dfgLinkFor): + * dfg/DFGRepatch.h: + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::compile): + +2011-07-07 Filip Pizlo <fpizlo@apple.com> + + DFG JIT does not implement get_by_id prototype caching. + https://bugs.webkit.org/show_bug.cgi?id=64077 + + Reviewed by Gavin Barraclough. + + * dfg/DFGRepatch.cpp: + (JSC::DFG::emitRestoreScratch): + (JSC::DFG::linkRestoreScratch): + (JSC::DFG::tryCacheGetByID): + * runtime/JSObject.h: + (JSC::JSObject::addressOfPropertyAtOffset): + +2011-07-07 Filip Pizlo <fpizlo@apple.com> + + DFG JIT method_check implementation does not link to optimized get_by_id + slow path. + https://bugs.webkit.org/show_bug.cgi?id=64073 + + Reviewed by Gavin Barraclough. + + * dfg/DFGRepatch.cpp: + (JSC::DFG::dfgRepatchGetMethodFast): + +2011-07-07 Oliver Hunt <oliver@apple.com> + + Encode jump and link sizes into the appropriate enums + https://bugs.webkit.org/show_bug.cgi?id=64123 + + Reviewed by Sam Weinig. + + Finally kill off the out of line jump and link size arrays, + so we can avoid icky loads and constant fold the linking arithmetic. + + * assembler/ARMv7Assembler.cpp: + * assembler/ARMv7Assembler.h: + (JSC::ARMv7Assembler::jumpSizeDelta): + (JSC::ARMv7Assembler::computeJumpType): + +2011-07-06 Juan C. Montemayor <jmont@apple.com> + + ASSERT_NOT_REACHED running test 262 + https://bugs.webkit.org/show_bug.cgi?id=63951 + + Added a case to the switch statement where the code was failing. Fixed + some logic as well that gave faulty error messages. + + Reviewed by Gavin Barraclough. + + * parser/JSParser.cpp: + (JSC::JSParser::getTokenName): + (JSC::JSParser::updateErrorMessageSpecialCase): + (JSC::JSParser::updateErrorMessage): + +2011-07-06 Filip Pizlo <fpizlo@apple.com> + + DFG JIT implementation of op_call results in regressions on sunspider + controlflow-recursive. + https://bugs.webkit.org/show_bug.cgi?id=64039 + + Reviewed by Gavin Barraclough. + + * dfg/DFGByteCodeParser.cpp: + (JSC::DFG::ByteCodeParser::isSmallInt32Constant): + (JSC::DFG::ByteCodeParser::parseBlock): + * dfg/DFGSpeculativeJIT.h: + (JSC::DFG::SpeculativeJIT::isInteger): + +2011-07-06 Filip Pizlo <fpizlo@apple.com> + + DFG JIT does not support method_check + https://bugs.webkit.org/show_bug.cgi?id=63972 + + Reviewed by Gavin Barraclough. + + * assembler/CodeLocation.h: + (JSC::CodeLocationPossiblyNearCall::CodeLocationPossiblyNearCall): + * bytecode/CodeBlock.cpp: + (JSC::CodeBlock::visitAggregate): + * bytecode/CodeBlock.h: + (JSC::MethodCallLinkInfo::MethodCallLinkInfo): + (JSC::MethodCallLinkInfo::seenOnce): + (JSC::MethodCallLinkInfo::setSeen): + * dfg/DFGAliasTracker.h: + (JSC::DFG::AliasTracker::recordGetMethod): + * dfg/DFGByteCodeParser.cpp: + (JSC::DFG::ByteCodeParser::parseBlock): + * dfg/DFGJITCodeGenerator.cpp: + (JSC::DFG::JITCodeGenerator::cachedGetById): + (JSC::DFG::JITCodeGenerator::cachedGetMethod): + * dfg/DFGJITCodeGenerator.h: + * dfg/DFGJITCompiler.cpp: + (JSC::DFG::JITCompiler::compileFunction): + * dfg/DFGJITCompiler.h: + (JSC::DFG::JITCompiler::addMethodGet): + (JSC::DFG::JITCompiler::MethodGetRecord::MethodGetRecord): + * dfg/DFGNode.h: + (JSC::DFG::Node::hasIdentifier): + * dfg/DFGNonSpeculativeJIT.cpp: + (JSC::DFG::NonSpeculativeJIT::compile): + * dfg/DFGOperations.cpp: + * dfg/DFGOperations.h: + * dfg/DFGRepatch.cpp: + (JSC::DFG::dfgRepatchGetMethodFast): + (JSC::DFG::tryCacheGetMethod): + (JSC::DFG::dfgRepatchGetMethod): + * dfg/DFGRepatch.h: + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::compile): + * jit/JITWriteBarrier.h: + (JSC::JITWriteBarrier::set): + +2011-07-06 Filip Pizlo <fpizlo@apple.com> + + DFG JIT op_call implementation will flush registers even when those registers are dead + https://bugs.webkit.org/show_bug.cgi?id=64023 + + Reviewed by Gavin Barraclough. + + * dfg/DFGJITCodeGenerator.cpp: + (JSC::DFG::JITCodeGenerator::emitCall): + * dfg/DFGJITCodeGenerator.h: + (JSC::DFG::JITCodeGenerator::integerResult): + (JSC::DFG::JITCodeGenerator::noResult): + (JSC::DFG::JITCodeGenerator::cellResult): + (JSC::DFG::JITCodeGenerator::jsValueResult): + (JSC::DFG::JITCodeGenerator::doubleResult): + * dfg/DFGNonSpeculativeJIT.cpp: + (JSC::DFG::NonSpeculativeJIT::compile): + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::compile): + +2011-07-06 Filip Pizlo <fpizlo@apple.com> + + DFG speculative JIT may crash when speculating int on a non-int JSConstant. + https://bugs.webkit.org/show_bug.cgi?id=64017 + + Reviewed by Gavin Barraclough. + + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::fillSpeculateIntInternal): + (JSC::DFG::SpeculativeJIT::compile): + +2011-07-06 Dmitriy Vyukov <dvyukov@google.com> + + Reviewed by David Levin. + + Allow substitution of dynamic annotations and prevent identical code folding by the linker. + https://bugs.webkit.org/show_bug.cgi?id=62443 + + * wtf/DynamicAnnotations.cpp: + (WTFAnnotateBenignRaceSized): + (WTFAnnotateHappensBefore): + (WTFAnnotateHappensAfter): + +2011-07-06 Zoltan Herczeg <zherczeg@inf.u-szeged.hu> + + Calls on 32 bit machines are failed after r90423 + https://bugs.webkit.org/show_bug.cgi?id=63980 + + Reviewed by Gavin Barraclough. + + Copy the necessary lines from JITCall.cpp. + + * jit/JITCall32_64.cpp: + (JSC::JIT::compileOpCall): + +2011-07-05 Filip Pizlo <fpizlo@apple.com> + + DFG JIT virtual call implementation is inefficient. + https://bugs.webkit.org/show_bug.cgi?id=63974 + + Reviewed by Gavin Barraclough. + + * dfg/DFGOperations.cpp: + * runtime/Executable.h: + (JSC::ExecutableBase::generatedJITCodeForCallWithArityCheck): + (JSC::ExecutableBase::generatedJITCodeForConstructWithArityCheck): + (JSC::ExecutableBase::generatedJITCodeWithArityCheckFor): + (JSC::ExecutableBase::hasJITCodeForCall): + (JSC::ExecutableBase::hasJITCodeForConstruct): + (JSC::ExecutableBase::hasJITCodeFor): + * runtime/JSFunction.h: + (JSC::JSFunction::scopeUnchecked): + +2011-07-05 Oliver Hunt <oliver@apple.com> + + Force inlining of simple functions that show up as not being inlined + https://bugs.webkit.org/show_bug.cgi?id=63964 + + Reviewed by Gavin Barraclough. + + Looking at profile data indicates the gcc is failing to inline a + number of trivial functions. This patch hits the ones that show + up in profiles with the ALWAYS_INLINE hammer. + + We also replace the memcpy() call in linking with a manual loop. + Apparently memcpy() is almost never faster than an inlined loop. + + * assembler/ARMv7Assembler.h: + (JSC::ARMv7Assembler::add): + (JSC::ARMv7Assembler::add_S): + (JSC::ARMv7Assembler::ARM_and): + (JSC::ARMv7Assembler::asr): + (JSC::ARMv7Assembler::b): + (JSC::ARMv7Assembler::blx): + (JSC::ARMv7Assembler::bx): + (JSC::ARMv7Assembler::clz): + (JSC::ARMv7Assembler::cmn): + (JSC::ARMv7Assembler::cmp): + (JSC::ARMv7Assembler::eor): + (JSC::ARMv7Assembler::it): + (JSC::ARMv7Assembler::ldr): + (JSC::ARMv7Assembler::ldrCompact): + (JSC::ARMv7Assembler::ldrh): + (JSC::ARMv7Assembler::ldrb): + (JSC::ARMv7Assembler::lsl): + (JSC::ARMv7Assembler::lsr): + (JSC::ARMv7Assembler::movT3): + (JSC::ARMv7Assembler::mov): + (JSC::ARMv7Assembler::movt): + (JSC::ARMv7Assembler::mvn): + (JSC::ARMv7Assembler::neg): + (JSC::ARMv7Assembler::orr): + (JSC::ARMv7Assembler::orr_S): + (JSC::ARMv7Assembler::ror): + (JSC::ARMv7Assembler::smull): + (JSC::ARMv7Assembler::str): + (JSC::ARMv7Assembler::sub): + (JSC::ARMv7Assembler::sub_S): + (JSC::ARMv7Assembler::tst): + (JSC::ARMv7Assembler::linkRecordSourceComparator): + (JSC::ARMv7Assembler::link): + (JSC::ARMv7Assembler::ARMInstructionFormatter::oneWordOp5Reg3Imm8): + (JSC::ARMv7Assembler::ARMInstructionFormatter::oneWordOp5Imm5Reg3Reg3): + (JSC::ARMv7Assembler::ARMInstructionFormatter::oneWordOp7Reg3Reg3Reg3): + (JSC::ARMv7Assembler::ARMInstructionFormatter::oneWordOp8Imm8): + (JSC::ARMv7Assembler::ARMInstructionFormatter::oneWordOp8RegReg143): + (JSC::ARMv7Assembler::ARMInstructionFormatter::oneWordOp9Imm7): + (JSC::ARMv7Assembler::ARMInstructionFormatter::oneWordOp10Reg3Reg3): + (JSC::ARMv7Assembler::ARMInstructionFormatter::twoWordOp12Reg4FourFours): + (JSC::ARMv7Assembler::ARMInstructionFormatter::twoWordOp16FourFours): + (JSC::ARMv7Assembler::ARMInstructionFormatter::twoWordOp16Op16): + (JSC::ARMv7Assembler::ARMInstructionFormatter::twoWordOp5i6Imm4Reg4EncodedImm): + (JSC::ARMv7Assembler::ARMInstructionFormatter::twoWordOp12Reg4Reg4Imm12): + (JSC::ARMv7Assembler::ARMInstructionFormatter::vfpOp): + (JSC::ARMv7Assembler::ARMInstructionFormatter::vfpMemOp): + * assembler/LinkBuffer.h: + (JSC::LinkBuffer::linkCode): + * assembler/MacroAssemblerARMv7.h: + (JSC::MacroAssemblerARMv7::nearCall): + (JSC::MacroAssemblerARMv7::call): + (JSC::MacroAssemblerARMv7::ret): + (JSC::MacroAssemblerARMv7::moveWithPatch): + (JSC::MacroAssemblerARMv7::branchPtrWithPatch): + (JSC::MacroAssemblerARMv7::storePtrWithPatch): + (JSC::MacroAssemblerARMv7::tailRecursiveCall): + (JSC::MacroAssemblerARMv7::makeTailRecursiveCall): + (JSC::MacroAssemblerARMv7::jump): + (JSC::MacroAssemblerARMv7::makeBranch): + +2011-07-05 Zoltan Herczeg <zherczeg@inf.u-szeged.hu> + + Make "Add optimised paths for a few maths functions" work on Qt + https://bugs.webkit.org/show_bug.cgi?id=63893 + + Reviewed by Oliver Hunt. + + Move the generated code to the .text section instead of .data section. + Fix alignment for the 32 bit thunk code. + + * jit/ThunkGenerators.cpp: + +2011-07-05 Filip Pizlo <fpizlo@apple.com> + + DFG JIT does not implement op_call. + https://bugs.webkit.org/show_bug.cgi?id=63858 + + Reviewed by Gavin Barraclough. + + * bytecode/CodeBlock.cpp: + (JSC::CodeBlock::unlinkCalls): + * bytecode/CodeBlock.h: + (JSC::CodeBlock::setNumberOfCallLinkInfos): + (JSC::CodeBlock::numberOfCallLinkInfos): + * bytecompiler/BytecodeGenerator.cpp: + (JSC::BytecodeGenerator::emitCall): + (JSC::BytecodeGenerator::emitConstruct): + * dfg/DFGAliasTracker.h: + (JSC::DFG::AliasTracker::lookupGetByVal): + (JSC::DFG::AliasTracker::recordCall): + (JSC::DFG::AliasTracker::equalIgnoringLaterNumericConversion): + * dfg/DFGByteCodeParser.cpp: + (JSC::DFG::ByteCodeParser::ByteCodeParser): + (JSC::DFG::ByteCodeParser::getLocal): + (JSC::DFG::ByteCodeParser::getArgument): + (JSC::DFG::ByteCodeParser::toInt32): + (JSC::DFG::ByteCodeParser::addToGraph): + (JSC::DFG::ByteCodeParser::addVarArgChild): + (JSC::DFG::ByteCodeParser::predictInt32): + (JSC::DFG::ByteCodeParser::parseBlock): + (JSC::DFG::ByteCodeParser::processPhiStack): + (JSC::DFG::ByteCodeParser::allocateVirtualRegisters): + * dfg/DFGGraph.cpp: + (JSC::DFG::Graph::opName): + (JSC::DFG::Graph::dump): + (JSC::DFG::Graph::refChildren): + * dfg/DFGGraph.h: + * dfg/DFGJITCodeGenerator.cpp: + (JSC::DFG::JITCodeGenerator::useChildren): + (JSC::DFG::JITCodeGenerator::emitCall): + * dfg/DFGJITCodeGenerator.h: + (JSC::DFG::JITCodeGenerator::addressOfCallData): + * dfg/DFGJITCompiler.cpp: + (JSC::DFG::JITCompiler::compileFunction): + * dfg/DFGJITCompiler.h: + (JSC::DFG::CallRecord::CallRecord): + (JSC::DFG::JITCompiler::notifyCall): + (JSC::DFG::JITCompiler::appendCallWithFastExceptionCheck): + (JSC::DFG::JITCompiler::addJSCall): + (JSC::DFG::JITCompiler::PropertyAccessRecord::PropertyAccessRecord): + (JSC::DFG::JITCompiler::JSCallRecord::JSCallRecord): + * dfg/DFGNode.h: + (JSC::DFG::Node::Node): + (JSC::DFG::Node::child1): + (JSC::DFG::Node::child2): + (JSC::DFG::Node::child3): + (JSC::DFG::Node::firstChild): + (JSC::DFG::Node::numChildren): + * dfg/DFGNonSpeculativeJIT.cpp: + (JSC::DFG::NonSpeculativeJIT::basicArithOp): + (JSC::DFG::NonSpeculativeJIT::compare): + (JSC::DFG::NonSpeculativeJIT::compile): + * dfg/DFGOperations.cpp: + * dfg/DFGOperations.h: + * dfg/DFGRepatch.cpp: + (JSC::DFG::dfgLinkCall): + * dfg/DFGRepatch.h: + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::compilePeepHoleIntegerBranch): + (JSC::DFG::SpeculativeJIT::compilePeepHoleCall): + (JSC::DFG::SpeculativeJIT::compile): + * dfg/DFGSpeculativeJIT.h: + (JSC::DFG::SpeculativeJIT::detectPeepHoleBranch): + * interpreter/CallFrame.h: + (JSC::ExecState::calleeAsValue): + * jit/JIT.cpp: + (JSC::JIT::JIT): + (JSC::JIT::privateCompileMainPass): + (JSC::JIT::privateCompileSlowCases): + (JSC::JIT::privateCompile): + (JSC::JIT::linkCall): + (JSC::JIT::linkConstruct): + * jit/JITCall.cpp: + (JSC::JIT::compileOpCall): + * jit/JITCode.h: + (JSC::JITCode::JITCode): + (JSC::JITCode::jitType): + (JSC::JITCode::HostFunction): + * runtime/JSFunction.h: + * runtime/JSGlobalData.h: + +2011-07-05 Oliver Hunt <oliver@apple.com> + + Initialize new MarkStack member + + * heap/MarkStack.h: + (JSC::MarkStack::MarkStack): + +2011-07-05 Oliver Hunt <oliver@apple.com> + + Don't throw out compiled code repeatedly + https://bugs.webkit.org/show_bug.cgi?id=63960 + + Reviewed by Gavin Barraclough. + + Stop throwing away all compiled code every time + we're told to do a full GC. Instead unlink all + callsites during such GC passes to maximise the + number of collectable functions, but otherwise + leave compiled functions alone. + + * API/JSBase.cpp: + (JSGarbageCollect): + * bytecode/CodeBlock.cpp: + (JSC::CodeBlock::visitAggregate): + * heap/Heap.cpp: + (JSC::Heap::collectAllGarbage): + * heap/MarkStack.h: + (JSC::MarkStack::shouldUnlinkCalls): + (JSC::MarkStack::setShouldUnlinkCalls): + * runtime/JSGlobalData.cpp: + (JSC::JSGlobalData::recompileAllJSFunctions): + (JSC::JSGlobalData::releaseExecutableMemory): + * runtime/RegExp.cpp: + (JSC::RegExp::compile): + (JSC::RegExp::invalidateCode): + * runtime/RegExp.h: + +2011-07-05 Filip Pizlo <fpizlo@apple.com> + + JSC JIT has code duplication for the handling of call and construct + https://bugs.webkit.org/show_bug.cgi?id=63957 + + Reviewed by Gavin Barraclough. + + * jit/JIT.cpp: + (JSC::JIT::linkFor): + * jit/JIT.h: + * jit/JITStubs.cpp: + (JSC::jitCompileFor): + (JSC::DEFINE_STUB_FUNCTION): + (JSC::arityCheckFor): + (JSC::lazyLinkFor): + * runtime/Executable.h: + (JSC::ExecutableBase::generatedJITCodeFor): + (JSC::FunctionExecutable::compileFor): + (JSC::FunctionExecutable::isGeneratedFor): + (JSC::FunctionExecutable::generatedBytecodeFor): + (JSC::FunctionExecutable::generatedJITCodeWithArityCheckFor): + +2011-07-05 Gavin Barraclough <barraclough@apple.com> + + Build fix following last patch. + + * runtime/JSFunction.cpp: + (JSC::createPrototypeProperty): + +2011-07-05 Gavin Barraclough <barraclough@apple.com> + + https://bugs.webkit.org/show_bug.cgi?id=63947 + ASSERT running Object.preventExtensions(Math.sin) + + Reviewed by Oliver Hunt. + + This is due to calling scope() on a hostFunction as a part of + calling createPrototypeProperty to reify the prototype property. + But host functions don't have a prototype property anyway! + + Prevent callling createPrototypeProperty on a host function. + + * runtime/JSFunction.cpp: + (JSC::JSFunction::createPrototypeProperty): + (JSC::JSFunction::preventExtensions): + +2011-07-04 Gavin Barraclough <barraclough@apple.com> + + https://bugs.webkit.org/show_bug.cgi?id=63880 + Evaluation order of conversions of operands to >, >= incorrect. + + Reviewed by Sam Weinig. + + Add 'leftFirst' parameter to jsLess, jsLessEq matching that described in the ES5 + spec. This allows these methods to be reused to perform >, >= relational compares + with correct ordering of type conversions. + + * dfg/DFGOperations.cpp: + * interpreter/Interpreter.cpp: + (JSC::Interpreter::privateExecute): + * jit/JITStubs.cpp: + (JSC::DEFINE_STUB_FUNCTION): + * runtime/Operations.h: + (JSC::jsLess): + (JSC::jsLessEq): + +2011-07-04 Gavin Barraclough <barraclough@apple.com> + + Reviewed by Sam Weinig. + + https://bugs.webkit.org/show_bug.cgi?id=16652 + Firefox and JavaScriptCore differ in Number.toString(integer) + + Our arbitrary radix (2..36) toString conversion is inaccurate. + This is partly because it uses doubles to perform math that requires + higher accuracy, and partly becasue it does not attempt to correctly + detect where to terminate, instead relying on a simple 'epsilon'. + + * runtime/NumberPrototype.cpp: + (JSC::decomposeDouble): + - helper function to extract sign, exponent, mantissa from IEEE doubles. + (JSC::Uint16WithFraction::Uint16WithFraction): + - helper class, u16int with infinite precision fraction, used to convert + the fractional part of the number to a string. + (JSC::Uint16WithFraction::operator*=): + - Multiply by a uint16. + (JSC::Uint16WithFraction::operator<): + - Compare two Uint16WithFractions. + (JSC::Uint16WithFraction::floorAndSubtract): + - Extract the integer portion of the number, and subtract it (clears the integer portion). + (JSC::Uint16WithFraction::comparePoint5): + - Compare to 0.5. + (JSC::Uint16WithFraction::sumGreaterThanOne): + - Passed a second Uint16WithFraction, returns true if the result of adding + the two values would be greater than one. + (JSC::Uint16WithFraction::isNormalized): + - Used by ASSERTs to consistency check internal representation. + (JSC::BigInteger::BigInteger): + - helper class, unbounded integer value, used to convert the integer part + of the number to a string. + (JSC::BigInteger::divide): + - Divide this value through by a uint32. + (JSC::BigInteger::operator!): + - test for zero. + (JSC::toStringWithRadix): + - Performs number to string conversion, with the given radix (2..36). + (JSC::numberProtoFuncToString): + - Changed to use toStringWithRadix. + +2011-07-04 Gavin Barraclough <barraclough@apple.com> + + https://bugs.webkit.org/show_bug.cgi?id=63881 + Need separate bytecodes for handling >, >= comparisons. + + Reviewed by Oliver Hunt. + + This clears the way to fix Bug#63880. We currently handle greater-than comparisons + as being using the corresponding op_less, etc opcodes. This is incorrect with + respect to evaluation ordering of the implicit conversions performed on operands - + we should be calling ToPrimitive on the LHS and RHS operands to the greater than, + but instead convert RHS then LHS. + + This patch adds opcodes for greater-than comparisons mirroring existing ones used + for less-than. + + * bytecode/CodeBlock.cpp: + (JSC::CodeBlock::dump): + * bytecode/Opcode.h: + * bytecompiler/BytecodeGenerator.cpp: + (JSC::BytecodeGenerator::emitJumpIfTrue): + (JSC::BytecodeGenerator::emitJumpIfFalse): + * bytecompiler/NodesCodegen.cpp: + * dfg/DFGByteCodeParser.cpp: + (JSC::DFG::ByteCodeParser::parseBlock): + * dfg/DFGNode.h: + * dfg/DFGNonSpeculativeJIT.cpp: + (JSC::DFG::NonSpeculativeJIT::compare): + (JSC::DFG::NonSpeculativeJIT::compile): + * dfg/DFGNonSpeculativeJIT.h: + * dfg/DFGOperations.cpp: + * dfg/DFGOperations.h: + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::compare): + (JSC::DFG::SpeculativeJIT::compile): + * dfg/DFGSpeculativeJIT.h: + * interpreter/Interpreter.cpp: + (JSC::Interpreter::privateExecute): + * jit/JIT.cpp: + (JSC::JIT::privateCompileMainPass): + (JSC::JIT::privateCompileSlowCases): + * jit/JIT.h: + (JSC::JIT::emit_op_loop_if_greater): + (JSC::JIT::emitSlow_op_loop_if_greater): + (JSC::JIT::emit_op_loop_if_greatereq): + (JSC::JIT::emitSlow_op_loop_if_greatereq): + * jit/JITArithmetic.cpp: + (JSC::JIT::emit_op_jgreater): + (JSC::JIT::emit_op_jgreatereq): + (JSC::JIT::emit_op_jngreater): + (JSC::JIT::emit_op_jngreatereq): + (JSC::JIT::emitSlow_op_jgreater): + (JSC::JIT::emitSlow_op_jgreatereq): + (JSC::JIT::emitSlow_op_jngreater): + (JSC::JIT::emitSlow_op_jngreatereq): + (JSC::JIT::emit_compareAndJumpSlow): + * jit/JITArithmetic32_64.cpp: + (JSC::JIT::emitBinaryDoubleOp): + * jit/JITStubs.cpp: + (JSC::DEFINE_STUB_FUNCTION): + * jit/JITStubs.h: + * parser/NodeConstructors.h: + (JSC::GreaterNode::GreaterNode): + (JSC::GreaterEqNode::GreaterEqNode): + * parser/Nodes.h: + +2011-07-03 Gavin Barraclough <barraclough@apple.com> + + https://bugs.webkit.org/show_bug.cgi?id=63879 + Reduce code duplication for op_jless, op_jlesseq, op_jnless, op_jnlesseq. + + Reviewed by Sam Weinig. + + There is a lot of copy & paste code here; we can reduce duplication by making + a shared implementation. + + * assembler/MacroAssembler.h: + (JSC::MacroAssembler::branch32): + (JSC::MacroAssembler::commute): + - Make these function platform agnostic. + * assembler/MacroAssemblerX86Common.h: + - Moved branch32/commute up to MacroAssembler. + * jit/JIT.h: + (JSC::JIT::emit_op_loop_if_lesseq): + (JSC::JIT::emitSlow_op_loop_if_lesseq): + - Add an implementation matching that for op_loop_if_less, which just calls op_jless. + * jit/JITArithmetic.cpp: + (JSC::JIT::emit_op_jless): + (JSC::JIT::emit_op_jlesseq): + (JSC::JIT::emit_op_jnless): + (JSC::JIT::emit_op_jnlesseq): + (JSC::JIT::emitSlow_op_jless): + (JSC::JIT::emitSlow_op_jlesseq): + (JSC::JIT::emitSlow_op_jnless): + (JSC::JIT::emitSlow_op_jnlesseq): + - Common implmentations of these methods for JSVALUE64 & JSVALUE32_64. + (JSC::JIT::emit_compareAndJump): + (JSC::JIT::emit_compareAndJumpSlow): + - Internal implmementation of jless etc for JSVALUE64. + * jit/JITArithmetic32_64.cpp: + (JSC::JIT::emit_compareAndJump): + (JSC::JIT::emit_compareAndJumpSlow): + - Internal implmementation of jless etc for JSVALUE32_64. + * jit/JITOpcodes.cpp: + * jit/JITOpcodes32_64.cpp: + * jit/JITStubs.cpp: + * jit/JITStubs.h: + - Remove old implementation of emit_op_loop_if_lesseq. + +2011-07-03 Sheriff Bot <webkit.review.bot@gmail.com> + + Unreviewed, rolling out r90347. + http://trac.webkit.org/changeset/90347 + https://bugs.webkit.org/show_bug.cgi?id=63886 + + Build breaks on Leopard, Chromium-win, WinCairo, and WinCE. + (Requested by tkent on #webkit). + + * JavaScriptCore.xcodeproj/project.pbxproj: + * runtime/BigInteger.h: Removed. + * runtime/NumberPrototype.cpp: + (JSC::numberProtoFuncToPrecision): + (JSC::numberProtoFuncToString): + * runtime/Uint16WithFraction.h: Removed. + * wtf/MathExtras.h: + +2011-06-30 Gavin Barraclough <barraclough@apple.com> + + Reviewed by Sam Weinig. + + https://bugs.webkit.org/show_bug.cgi?id=16652 + Firefox and JavaScriptCore differ in Number.toString(integer) + + Our arbitrary radix (2..36) toString conversion is inaccurate. + This is partly because it uses doubles to perform math that requires + higher accuracy, and partly becasue it does not attempt to correctly + detect where to terminate, instead relying on a simple 'epsilon'. + + * runtime/NumberPrototype.cpp: + (JSC::decomposeDouble): + - helper function to extract sign, exponent, mantissa from IEEE doubles. + (JSC::Uint16WithFraction::Uint16WithFraction): + - helper class, u16int with infinite precision fraction, used to convert + the fractional part of the number to a string. + (JSC::Uint16WithFraction::operator*=): + - Multiply by a uint16. + (JSC::Uint16WithFraction::operator<): + - Compare two Uint16WithFractions. + (JSC::Uint16WithFraction::floorAndSubtract): + - Extract the integer portion of the number, and subtract it (clears the integer portion). + (JSC::Uint16WithFraction::comparePoint5): + - Compare to 0.5. + (JSC::Uint16WithFraction::sumGreaterThanOne): + - Passed a second Uint16WithFraction, returns true if the result of adding + the two values would be greater than one. + (JSC::Uint16WithFraction::isNormalized): + - Used by ASSERTs to consistency check internal representation. + (JSC::BigInteger::BigInteger): + - helper class, unbounded integer value, used to convert the integer part + of the number to a string. + (JSC::BigInteger::divide): + - Divide this value through by a uint32. + (JSC::BigInteger::operator!): + - test for zero. + (JSC::toStringWithRadix): + - Performs number to string conversion, with the given radix (2..36). + (JSC::numberProtoFuncToString): + - Changed to use toStringWithRadix. + +2011-07-02 Gavin Barraclough <barraclough@apple.com> + + https://bugs.webkit.org/show_bug.cgi?id=63866 + DFG JIT - implement instanceof + + Reviewed by Sam Weinig. + + Add ops CheckHasInstance & InstanceOf to implement bytecodes + op_check_has_instance & op_instanceof. This is an initial + functional implementation, performance is a wash. We can + follow up with changes to fuse the InstanceOf node with + a subsequant branch, as we do with other comparisons. + + * dfg/DFGByteCodeParser.cpp: + (JSC::DFG::ByteCodeParser::parseBlock): + * dfg/DFGJITCompiler.cpp: + (JSC::DFG::JITCompiler::jitAssertIsCell): + * dfg/DFGJITCompiler.h: + (JSC::DFG::JITCompiler::jitAssertIsCell): + * dfg/DFGNode.h: + * dfg/DFGNonSpeculativeJIT.cpp: + (JSC::DFG::NonSpeculativeJIT::compile): + * dfg/DFGOperations.cpp: + * dfg/DFGOperations.h: + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::compile): + +2011-07-01 Oliver Hunt <oliver@apple.com> + + IE Web Workers demo crashes in JSC::SlotVisitor::visitChildren() + https://bugs.webkit.org/show_bug.cgi?id=63732 + + Reviewed by Gavin Barraclough. + + Initialise the memory at the head of the new storage so that + GC is safe if triggered by reportExtraMemoryCost. + + * runtime/JSArray.cpp: + (JSC::JSArray::increaseVectorPrefixLength): + +2011-07-01 Oliver Hunt <oliver@apple.com> + + GC sweep can occur before an object is completely initialised + https://bugs.webkit.org/show_bug.cgi?id=63836 + + Reviewed by Gavin Barraclough. + + In rare cases it's possible for a GC sweep to occur while a + live, but not completely initialised object is on the stack. + In such a case we may incorrectly choose to mark it, even + though it has no children that need marking. + + We resolve this by always zeroing out the structure of any + value returned from JSCell::operator new(), and making the + markstack tolerant of a null structure. + + * runtime/JSCell.h: + (JSC::JSCell::JSCell::~JSCell): + (JSC::JSCell::JSCell::operator new): + * runtime/Structure.h: + (JSC::MarkStack::internalAppend): + +2011-07-01 Filip Pizlo <fpizlo@apple.com> + + Reviewed by Gavin Barraclough. + + DFG non-speculative JIT always performs slow C calls for div and mod. + https://bugs.webkit.org/show_bug.cgi?id=63684 + + * dfg/DFGNonSpeculativeJIT.cpp: + (JSC::DFG::NonSpeculativeJIT::compile): + +2011-07-01 Juan C. Montemayor <jmont@apple.com> + + Reviewed by Oliver Hunt. + + Lexer error messages are currently appalling + https://bugs.webkit.org/show_bug.cgi?id=63340 + + Added error messages for the Lexer. These messages will be displayed + instead of the lexer error messages from the parser that are currently + shown. + + * parser/Lexer.cpp: + (JSC::Lexer::getInvalidCharMessage): + (JSC::Lexer::setCode): + (JSC::Lexer::parseString): + (JSC::Lexer::lex): + (JSC::Lexer::clear): + * parser/Lexer.h: + (JSC::Lexer::getErrorMessage): + (JSC::Lexer::setOffset): + * parser/Parser.cpp: + (JSC::Parser::parse): + +2011-07-01 Jungshik Shin <jshin@chromium.org> + + Reviewed by Alexey Proskuryakov. + + Add ScriptCodesFromICU.h to wtf/unicode and make necessary changes in + build files for ports not using ICU. + Add icu/unicode/uscript.h for ports using ICU. It's taken from + ICU 3.6 (the version used on Mac OS 10.5) + + http://bugs.webkit.org/show_bug.cgi?id=20797 + + * GNUmakefile.list.am: + * JavaScriptCore.gypi: + * icu/unicode/uscript.h: Added for UScriptCode enum. + * wtf/unicode/ScriptCodesFromICU.h: UScriptCode enum added. + * wtf/unicode/icu/UnicodeIcu.h: + * wtf/unicode/brew/UnicodeBrew.h: + * wtf/unicode/glib/UnicodeGLib.h: + * wtf/unicode/qt4/UnicodeQt4.h: + * wtf/unicode/wince/UnicodeWinCE.h: + +2011-07-01 Gavin Barraclough <barraclough@apple.com> + + Reviewed by Sam Weinig. + + https://bugs.webkit.org/show_bug.cgi?id=63819 + Escaping of forwardslashes in strings incorrect if multiple exist. + + The bug is in the parameters passed to a substring - should be + start & length, but we're passing start & end indices! + + * runtime/RegExpObject.cpp: + (JSC::regExpObjectSource): + +2011-07-01 Adam Roben <aroben@apple.com> + + Roll out r90194 + http://trac.webkit.org/changeset/90194 + https://bugs.webkit.org/show_bug.cgi?id=63778 + + Fixes <http://webkit.org/b/63812> REGRESSION (r90194): Multiple tests intermittently failing + assertions in WriteBarrierBase<JSC::Structure>::get + + * runtime/JSCell.h: + (JSC::JSCell::JSCell::~JSCell): + +2011-06-30 Oliver Hunt <oliver@apple.com> + + Reviewed by Gavin Barraclough. + + Add optimised paths for a few maths functions + https://bugs.webkit.org/show_bug.cgi?id=63757 + + Relanding as a Mac only patch. + + This adds specialised thunks for Math.abs, Math.round, Math.ceil, + Math.floor, Math.log, and Math.exp as they are apparently more + important in real web content than we thought, which is somewhat + mind-boggling. On average doubles the performance of the common + cases (eg. actually passing numbers in). They're not as efficient + as they could be, but this way gives them the most portability. + + * assembler/MacroAssemblerARM.h: + (JSC::MacroAssemblerARM::supportsDoubleBitops): + (JSC::MacroAssemblerARM::andnotDouble): + * assembler/MacroAssemblerARMv7.h: + (JSC::MacroAssemblerARMv7::supportsDoubleBitops): + (JSC::MacroAssemblerARMv7::andnotDouble): + * assembler/MacroAssemblerMIPS.h: + (JSC::MacroAssemblerMIPS::andnotDouble): + (JSC::MacroAssemblerMIPS::supportsDoubleBitops): + * assembler/MacroAssemblerSH4.h: + (JSC::MacroAssemblerSH4::supportsDoubleBitops): + (JSC::MacroAssemblerSH4::andnotDouble): + * assembler/MacroAssemblerX86.h: + (JSC::MacroAssemblerX86::supportsDoubleBitops): + * assembler/MacroAssemblerX86Common.h: + (JSC::MacroAssemblerX86Common::andnotDouble): + * assembler/MacroAssemblerX86_64.h: + (JSC::MacroAssemblerX86_64::supportsDoubleBitops): + * assembler/X86Assembler.h: + (JSC::X86Assembler::andnpd_rr): + * create_hash_table: + * jit/SpecializedThunkJIT.h: + (JSC::SpecializedThunkJIT::finalize): + (JSC::SpecializedThunkJIT::callDoubleToDouble): + * jit/ThunkGenerators.cpp: + (JSC::floorThunkGenerator): + (JSC::ceilThunkGenerator): + (JSC::roundThunkGenerator): + (JSC::expThunkGenerator): + (JSC::logThunkGenerator): + (JSC::absThunkGenerator): + * jit/ThunkGenerators.h: + +2011-07-01 David Kilzer <ddkilzer@apple.com> + + <http://webkit.org/b/63814> Fix clang build error in JITOpcodes32_64.cpp + + Fixes the following build error in clang: + + JavaScriptCore/jit/JITOpcodes32_64.cpp:741:36:{741:9-741:35}: error: operator '?:' has lower precedence than '+'; '+' will be evaluated first [-Werror,-Wparentheses,3] + map(m_bytecodeOffset + dynamic ? OPCODE_LENGTH(op_resolve_global_dynamic) : OPCODE_LENGTH(op_resolve_global), dst, regT1, regT0); + ~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ + JavaScriptCore/jit/JITOpcodes32_64.cpp:741:36: note: place parentheses around the '+' expression to silence this warning [3] + map(m_bytecodeOffset + dynamic ? OPCODE_LENGTH(op_resolve_global_dynamic) : OPCODE_LENGTH(op_resolve_global), dst, regT1, regT0); + ^ + ( ) + fix-it:"JavaScriptCore/jit/JITOpcodes32_64.cpp":{741:9-741:9}:"(" + fix-it:"JavaScriptCore/jit/JITOpcodes32_64.cpp":{741:35-741:35}:")" + JavaScriptCore/jit/JITOpcodes32_64.cpp:741:36:{741:28-741:94}: note: place parentheses around the '?:' expression to evaluate it first [3] + map(m_bytecodeOffset + dynamic ? OPCODE_LENGTH(op_resolve_global_dynamic) : OPCODE_LENGTH(op_resolve_global), dst, regT1, regT0); + ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 1 error generated. + + * jit/JITOpcodes32_64.cpp: + (JSC::JIT::emit_op_resolve_global): Add parenthesis to make the + tertiary expression evaluate first. + +2011-07-01 Sheriff Bot <webkit.review.bot@gmail.com> + + Unreviewed, rolling out r90177 and r90179. + http://trac.webkit.org/changeset/90177 + http://trac.webkit.org/changeset/90179 + https://bugs.webkit.org/show_bug.cgi?id=63790 + + It caused crashes on Qt in debug mode (Requested by Ossy on + #webkit). + + * assembler/MacroAssemblerARM.h: + (JSC::MacroAssemblerARM::rshift32): + (JSC::MacroAssemblerARM::supportsFloatingPointSqrt): + (JSC::MacroAssemblerARM::sqrtDouble): + * assembler/MacroAssemblerARMv7.h: + (JSC::MacroAssemblerARMv7::supportsFloatingPointSqrt): + (JSC::MacroAssemblerARMv7::sqrtDouble): + * assembler/MacroAssemblerMIPS.h: + (JSC::MacroAssemblerMIPS::sqrtDouble): + (JSC::MacroAssemblerMIPS::supportsFloatingPointSqrt): + * assembler/MacroAssemblerSH4.h: + (JSC::MacroAssemblerSH4::sqrtDouble): + * assembler/MacroAssemblerX86.h: + * assembler/MacroAssemblerX86Common.h: + * assembler/MacroAssemblerX86_64.h: + * assembler/X86Assembler.h: + * create_hash_table: + * jit/JSInterfaceJIT.h: + (JSC::JSInterfaceJIT::emitLoadDouble): + * jit/SpecializedThunkJIT.h: + (JSC::SpecializedThunkJIT::finalize): + * jit/ThunkGenerators.cpp: + * jit/ThunkGenerators.h: + +2011-06-30 Oliver Hunt <oliver@apple.com> + + Reviewed by Beth Dakin. + + Make GC validation clear cell structure on destruction + https://bugs.webkit.org/show_bug.cgi?id=63778 + + * runtime/JSCell.h: + (JSC::JSCell::JSCell::~JSCell): + +2011-06-30 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Gavin Barraclough. + + Added write barrier that was missing from put_by_id_transition + https://bugs.webkit.org/show_bug.cgi?id=63775 + + * dfg/DFGJITCodeGenerator.cpp: + (JSC::DFG::JITCodeGenerator::writeBarrier): Made this static with a + MacroAssembler& argument so our patching functions could use it. + + (JSC::DFG::JITCodeGenerator::cachedPutById): + * dfg/DFGJITCodeGenerator.h: + * dfg/DFGNonSpeculativeJIT.cpp: + (JSC::DFG::NonSpeculativeJIT::compile): Updated for signature change. + + * dfg/DFGRepatch.cpp: + (JSC::DFG::tryCachePutByID): Missing barrier! + + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::compile): Updated for signature change. + + * jit/JITPropertyAccess.cpp: + (JSC::JIT::privateCompilePutByIdTransition): + * jit/JITPropertyAccess32_64.cpp: + (JSC::JIT::privateCompilePutByIdTransition): + * jit/JSInterfaceJIT.h: Same game here. Removed storePtrWithWriteBarrier + because its meaning isn't clear -- maybe in the future we'll have a + clear way to pass all stores through a common function that guarantees + a write barrier, but that's not the case right now. + +2011-06-30 Filip Pizlo <fpizlo@apple.com> + + Reviewed by Gavin Barraclough. + + DFG non-speculative JIT does not reuse registers when compiling comparisons. + https://bugs.webkit.org/show_bug.cgi?id=63565 + + * dfg/DFGNonSpeculativeJIT.cpp: + (JSC::DFG::NonSpeculativeJIT::knownConstantArithOp): + (JSC::DFG::NonSpeculativeJIT::basicArithOp): + (JSC::DFG::NonSpeculativeJIT::compare): + +2011-06-30 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Gavin Barraclough. + + Added empty write barrier stubs in all the right places in the DFG JIT + https://bugs.webkit.org/show_bug.cgi?id=63764 + + SunSpider thinks this might be a 0.5% speedup. Meh. + + * dfg/DFGJITCodeGenerator.cpp: + (JSC::DFG::JITCodeGenerator::writeBarrier): Le stub. + + (JSC::DFG::JITCodeGenerator::cachedPutById): Don't do anything special + for the case where base == scratch, since we now require base and scratch + to be not equal, for the sake of the write barrier. + + * dfg/DFGJITCodeGenerator.h: Le stub. + + * dfg/DFGNonSpeculativeJIT.cpp: + (JSC::DFG::NonSpeculativeJIT::compile): Don't reuse the base register + as the scratch register, since that's incompatible with the write barrier, + which needs a distinct base and scratch. + + Do put the global object into a register before loading its var storage, + since it needs to be in a register for the write barrier to operate on it. + + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::compile): + * jit/JITPropertyAccess.cpp: + (JSC::JIT::emitWriteBarrier): Second verse, same as the first. + + * jit/JITPropertyAccess.cpp: + (JSC::JIT::emit_op_get_scoped_var): + (JSC::JIT::emit_op_put_scoped_var): + (JSC::JIT::emit_op_put_global_var): Deployed offsetOfRegisters() to more + places. + + (JSC::JIT::emitWriteBarrier): Added a teeny tiny ASSERT so this function + is a little more than meaningless. + + * jit/JITPropertyAccess32_64.cpp: + (JSC::JIT::emit_op_get_scoped_var): + (JSC::JIT::emit_op_put_scoped_var): + (JSC::JIT::emit_op_put_global_var): Deployed offsetOfRegisters() to more + places. + + (JSC::JIT::emitWriteBarrier): Added a teeny tiny ASSERT so this function + is a little more than meaningless. + + * runtime/JSVariableObject.h: + (JSC::JSVariableObject::offsetOfRegisters): Now used by the JIT, since + we put the global object in a register and only then load its var storage + by offset. + + (JSC::JIT::emitWriteBarrier): + +2011-06-30 Oliver Hunt <oliver@apple.com> + + Fix ARMv6 build + + * assembler/MacroAssemblerARM.h: + (JSC::MacroAssemblerARM::rshift32): + +2011-06-30 Oliver Hunt <oliver@apple.com> + + Reviewed by Gavin Barraclough. + + Add optimised paths for a few maths functions + https://bugs.webkit.org/show_bug.cgi?id=63757 + + This adds specialised thunks for Math.abs, Math.round, Math.ceil, + Math.floor, Math.log, and Math.exp as they are apparently more + important in real web content than we thought, which is somewhat + mind-boggling. On average doubles the performance of the common + cases (eg. actually passing numbers in). They're not as efficient + as they could be, but this way gives them the most portability. + + * assembler/MacroAssemblerARM.h: + (JSC::MacroAssemblerARM::supportsDoubleBitops): + (JSC::MacroAssemblerARM::andnotDouble): + * assembler/MacroAssemblerARMv7.h: + (JSC::MacroAssemblerARMv7::supportsDoubleBitops): + (JSC::MacroAssemblerARMv7::andnotDouble): + * assembler/MacroAssemblerMIPS.h: + (JSC::MacroAssemblerMIPS::andnotDouble): + (JSC::MacroAssemblerMIPS::supportsDoubleBitops): + * assembler/MacroAssemblerSH4.h: + (JSC::MacroAssemblerSH4::supportsDoubleBitops): + (JSC::MacroAssemblerSH4::andnotDouble): + * assembler/MacroAssemblerX86.h: + (JSC::MacroAssemblerX86::supportsDoubleBitops): + * assembler/MacroAssemblerX86Common.h: + (JSC::MacroAssemblerX86Common::andnotDouble): + * assembler/MacroAssemblerX86_64.h: + (JSC::MacroAssemblerX86_64::supportsDoubleBitops): + * assembler/X86Assembler.h: + (JSC::X86Assembler::andnpd_rr): + * create_hash_table: + * jit/SpecializedThunkJIT.h: + (JSC::SpecializedThunkJIT::finalize): + (JSC::SpecializedThunkJIT::callDoubleToDouble): + * jit/ThunkGenerators.cpp: + (JSC::floorThunkGenerator): + (JSC::ceilThunkGenerator): + (JSC::roundThunkGenerator): + (JSC::expThunkGenerator): + (JSC::logThunkGenerator): + (JSC::absThunkGenerator): + * jit/ThunkGenerators.h: + +2011-06-30 Cary Clark <caryclark@google.com> + + Reviewed by James Robinson. + + Use Skia if Skia on Mac Chrome is enabled + https://bugs.webkit.org/show_bug.cgi?id=62999 + + * wtf/Platform.h: + Add switch to use Skia if, externally, + Skia has been enabled by a gyp define. + +2011-06-30 Juan C. Montemayor <jmont@apple.com> + + Reviewed by Geoffrey Garen. + + Web Inspector fails to display source for eval with syntax error + https://bugs.webkit.org/show_bug.cgi?id=63583 + + Web Inspector now displays a link to an eval statement that contains + a syntax error. + + * parser/Parser.h: + (JSC::isEvalNode): + (JSC::EvalNode): + (JSC::Parser::parse): + +2011-06-30 Filip Pizlo <fpizlo@apple.com> + + Reviewed by Gavin Barraclough. + + X86Assembler does not encode byte registers in 64-bit mode correctly. + https://bugs.webkit.org/show_bug.cgi?id=63665 + + * assembler/X86Assembler.h: + (JSC::X86Assembler::testb_rr): + (JSC::X86Assembler::X86InstructionFormatter::oneByteOp8): + +2011-06-30 Sheriff Bot <webkit.review.bot@gmail.com> + + Unreviewed, rolling out r90102. + http://trac.webkit.org/changeset/90102 + https://bugs.webkit.org/show_bug.cgi?id=63714 + + Lots of tests asserting beneath + SVGSMILElement::findInstanceTime (Requested by aroben on + #webkit). + + * wtf/StdLibExtras.h: + (WTF::binarySearch): + +2011-06-30 Oliver Varga <Varga.Oliver@stud.u-szeged.hu> + + Reviewed by Nikolas Zimmermann. + + Speed up SVGSMILElement::findInstanceTime. + https://bugs.webkit.org/show_bug.cgi?id=61025 + + Add a new parameter to StdlibExtras.h::binarySerarch function + to also handle cases when the array does not contain the key value. + This is needed for an svg function. + + * wtf/StdLibExtras.h: + (WTF::binarySearch): + +2011-06-29 Gavin Barraclough <barraclough@apple.com> + + Reviewed by Geoff Garen. + + https://bugs.webkit.org/show_bug.cgi?id=63669 + DFG JIT - fix spectral-norm regression + + The problem is a mis-speculation leading to us falling off the speculative path. + Make the speculation logic slightly smarter, don't predict int if one of the + operands is already loaded as a double (we use this logic already for compares). + + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::compile): + * dfg/DFGSpeculativeJIT.h: + (JSC::DFG::SpeculativeJIT::shouldSpeculateInteger): + +2011-06-29 Filip Pizlo <fpizlo@apple.com> + + Reviewed by Gavin Barraclough. + + DFG JIT does not do put_by_id transition caching. + https://bugs.webkit.org/show_bug.cgi?id=63662 + + * dfg/DFGJITCodeGenerator.cpp: + (JSC::DFG::JITCodeGenerator::cachedPutById): + * dfg/DFGJITCompiler.h: + (JSC::DFG::JITCompiler::addPropertyAccess): + * dfg/DFGRepatch.cpp: + (JSC::DFG::testPrototype): + (JSC::DFG::tryCachePutByID): + +2011-06-29 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Oliver Hunt. + + Added a dummy write barrier emitting function in all the right places in the old JIT + https://bugs.webkit.org/show_bug.cgi?id=63667 + + SunSpider reports no change. + + * jit/JIT.h: + * jit/JITPropertyAccess.cpp: + (JSC::JIT::emit_op_put_by_id): + (JSC::JIT::emit_op_put_scoped_var): Do it. + + (JSC::JIT::emit_op_put_global_var): Global object needs to be in a register + for the sake of the write barrier. + + (JSC::JIT::emitWriteBarrier): Empty for now. Not for long! + + * jit/JITPropertyAccess32_64.cpp: + (JSC::JIT::emit_op_put_by_val): + (JSC::JIT::emit_op_put_by_id): + (JSC::JIT::emit_op_put_scoped_var): Do it. + + (JSC::JIT::emit_op_put_global_var): Global object needs to be in a register + for the sake of the write barrier. + + (JSC::JIT::emitWriteBarrier): Empty for now. Not for long! + +2011-06-29 Filip Pizlo <fpizlo@apple.com> + + Reviewed by Gavin Barraclough. + + DFG JIT does not perform get_by_id self list caching. + https://bugs.webkit.org/show_bug.cgi?id=63605 + + * bytecode/StructureStubInfo.h: + * dfg/DFGJITCompiler.cpp: + (JSC::DFG::JITCompiler::compileFunction): + * dfg/DFGOperations.cpp: + * dfg/DFGOperations.h: + * dfg/DFGRepatch.cpp: + (JSC::DFG::tryCacheGetByID): + (JSC::DFG::tryBuildGetByIDList): + (JSC::DFG::dfgBuildGetByIDList): + * dfg/DFGRepatch.h: + +2011-06-28 Filip Pizlo <fpizlo@apple.com> + + Reviewed by Gavin Barraclough. + + DFG JIT lacks array.length caching. + https://bugs.webkit.org/show_bug.cgi?id=63505 + + * bytecode/StructureStubInfo.h: + * dfg/DFGJITCodeGenerator.cpp: + (JSC::DFG::JITCodeGenerator::cachedGetById): + (JSC::DFG::JITCodeGenerator::cachedPutById): + * dfg/DFGJITCodeGenerator.h: + (JSC::DFG::JITCodeGenerator::tryAllocate): + (JSC::DFG::JITCodeGenerator::selectScratchGPR): + (JSC::DFG::JITCodeGenerator::silentSpillAllRegisters): + * dfg/DFGJITCompiler.cpp: + (JSC::DFG::JITCompiler::compileFunction): + * dfg/DFGJITCompiler.h: + (JSC::DFG::JITCompiler::addPropertyAccess): + (JSC::DFG::JITCompiler::PropertyAccessRecord::PropertyAccessRecord): + * dfg/DFGRegisterBank.h: + (JSC::DFG::RegisterBank::tryAllocate): + * dfg/DFGRepatch.cpp: + (JSC::DFG::tryCacheGetByID): + +2011-06-28 Pierre Rossi <pierre.rossi@gmail.com> + + Reviewed by Eric Seidel. + + Warnings in JSC's JIT on 32 bit + https://bugs.webkit.org/show_bug.cgi?id=63259 + + Fairly straightforward, just use ASSERT_JIT_OFFSET_UNUSED when it applies. + + * jit/JITPropertyAccess32_64.cpp: + (JSC::JIT::emit_op_method_check): + (JSC::JIT::compileGetByIdHotPath): + (JSC::JIT::emit_op_put_by_id): + +2011-06-28 Sheriff Bot <webkit.review.bot@gmail.com> + + Unreviewed, rolling out r89968. + http://trac.webkit.org/changeset/89968 + https://bugs.webkit.org/show_bug.cgi?id=63581 + + Broke chromium windows compile (Requested by jamesr on + #webkit). + + * wtf/Platform.h: + +2011-06-28 Oliver Hunt <oliver@apple.com> + + Reviewed by Gavin Barraclough. + + Fix sampling build + https://bugs.webkit.org/show_bug.cgi?id=63579 + + Gets opcode sampling building again, doesn't seem to work alas + + * bytecode/SamplingTool.cpp: + (JSC::SamplingTool::notifyOfScope): + * bytecode/SamplingTool.h: + (JSC::SamplingTool::SamplingTool): + * interpreter/Interpreter.cpp: + (JSC::Interpreter::enableSampler): + * runtime/Executable.h: + (JSC::ScriptExecutable::ScriptExecutable): + +2011-06-28 Cary Clark <caryclark@google.com> + + Reviewed by James Robinson. + + Use Skia if Skia on Mac Chrome is enabled + https://bugs.webkit.org/show_bug.cgi?id=62999 + + * wtf/Platform.h: + Add switch to use Skia if, externally, + Skia has been enabled by a gyp define. + +2011-06-28 Oliver Hunt <oliver@apple.com> + + Reviewed by Gavin Barraclough. + + ASSERT when launching debug builds with interpreter and jit enabled + https://bugs.webkit.org/show_bug.cgi?id=63566 + + Add appropriate guards to the various Executable's memory reporting + logic. + + * runtime/Executable.cpp: + (JSC::EvalExecutable::compileInternal): + (JSC::ProgramExecutable::compileInternal): + (JSC::FunctionExecutable::compileForCallInternal): + (JSC::FunctionExecutable::compileForConstructInternal): + +2011-06-28 Gavin Barraclough <barraclough@apple.com> + + Reviewed by Oliver Hunt. + + https://bugs.webkit.org/show_bug.cgi?id=63563 + DFG JIT - add support for double arith to speculative path + + Add integer support for div & mod, add double support for div, mod, + add, sub & mul, dynamically selecting based on operand types. + + * dfg/DFGJITCodeGenerator.cpp: + (JSC::DFG::FPRTemporary::FPRTemporary): + * dfg/DFGJITCodeGenerator.h: + * dfg/DFGJITCompiler.h: + (JSC::DFG::JITCompiler::assembler): + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::fillSpeculateDouble): + (JSC::DFG::SpeculativeJIT::compile): + * dfg/DFGSpeculativeJIT.h: + (JSC::DFG::SpeculateDoubleOperand::SpeculateDoubleOperand): + (JSC::DFG::SpeculateDoubleOperand::~SpeculateDoubleOperand): + (JSC::DFG::SpeculateDoubleOperand::index): + (JSC::DFG::SpeculateDoubleOperand::fpr): + +2011-06-28 Oliver Hunt <oliver@apple.com> + + Fix interpreter build. + + * interpreter/Interpreter.cpp: + (JSC::Interpreter::privateExecute): + +2011-06-28 Gavin Barraclough <barraclough@apple.com> + + Reviewed by Oliver Hunt. + + https://bugs.webkit.org/show_bug.cgi?id=63561 + DFG JIT - don't always assume integer in relational compare + + If neither operand is known integer, or either is in double representation, + then at least use a function call (don't bail off the speculative path). + + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::compilePeepHoleCall): + (JSC::DFG::SpeculativeJIT::compile): + * dfg/DFGSpeculativeJIT.h: + (JSC::DFG::SpeculativeJIT::isDataFormatDouble): + (JSC::DFG::SpeculativeJIT::compareIsInteger): + +2011-06-28 Oliver Hunt <oliver@apple.com> + + Reviewed by Gavin Barraclough. + + Make constant array optimisation less strict about what constitutes a constant + https://bugs.webkit.org/show_bug.cgi?id=63554 + + Now allow string constants in array literals to actually be considered constant, + and so avoid codegen in array literals with strings in them. + + * bytecode/CodeBlock.h: + (JSC::CodeBlock::addConstantBuffer): + (JSC::CodeBlock::constantBuffer): + * bytecompiler/BytecodeGenerator.cpp: + (JSC::BytecodeGenerator::addConstantBuffer): + (JSC::BytecodeGenerator::addStringConstant): + (JSC::BytecodeGenerator::emitNewArray): + * bytecompiler/BytecodeGenerator.h: + * interpreter/Interpreter.cpp: + (JSC::Interpreter::privateExecute): + * jit/JITStubs.cpp: + (JSC::DEFINE_STUB_FUNCTION): + +2011-06-28 Gavin Barraclough <barraclough@apple.com> + + Reviewed by Oliver Hunt. + + https://bugs.webkit.org/show_bug.cgi?id=63560 + DFG_JIT allow allocation of specific machine registers + + This allow us to allocate the registers necessary to perform x86 + idiv instructions for div/mod, and may be useful for shifts, too. + + * dfg/DFGJITCodeGenerator.cpp: + (JSC::DFG::GPRTemporary::GPRTemporary): + * dfg/DFGJITCodeGenerator.h: + (JSC::DFG::JITCodeGenerator::allocate): + (JSC::DFG::GPRResult::GPRResult): + * dfg/DFGRegisterBank.h: + (JSC::DFG::RegisterBank::allocateSpecific): + * dfg/DFGSpeculativeJIT.h: + (JSC::DFG::SpeculativeJIT::isInteger): + +2011-06-28 Gavin Barraclough <barraclough@apple.com> + + Reviewed by Oliver Hunt. + + https://bugs.webkit.org/show_bug.cgi?id=55040 + RegExp constructor returns the argument regexp instead of a new object + + Per 15.10.3.1, our current behaviour is correct if called as a function, + but incorrect when called as a constructor. + + * runtime/RegExpConstructor.cpp: + (JSC::constructRegExp): + (JSC::constructWithRegExpConstructor): + * runtime/RegExpConstructor.h: + +2011-06-28 Luke Macpherson <macpherson@chromium.org> + + Reviewed by Darin Adler. + + Clean up integer clamping functions in MathExtras.h and support arbitrary numeric types and limits. + https://bugs.webkit.org/show_bug.cgi?id=63469 + + * wtf/MathExtras.h: + (defaultMinimumForClamp): + Version of std::numeric_limits::min() that returns the largest negative value for floating point types. + (defaultMaximumForClamp): + Symmetric alias for std::numeric_limits::max() + (clampTo): + New templated clamping function that supports arbitrary output types. + (clampToInteger): + Use new clampTo template. + (clampToFloat): + Use new clampTo template. + (clampToPositiveInteger): + Use new clampTo template. + +2011-06-28 Adam Roben <aroben@apple.com> + + Windows Debug build fix after r89885 + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Exported + JSGlobalData::releaseExecutableMemory for jsc.exe's benefit. + +2011-06-28 Shinya Kawanaka <shinyak@google.com> + + Reviewed by Kent Tamura. + + Add const to show() method in WTFString and AtomicString. + https://bugs.webkit.org/show_bug.cgi?id=63515 + + The lack of const in show() method is painful when + doing something like printf-debug. + + * wtf/text/AtomicString.cpp: + (WTF::AtomicString::show): + * wtf/text/AtomicString.h: + * wtf/text/WTFString.cpp: + (String::show): + * wtf/text/WTFString.h: + +2011-06-27 Ryosuke Niwa <rniwa@webkit.org> + + Build fix attempt after r89885. + + * JavaScriptCore.exp: + * jsc.cpp: + +2011-06-27 Oliver Hunt <oliver@apple.com> + + Reviewed by Geoffrey Garen. + + Support throwing away non-running code even while other code is running + https://bugs.webkit.org/show_bug.cgi?id=63485 + + Add a function to CodeBlock to support unlinking direct linked callsites, + and then with that in place add logic to discard code from any function + that is not currently on the stack. + + The unlinking completely reverts any optimized call sites, such that they + may be relinked again in future. + + * JavaScriptCore.exp: + * bytecode/CodeBlock.cpp: + (JSC::CodeBlock::unlinkCalls): + (JSC::CodeBlock::clearEvalCache): + * bytecode/CodeBlock.h: + (JSC::CallLinkInfo::CallLinkInfo): + (JSC::CallLinkInfo::unlink): + * bytecode/EvalCodeCache.h: + (JSC::EvalCodeCache::clear): + * heap/Heap.cpp: + (JSC::Heap::getConservativeRegisterRoots): + * heap/Heap.h: + * jit/JIT.cpp: + (JSC::JIT::privateCompile): + * jit/JIT.h: + * jit/JITCall.cpp: + (JSC::JIT::compileOpCall): + * jit/JITWriteBarrier.h: + (JSC::JITWriteBarrierBase::clear): + * jsc.cpp: + (GlobalObject::GlobalObject): + (functionReleaseExecutableMemory): + * runtime/Executable.cpp: + (JSC::EvalExecutable::unlinkCalls): + (JSC::ProgramExecutable::unlinkCalls): + (JSC::FunctionExecutable::discardCode): + (JSC::FunctionExecutable::unlinkCalls): + * runtime/Executable.h: + * runtime/JSGlobalData.cpp: + (JSC::SafeRecompiler::returnValue): + (JSC::SafeRecompiler::operator()): + (JSC::JSGlobalData::releaseExecutableMemory): + +2011-06-27 Gavin Barraclough <barraclough@apple.com> + + Reviewed by Darin Adler & Oliver Hunt. + + https://bugs.webkit.org/show_bug.cgi?id=50554 + RegExp.prototype.toString does not escape slashes + + The problem here is that we don't escape forwards slashes when converting + a RegExp to a string. This means that RegExp("/").toString() is "///", + which is not a valid RegExp literal. Also, we return an invalid literal + for RegExp.prototype.toString() ("//", which is an empty single-line comment). + + From ES5: + "NOTE: The returned String has the form of a RegularExpressionLiteral that + evaluates to another RegExp object with the same behaviour as this object." + + * runtime/RegExpObject.cpp: + (JSC::regExpObjectSource): + - Escape forward slashes when getting the source of a RegExp. + * runtime/RegExpPrototype.cpp: + (JSC::regExpProtoFuncToString): + - Remove unnecessary and erroneous hack to return "//" as the string + representation of RegExp.prototype. This is not a valid RegExp literal + (it is an empty single-line comment). + +2011-06-27 Gavin Barraclough <barraclough@apple.com> + + Reviewed by Oliver Hunt. + + https://bugs.webkit.org/show_bug.cgi?id=63497 + Add DEBUG_WITH_BREAKPOINT support to the DFG JIT. + + * dfg/DFGByteCodeParser.cpp: + (JSC::DFG::ByteCodeParser::parseBlock): + * dfg/DFGNode.h: + * dfg/DFGNonSpeculativeJIT.cpp: + (JSC::DFG::NonSpeculativeJIT::compile): + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::compile): + +2011-06-27 Juan C. Montemayor <jmont@apple.com> + + Reviewed by Mark Rowe. + + Indirectly including TextPosition.h and XPathGrammar.h causes compile errors + https://bugs.webkit.org/show_bug.cgi?id=63392 + + When both TextPosition.h and XPathGrammar.h are included a compile-error + is caused, since XPathGrammar.h defines a macro called NUMBER and + TextPosition has a typedef named NUMBER. + + * wtf/text/TextPosition.h: + (WTF::TextPosition::TextPosition): + (WTF::TextPosition::minimumPosition): + (WTF::TextPosition::belowRangePosition): + +2011-06-27 Filip Pizlo <fpizlo@apple.com> + + Reviewed by Gavin Barraclough. + + DFG JIT does not perform put_by_id caching. + https://bugs.webkit.org/show_bug.cgi?id=63409 + + * bytecode/StructureStubInfo.h: + * dfg/DFGJITCodeGenerator.cpp: + (JSC::DFG::JITCodeGenerator::cachedPutById): + * dfg/DFGJITCodeGenerator.h: + * dfg/DFGJITCompiler.cpp: + (JSC::DFG::JITCompiler::compileFunction): + * dfg/DFGJITCompiler.h: + (JSC::DFG::JITCompiler::addPropertyAccess): + (JSC::DFG::JITCompiler::PropertyAccessRecord::PropertyAccessRecord): + * dfg/DFGNonSpeculativeJIT.cpp: + (JSC::DFG::NonSpeculativeJIT::compile): + * dfg/DFGOperations.cpp: + * dfg/DFGOperations.h: + * dfg/DFGRepatch.cpp: + (JSC::DFG::dfgRepatchByIdSelfAccess): + (JSC::DFG::tryCacheGetByID): + (JSC::DFG::appropriatePutByIdFunction): + (JSC::DFG::tryCachePutByID): + (JSC::DFG::dfgRepatchPutByID): + * dfg/DFGRepatch.h: + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::compile): + +2011-06-27 Gustavo Noronha Silva <gns@gnome.org> + + Unreviewed build fix. One more filed missing during distcheck, for + the MIPS build. + + * GNUmakefile.list.am: + +2011-06-26 Filip Pizlo <fpizlo@apple.com> + + Reviewed by Gavin Barraclough. + + DFG non-speculative JIT has potentially harmful speculations with respect to arithmetic operations. + https://bugs.webkit.org/show_bug.cgi?id=63347 + + * dfg/DFGNonSpeculativeJIT.cpp: + - Changed arithmetic operations to speculate in favor of integers. + (JSC::DFG::NonSpeculativeJIT::valueToNumber): + (JSC::DFG::NonSpeculativeJIT::knownConstantArithOp): + (JSC::DFG::NonSpeculativeJIT::basicArithOp): + (JSC::DFG::NonSpeculativeJIT::compile): + * dfg/DFGNonSpeculativeJIT.h: + * dfg/DFGOperations.cpp: + - Added slow-path routines for arithmetic that perform no speculation; the + non-speculative JIT will generate calls to these in cases where its + speculation fails. + * dfg/DFGOperations.h: + +2011-06-24 Nikolas Zimmermann <nzimmermann@rim.com> + + Reviewed by Rob Buis. + + Integrate SVG Fonts within GlyphPage concept, removing the special SVG code paths from Font, making it possible to reuse the simple text code path for SVG Fonts + https://bugs.webkit.org/show_bug.cgi?id=59085 + + * wtf/Platform.h: Force Qt-EWS into a full rebuild, otherwhise this patch breaks the EWS. + +2011-06-24 Michael Saboff <msaboff@apple.com> + + Reviewed by Gavin Barraclough. + + Arm Assembler, Immediate stack offset values truncated to 8 bits for add & sub + https://bugs.webkit.org/show_bug.cgi?id=63345 + + The methods ARMThumbImmediate::getUInt9 and ARMThumbImmediate::getUInt10 + return 9 and 10 bit quantities, therefore changed their return type from + uint8_t to uint16_t. Also casted the places where they are used as they + are currently shifted and used as 7 or 8 bit values. + + These methods are currently used for literals for stack offsets, + including creating and destroying stack frames. The prior truncation of + the upper bits caused stack frames to be too small, thus allowing a + JIT'ed function to access and overwrite stack space outside of the + incorrectly sized stack frame. + + * assembler/ARMv7Assembler.h: + (JSC::ARMThumbImmediate::getUInt9): + (JSC::ARMThumbImmediate::getUInt10): + (JSC::ARMv7Assembler::add): + (JSC::ARMv7Assembler::ldr): + (JSC::ARMv7Assembler::str): + (JSC::ARMv7Assembler::sub): + (JSC::ARMv7Assembler::sub_S): + +2011-06-24 Michael Saboff <msaboff@apple.com> + + Reviewed by Geoffrey Garen. + + releaseFastMallocFreeMemory doesn't adjust free counts for scavenger + https://bugs.webkit.org/show_bug.cgi?id=63015 + + Added code to adjust class TCMalloc_PageHeap variables free_committed_pages_ and + min_free_committed_pages_since_last_scavenge_ in ReleaseFreeList(). These + adjustments are a bug. These need to reflect the pages that are released + in ReleaseFreeLsit so that scavenge doesn't try to free that many pages as well. + Made ReleaseFreeList a member of TCMalloc_PageHeap in the process. Updated + Check() and helper method CheckList() to check the number of actual free pages + with free_committed_pages_. + + The symptom of the problem of the existing code is that the scavenger may + run unneccesarily without any real work to do, i.e. pages on the free lists. + The scanvenger would also end up freeing too many pages, that is going below + the current 528 target free pages. + + Note that the style of the changes was kept consistent with the + existing style. + + * wtf/FastMalloc.cpp: + (WTF::TCMalloc_PageHeap::Check): + (WTF::TCMalloc_PageHeap::CheckList): + (WTF::TCMalloc_PageHeap::ReleaseFreeList): + +2011-06-24 Abhishek Arya <inferno@chromium.org> + + Reviewed by Darin Adler. + + Match other clampTo* functions in style with clampToInteger(float) + function. + https://bugs.webkit.org/show_bug.cgi?id=53449 + + * wtf/MathExtras.h: + (clampToInteger): + (clampToFloat): + (clampToPositiveInteger): + +2011-06-24 Sheriff Bot <webkit.review.bot@gmail.com> + + Unreviewed, rolling out r89594. + http://trac.webkit.org/changeset/89594 + https://bugs.webkit.org/show_bug.cgi?id=63316 + + It broke 5 tests on the Qt bot (Requested by Ossy_DC on + #webkit). + + * GNUmakefile.list.am: + * JavaScriptCore.gypi: + * icu/unicode/uscript.h: Removed. + * wtf/unicode/ScriptCodesFromICU.h: Removed. + * wtf/unicode/brew/UnicodeBrew.h: + * wtf/unicode/glib/UnicodeGLib.h: + * wtf/unicode/icu/UnicodeIcu.h: + * wtf/unicode/qt4/UnicodeQt4.h: + * wtf/unicode/wince/UnicodeWinCE.h: + +2011-06-23 Filip Pizlo <fpizlo@apple.com> + + Reviewed by Gavin Barraclough. + + DFG non-speculative JIT should have obvious optimizations for GetById and GetByVal + https://bugs.webkit.org/show_bug.cgi?id=63173 + + * dfg/DFGJITCodeGenerator.cpp: + (JSC::DFG::JITCodeGenerator::cachedGetById): + * dfg/DFGJITCodeGenerator.h: + * dfg/DFGNonSpeculativeJIT.cpp: + (JSC::DFG::NonSpeculativeJIT::compile): + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::compile): + +2011-06-23 Oliver Hunt <oliver@apple.com> + + Fix Qt again. + + * assembler/ARMAssembler.h: + (JSC::ARMAssembler::readPointer): + +2011-06-23 Oliver Hunt <oliver@apple.com> + + Fix Qt Build + + * assembler/ARMAssembler.h: + (JSC::ARMAssembler::readPointer): + +2011-06-23 Stephanie Lewis <slewis@apple.com> + + Reviewed by Darin Adler. + + https://bugs.webkit.org/show_bug.cgi?id=63298 + Replace Malloc with FastMalloc to match the rest of wtf. + + * wtf/BlockStack.h: + (WTF::::~BlockStack): + (WTF::::grow): + (WTF::::shrink): + +2011-06-23 Oliver Hunt <oliver@apple.com> + + Reviewed by Gavin Barraclough. + + Add the ability to dynamically modify linked call sites + https://bugs.webkit.org/show_bug.cgi?id=63291 + + Add JITWriteBarrier as a writebarrier class that allows + reading and writing directly into the code stream. + + This required adding logic to all the assemblers to allow + us to read values back out of the instruction stream. + + * JavaScriptCore.xcodeproj/project.pbxproj: + * assembler/ARMAssembler.h: + (JSC::ARMAssembler::readPointer): + * assembler/ARMv7Assembler.h: + (JSC::ARMv7Assembler::readPointer): + (JSC::ARMv7Assembler::readInt32): + (JSC::ARMv7Assembler::decodeTwoWordOp5i6Imm4Reg4EncodedImmFirst): + (JSC::ARMv7Assembler::decodeTwoWordOp5i6Imm4Reg4EncodedImmSecond): + * assembler/AbstractMacroAssembler.h: + (JSC::AbstractMacroAssembler::readPointer): + * assembler/MIPSAssembler.h: + (JSC::MIPSAssembler::readInt32): + (JSC::MIPSAssembler::readPointer): + * assembler/MacroAssemblerCodeRef.h: + (JSC::MacroAssemblerCodePtr::operator!): + * assembler/SH4Assembler.h: + (JSC::SH4Assembler::readPCrelativeAddress): + (JSC::SH4Assembler::readPointer): + (JSC::SH4Assembler::readInt32): + * assembler/X86Assembler.h: + (JSC::X86Assembler::readPointer): + * bytecode/CodeBlock.cpp: + (JSC::CodeBlock::visitAggregate): + * bytecode/CodeBlock.h: + (JSC::MethodCallLinkInfo::seenOnce): + (JSC::MethodCallLinkInfo::setSeen): + * heap/MarkStack.h: + * jit/JIT.cpp: + (JSC::JIT::privateCompile): + (JSC::JIT::linkCall): + (JSC::JIT::linkConstruct): + * jit/JITPropertyAccess.cpp: + (JSC::JIT::patchMethodCallProto): + * jit/JITPropertyAccess32_64.cpp: + * jit/JITWriteBarrier.h: Added. + (JSC::JITWriteBarrierBase::operator UnspecifiedBoolType*): + (JSC::JITWriteBarrierBase::operator!): + (JSC::JITWriteBarrierBase::setFlagOnBarrier): + (JSC::JITWriteBarrierBase::isFlagged): + (JSC::JITWriteBarrierBase::setLocation): + (JSC::JITWriteBarrierBase::location): + (JSC::JITWriteBarrierBase::JITWriteBarrierBase): + (JSC::JITWriteBarrierBase::set): + (JSC::JITWriteBarrierBase::get): + (JSC::JITWriteBarrier::JITWriteBarrier): + (JSC::JITWriteBarrier::set): + (JSC::JITWriteBarrier::get): + (JSC::MarkStack::append): + +2011-06-23 Gavin Barraclough <barraclough@apple.com> + + Reviewed by Oliver Hunt. + + https://bugs.webkit.org/show_bug.cgi?id=61585 + Crash running regexp /(?:(?=g))|(?:m).{2147483648,}/ + + This is due to use of int instead of unsigned, bad math around + the 2^31 boundary. + + * yarr/YarrInterpreter.cpp: + (JSC::Yarr::ByteCompiler::emitDisjunction): + - Change some uses of int to unsigned, refactor compare logic to + restrict to the range 0..2^32-1 (rather than -2^32-1..2^32-1). + * yarr/YarrJIT.cpp: + (JSC::Yarr::YarrGenerator::generate): + (JSC::Yarr::YarrGenerator::backtrack): + - Ditto. + +2011-06-22 Gavin Barraclough <barraclough@apple.com> + + Reviewed by Sam Weinig. + + https://bugs.webkit.org/show_bug.cgi?id=63218 + DFG JIT - remove machine type guarantees from graph + + The DFG JIT currently makes assumptions about the types of machine registers + that certain nodes will be loaded into. This will be broken as we generate + nodes to produce both integer and double code paths. Remove int<->double + conversions nodes. This design decision also gave rise to multiple types of + constant nodes, requiring separate handling for each type. Merge these back + into JSConstant. + + * dfg/DFGAliasTracker.h: + (JSC::DFG::AliasTracker::equalIgnoringLaterNumericConversion): + * dfg/DFGByteCodeParser.cpp: + (JSC::DFG::ByteCodeParser::getToInt32): + (JSC::DFG::ByteCodeParser::getToNumber): + (JSC::DFG::ByteCodeParser::toInt32): + (JSC::DFG::ByteCodeParser::toNumber): + (JSC::DFG::ByteCodeParser::isInt32Constant): + (JSC::DFG::ByteCodeParser::isDoubleConstant): + (JSC::DFG::ByteCodeParser::valueOfInt32Constant): + (JSC::DFG::ByteCodeParser::valueOfDoubleConstant): + (JSC::DFG::ByteCodeParser::one): + (JSC::DFG::ByteCodeParser::predictInt32): + * dfg/DFGGraph.cpp: + (JSC::DFG::Graph::dump): + * dfg/DFGJITCodeGenerator.h: + (JSC::DFG::JITCodeGenerator::silentFillGPR): + (JSC::DFG::JITCodeGenerator::silentFillFPR): + (JSC::DFG::JITCodeGenerator::isJSConstant): + (JSC::DFG::JITCodeGenerator::isDoubleConstant): + (JSC::DFG::JITCodeGenerator::valueOfJSConstantAsImmPtr): + * dfg/DFGJITCompiler.cpp: + (JSC::DFG::JITCompiler::fillNumericToDouble): + (JSC::DFG::JITCompiler::fillInt32ToInteger): + * dfg/DFGJITCompiler.h: + (JSC::DFG::JITCompiler::isJSConstant): + (JSC::DFG::JITCompiler::isInt32Constant): + (JSC::DFG::JITCompiler::isDoubleConstant): + (JSC::DFG::JITCompiler::valueOfJSConstant): + (JSC::DFG::JITCompiler::valueOfInt32Constant): + (JSC::DFG::JITCompiler::valueOfDoubleConstant): + * dfg/DFGNode.h: + (JSC::DFG::Node::Node): + (JSC::DFG::Node::isConstant): + (JSC::DFG::Node::notTakenBytecodeOffset): + * dfg/DFGNonSpeculativeJIT.cpp: + (JSC::DFG::NonSpeculativeJIT::isKnownInteger): + (JSC::DFG::NonSpeculativeJIT::isKnownNumeric): + (JSC::DFG::NonSpeculativeJIT::compile): + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::fillSpeculateIntInternal): + (JSC::DFG::SpeculativeJIT::fillSpeculateCell): + (JSC::DFG::SpeculativeJIT::compilePeepHoleIntegerBranch): + (JSC::DFG::SpeculativeJIT::compile): + +2011-06-23 Jungshik Shin <jshin@chromium.org> + + Reviewed by Alexey Proskuryakov. + + Add ScriptCodesFromICU.h to wtf/unicode and make necessary changes in + build files for ports not using ICU. + Add icu/unicode/uscript.h for ports using ICU. It's taken from + ICU 3.6 (the version used on Mac OS 10.5) + + http://bugs.webkit.org/show_bug.cgi?id=20797 + + * GNUmakefile.list.am: + * JavaScriptCore.gypi: + * icu/unicode/uscript.h: Added for UScriptCode enum. + * wtf/unicode/ScriptCodesFromICU.h: UScriptCode enum added. + * wtf/unicode/icu/UnicodeIcu.h: + * wtf/unicode/brew/UnicodeBrew.h: + * wtf/unicode/glib/UnicodeGLib.h: + * wtf/unicode/qt4/UnicodeQt4.h: + * wtf/unicode/wince/UnicodeWinCE.h: + +2011-06-23 Ryuan Choi <ryuan.choi@samsung.com> + + Reviewed by Andreas Kling. + + [EFL][WK2] Add PLATFORM(EFL) to use UNIX_DOMAIN_SOCKETS. + https://bugs.webkit.org/show_bug.cgi?id=63228 + + * wtf/Platform.h: Add PLATFORM(EFL) guard. + +2011-06-23 Sheriff Bot <webkit.review.bot@gmail.com> + + Unreviewed, rolling out r89547. + http://trac.webkit.org/changeset/89547 + https://bugs.webkit.org/show_bug.cgi?id=63252 + + "Chrmium crash on start" (Requested by yurys on #webkit). + + * wtf/DynamicAnnotations.cpp: + (WTFAnnotateBenignRaceSized): + (WTFAnnotateHappensBefore): + (WTFAnnotateHappensAfter): + * wtf/DynamicAnnotations.h: + +2011-06-23 Timur Iskhodzhanov <timurrrr@google.com> + + Reviewed by David Levin. + + Make dynamic annotations weak symbols and prevent identical code folding by the linker + https://bugs.webkit.org/show_bug.cgi?id=62443 + + * wtf/DynamicAnnotations.cpp: + (WTFAnnotateBenignRaceSized): + (WTFAnnotateHappensBefore): + (WTFAnnotateHappensAfter): + * wtf/DynamicAnnotations.h: + +2011-06-22 Yael Aharon <yael.aharon@nokia.com> + + Reviewed by Andreas Kling. + + [Qt] Add a build flag for building with libxml2 and libxslt. + https://bugs.webkit.org/show_bug.cgi?id=63113 + + * wtf/Platform.h: + +2011-06-22 Sheriff Bot <webkit.review.bot@gmail.com> + + Unreviewed, rolling out r89489. + http://trac.webkit.org/changeset/89489 + https://bugs.webkit.org/show_bug.cgi?id=63203 + + Broke chromium mac build on build.webkit.org (Requested by + abarth on #webkit). + + * wtf/Platform.h: + +2011-06-22 Cary Clark <caryclark@google.com> + + Reviewed by Darin Fisher. + + Use Skia if Skia on Mac Chrome is enabled + https://bugs.webkit.org/show_bug.cgi?id=62999 + + * wtf/Platform.h: + Add switch to use Skia if, externally, + Skia has been enabled by a gyp define. + +2011-06-22 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Oliver Hunt. + + * interpreter/RegisterFile.h: Removed unnecessary #include <stdio.h>. + +2011-06-22 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Oliver Hunt. + + Removed the conceit that global variables are local variables when running global code + https://bugs.webkit.org/show_bug.cgi?id=63106 + + This is required for write barrier correctness. + + SunSpider reports about a 0.5% regression, mostly from bitops-bitwise-and.js. + I was able to reduce the regression with a tiny peephole optimization in + the bytecompiler, but not eliminate it. I'm committing this assuming + that turning on generational GC will win back at least 0.5%. + + (FWIW, the DFG JIT can easily eliminate any regression by sharing loads of + the global object's var storage. I considered doing the same kind of + optimization in the existing JIT, but it seemed like moving in the wrong + direction.) + + * bytecompiler/BytecodeGenerator.cpp: + (JSC::BytecodeGenerator::addGlobalVar): + (JSC::BytecodeGenerator::BytecodeGenerator): Don't give global variables + negative indices, since they're no longer negatively offset from the + current stack frame. + + Do give global variables monotonically increasing positive indices, since + that's much easier to work with. + + Don't limit the number of optimizable global variables, since it's no + longer limited by the register file, since they're no longer stored in + the register file. + + (JSC::BytecodeGenerator::registerFor): Global code never has any local + registers because a var in global code is actually a property of the + global object. + + (JSC::BytecodeGenerator::constRegisterFor): Ditto. + + (JSC::BytecodeGenerator::emitResolve): Did a tiny bit of constant + propagation and dead code elimination to speed up our compiles and + reduce WTFs / minute. + + * bytecompiler/BytecodeGenerator.h: + (JSC::BytecodeGenerator::registerFor): Removed special handling of globals. + + (JSC::BytecodeGenerator::shouldOptimizeLocals): Don't optimize locals in + global code, since there are none. + + (JSC::BytecodeGenerator::canOptimizeNonLocals): Do optimize non-locals + in global code (i.e., global vars), since there are some. + + * interpreter/Interpreter.cpp: + (JSC::Interpreter::callEval): + (JSC::Interpreter::Interpreter): + (JSC::Interpreter::dumpRegisters): + (JSC::Interpreter::execute): + * interpreter/Interpreter.h: Updated for deleted / renamed code. + + * interpreter/RegisterFile.cpp: + (JSC::RegisterFile::gatherConservativeRoots): + (JSC::RegisterFile::releaseExcessCapacity): Updated for deleted / renamed + data members. + + * interpreter/RegisterFile.h: + (JSC::RegisterFile::begin): + (JSC::RegisterFile::size): + (JSC::RegisterFile::RegisterFile): + (JSC::RegisterFile::shrink): Removed all code and comments dealing with + global variables stored in the register file. + + (JSC::RegisterFile::grow): Updated for same. + + Also, a slight correctness fix: Test the VM commit end, and not just the + in-use end, when checking for stack overflow. In theory, it's invalid to + commit past the end of your allocation, even if you never touch that + memory. This makes the usable size of the stack slightly smaller. No test + because we don't know of any case in practice where this crashes. + + * runtime/JSGlobalData.cpp: + (JSC::JSGlobalData::JSGlobalData): Updated for changes above. + + * runtime/JSGlobalObject.cpp: + (JSC::JSGlobalObject::resizeRegisters): + (JSC::JSGlobalObject::addStaticGlobals): + * runtime/JSGlobalObject.h: Simplified globals to have monotonically + increasing indexes, always located in our external storage. + +2011-06-21 MORITA Hajime <morrita@google.com> + + Unreviewed, rolling out r89401 and r89403. + http://trac.webkit.org/changeset/89401 + http://trac.webkit.org/changeset/89403 + https://bugs.webkit.org/show_bug.cgi?id=62970 + + Breaks mac build and mistakenly enables the spellcheck API + + * Configurations/FeatureDefines.xcconfig: + * JavaScriptCore.xcodeproj/project.pbxproj: + +2011-06-21 Kent Tamura <tkent@chromium.org> + + [Mac] Sort Xcode project files. + + * JavaScriptCore.xcodeproj/project.pbxproj: + +2011-06-20 MORITA Hajime <morrita@google.com> + + Reviewed by Kent Tamura. + + Spellcheck API should be build-able. + https://bugs.webkit.org/show_bug.cgi?id=62970 + + No new tests, changing only build related files + + * Configurations/FeatureDefines.xcconfig: + +2011-06-21 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Oliver Hunt. + + Moved 'const' off the global-variable-as-local-variable crack pipe + https://bugs.webkit.org/show_bug.cgi?id=63105 + + This is necessary for moving the rest of the code off of same. + + Many problems remain in our handling of const. I have fixed none of them. + + * bytecompiler/BytecodeGenerator.h: + (JSC::BytecodeGenerator::scopeChain): New accessor, needed to enable + const to directly implement its unique scoping rules. + + * bytecompiler/NodesCodegen.cpp: + (JSC::PrefixResolveNode::emitBytecode): Do specify that our resolve is + for writing, so we don't overwrite const variables. + + (JSC::ConstDeclNode::emitCodeSingle): Don't assume that all declared const + variables are available as local variables, since this won't be the case + once global variables are not available as local variables. Instead, use + put_scoped_var in the case where there is no local variable. Like a local + variable, put_scoped_var succeeds even though const properties are + read-only, since put_scoped_var skips read-only checks. (Yay?) + +2011-06-21 Oliver Hunt <oliver@apple.com> + + Reviewed by Alexey Proskuryakov. + + REGRESSION(r89257): It broke 2 jscore tests (Requested by Ossy_away on #webkit). + https://bugs.webkit.org/show_bug.cgi?id=63052 + + Release mode only failure, the stack overflow guards were getting there error + handling inlined, so that they were essentially causing their own demise. + + * parser/JSParser.cpp: + (JSC::JSParser::updateErrorMessage): + (JSC::JSParser::updateErrorWithNameAndMessage): + +2011-06-20 Kenneth Russell <kbr@google.com> + + Unreviewed. + + Rolled out r89233 and r89235 because of crashes in http/tests/misc/acid3.html on Snow Leopard and other platforms + https://bugs.webkit.org/show_bug.cgi?id=63022 + + * wtf/Platform.h: + +2011-06-18 Anders Carlsson <andersca@apple.com> + + Reviewed by Darin Adler. + + Disallow assigning into PassOwnArrayPtr, PassOwnPtr and PassRefPtr + https://bugs.webkit.org/show_bug.cgi?id=62940 + + Remove clear() and all assignment operators except one which now has a COMPILE_ASSERT. + + * wtf/PassOwnArrayPtr.h: + (WTF::PassOwnArrayPtr::operator=): + * wtf/PassOwnPtr.h: + (WTF::PassOwnPtr::operator=): + * wtf/PassRefPtr.h: + (WTF::PassRefPtr::operator=): + (WTF::NonNullPassRefPtr::operator=): + +2011-06-20 Oliver Hunt <oliver@apple.com> + + Reviewed by Darin Adler. + + REGRESSION (r79060): Searching for a flight at united.com fails + https://bugs.webkit.org/show_bug.cgi?id=63003 + + This original change also broke Twitter, and we attempted to refine the fix to + address that problem (http://trac.webkit.org/changeset/80542), but since it still breaks United, + we need to revert the change until we understand the problem better. + + * wtf/DateMath.cpp: + (WTF::parseDateFromNullTerminatedCharacters): + +2011-06-20 Juan C. Montemayor <jmont@apple.com> + + Reviewed by Oliver Hunt. + + No context for javascript parse errors. + https://bugs.webkit.org/show_bug.cgi?id=62613 + + Parse errors now show more details like: + "Unexpected token: ]" + or + "Expected token: while" + + For reserved names, numbers, indentifiers, strings, lexer errors, + and EOFs, the following error messages are printed: + + "Use of reserved word: super" + "Unexpected number: 42" + "Unexpected identifier: " + "Unexpected string: "foobar"" + "Invalid token character sequence: \u4023" + "Unexpected EOF" + + * parser/JSParser.cpp: + (JSC::JSParser::consume): + (JSC::JSParser::getToken): + (JSC::JSParser::getTokenName): + (JSC::JSParser::updateErrorMessageSpecialCase): + (JSC::JSParser::updateErrorMessage): + (JSC::JSParser::updateErrorWithNameAndMessage): + (JSC::jsParse): + (JSC::JSParser::JSParser): + (JSC::JSParser::parseProgram): + (JSC::JSParser::parseVarDeclarationList): + (JSC::JSParser::parseForStatement): + (JSC::JSParser::parseBreakStatement): + (JSC::JSParser::parseContinueStatement): + (JSC::JSParser::parseWithStatement): + (JSC::JSParser::parseTryStatement): + (JSC::JSParser::parseStatement): + (JSC::JSParser::parseFormalParameters): + (JSC::JSParser::parseFunctionInfo): + (JSC::JSParser::parseAssignmentExpression): + (JSC::JSParser::parsePrimaryExpression): + (JSC::JSParser::parseMemberExpression): + (JSC::JSParser::parseUnaryExpression): + * parser/JSParser.h: + * parser/Lexer.cpp: + (JSC::Lexer::lex): + * parser/Parser.cpp: + (JSC::Parser::parse): + +2011-06-20 Nikolas Zimmermann <nzimmermann@rim.com> + + Reviewed by Rob Buis. + + Integrate SVG Fonts within GlyphPage concept, removing the special SVG code paths from Font, making it possible to reuse the simple text code path for SVG Fonts + https://bugs.webkit.org/show_bug.cgi?id=59085 + + * wtf/Platform.h: Force Qt-EWS into a full rebuild, otherwhise this patch breaks the EWS. + +2011-06-19 Oliver Hunt <oliver@apple.com> + + Reviewed by Sam Weinig. + + Correct logic for putting errors on the correct line when handling JSONP + https://bugs.webkit.org/show_bug.cgi?id=62962 + + Minor fix for the minor fix. *sigh* + + * interpreter/Interpreter.cpp: + (JSC::Interpreter::execute): + +2011-06-19 Oliver Hunt <oliver@apple.com> + + Minor fix to correct layout test results. + + * interpreter/Interpreter.cpp: + (JSC::Interpreter::execute): + +2011-06-17 Oliver Hunt <oliver@apple.com> + + Reviewed by Gavin Barraclough. + + JSONP is unnecessarily slow + https://bugs.webkit.org/show_bug.cgi?id=62920 + + JSONP has unfortunately become a fairly common idiom online, yet + it triggers very poor performance in JSC as we end up doing codegen + for a large number of property accesses that will + * only be run once, so the vast amount of logic we dump to handle + caching of accesses is unnecessary. + * We are doing codegen that is directly proportional to just + creating the object in the first place. + + This patch extends the use of the literal parser to JSONP-like structures + in global code, handling a number of different forms I have seen online. + In an extreme case this improves performance of JSONP by more than 2x + due to removal of code generation and execution time, and a few optimisations + that I made to the parser itself. + + * API/JSValueRef.cpp: + (JSValueMakeFromJSONString): + * interpreter/Interpreter.cpp: + (JSC::Interpreter::callEval): + (JSC::Interpreter::execute): + * parser/Lexer.cpp: + (JSC::Lexer::isKeyword): + * parser/Lexer.h: + * runtime/JSGlobalObjectFunctions.cpp: + (JSC::globalFuncEval): + * runtime/JSONObject.cpp: + (JSC::JSONProtoFuncParse): + * runtime/LiteralParser.cpp: + (JSC::LiteralParser::tryJSONPParse): + (JSC::LiteralParser::makeIdentifier): + (JSC::LiteralParser::Lexer::lex): + (JSC::LiteralParser::Lexer::next): + (JSC::isSafeStringCharacter): + (JSC::LiteralParser::Lexer::lexString): + (JSC::LiteralParser::Lexer::lexNumber): + (JSC::LiteralParser::parse): + * runtime/LiteralParser.h: + (JSC::LiteralParser::LiteralParser): + (JSC::LiteralParser::tryLiteralParse): + (JSC::LiteralParser::Lexer::Lexer): + +2011-06-18 Sheriff Bot <webkit.review.bot@gmail.com> + + Unreviewed, rolling out r89184. + http://trac.webkit.org/changeset/89184 + https://bugs.webkit.org/show_bug.cgi?id=62927 + + It broke 22 tests on all bot (Requested by Ossy_weekend on + #webkit). + + * API/JSValueRef.cpp: + (JSValueMakeFromJSONString): + * interpreter/Interpreter.cpp: + (JSC::Interpreter::callEval): + (JSC::Interpreter::execute): + * parser/Lexer.cpp: + * parser/Lexer.h: + * runtime/JSGlobalObjectFunctions.cpp: + (JSC::globalFuncEval): + * runtime/JSONObject.cpp: + (JSC::JSONProtoFuncParse): + * runtime/LiteralParser.cpp: + (JSC::LiteralParser::Lexer::lex): + (JSC::isSafeStringCharacter): + (JSC::LiteralParser::Lexer::lexString): + (JSC::LiteralParser::Lexer::lexNumber): + (JSC::LiteralParser::parse): + * runtime/LiteralParser.h: + (JSC::LiteralParser::LiteralParser): + (JSC::LiteralParser::tryLiteralParse): + (JSC::LiteralParser::Lexer::Lexer): + (JSC::LiteralParser::Lexer::next): + +2011-06-17 Oliver Hunt <oliver@apple.com> + + Reviewed by Gavin Barraclough. + + JSONP is unnecessarily slow + https://bugs.webkit.org/show_bug.cgi?id=62920 + + JSONP has unfortunately become a fairly common idiom online, yet + it triggers very poor performance in JSC as we end up doing codegen + for a large number of property accesses that will + * only be run once, so the vast amount of logic we dump to handle + caching of accesses is unnecessary. + * We are doing codegen that is directly proportional to just + creating the object in the first place. + + This patch extends the use of the literal parser to JSONP-like structures + in global code, handling a number of different forms I have seen online. + In an extreme case this improves performance of JSONP by more than 2x + due to removal of code generation and execution time, and a few optimisations + that I made to the parser itself. + + * API/JSValueRef.cpp: + (JSValueMakeFromJSONString): + * interpreter/Interpreter.cpp: + (JSC::Interpreter::callEval): + (JSC::Interpreter::execute): + * parser/Lexer.cpp: + (JSC::Lexer::isKeyword): + * parser/Lexer.h: + * runtime/JSGlobalObjectFunctions.cpp: + (JSC::globalFuncEval): + * runtime/JSONObject.cpp: + (JSC::JSONProtoFuncParse): + * runtime/LiteralParser.cpp: + (JSC::LiteralParser::tryJSONPParse): + (JSC::LiteralParser::makeIdentifier): + (JSC::LiteralParser::Lexer::lex): + (JSC::LiteralParser::Lexer::next): + (JSC::isSafeStringCharacter): + (JSC::LiteralParser::Lexer::lexString): + (JSC::LiteralParser::Lexer::lexNumber): + (JSC::LiteralParser::parse): + * runtime/LiteralParser.h: + (JSC::LiteralParser::LiteralParser): + (JSC::LiteralParser::tryLiteralParse): + (JSC::LiteralParser::Lexer::Lexer): + +2011-06-17 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Oliver Hunt. + + Moved some property access JIT code into property access JIT files + https://bugs.webkit.org/show_bug.cgi?id=62906 + + * jit/JITOpcodes.cpp: + * jit/JITOpcodes32_64.cpp: + * jit/JITPropertyAccess.cpp: + (JSC::JIT::emitSlow_op_put_by_val): + (JSC::JIT::emit_op_get_scoped_var): + (JSC::JIT::emit_op_put_scoped_var): + (JSC::JIT::emit_op_get_global_var): + (JSC::JIT::emit_op_put_global_var): + * jit/JITPropertyAccess32_64.cpp: + (JSC::JIT::emit_op_get_scoped_var): + (JSC::JIT::emit_op_put_scoped_var): + (JSC::JIT::emit_op_get_global_var): + (JSC::JIT::emit_op_put_global_var): + +2011-06-17 Anders Carlsson <andersca@apple.com> + + Build fix. + + * JavaScriptCore.xcodeproj/project.pbxproj: + +2011-06-17 Geoffrey Garen <ggaren@apple.com> + + Try to fix the Leopard build? + + * JavaScriptCore.xcodeproj/project.pbxproj: + +2011-06-16 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Oliver Hunt. + + Added some write barrier action, compiled out by default + https://bugs.webkit.org/show_bug.cgi?id=62844 + + * JavaScriptCore.exp: Build! + + * JavaScriptCore.xcodeproj/project.pbxproj: Fixed an incremental build + issue with Heap.cpp. + + * heap/Heap.cpp: + (JSC::Heap::writeBarrierSlowCase): + * heap/Heap.h: + (JSC::Heap::writeBarrier): + * heap/MarkedBlock.h: + (JSC::MarkedBlock::isAtomAligned): + (JSC::MarkedBlock::blockFor): + (JSC::MarkedBlock::atomNumber): + (JSC::MarkedBlock::ownerSetNumber): + (JSC::MarkedBlock::addOldSpaceOwner): + (JSC::MarkedBlock::OwnerSet::OwnerSet): + (JSC::MarkedBlock::OwnerSet::add): + (JSC::MarkedBlock::OwnerSet::clear): + (JSC::MarkedBlock::OwnerSet::size): + (JSC::MarkedBlock::OwnerSet::didOverflow): + (JSC::MarkedBlock::OwnerSet::owners): Added a basic write barrier that + tracks owners for regions within blocks. Currently unused. + +2011-06-17 Raphael Kubo da Costa <kubo@profusion.mobi> + + Reviewed by Eric Seidel. + + [EFL] Add some OwnPtr specializations for EFL types. + For now there are specializations for Ecore_Evas and Evas_Object. + https://bugs.webkit.org/show_bug.cgi?id=62877 + + * wtf/CMakeListsEfl.txt: + * wtf/OwnPtrCommon.h: + * wtf/efl/OwnPtrEfl.cpp: Added. + (WTF::deleteOwnedPtr): + +2011-06-17 Joone Hur <joone.hur@collabora.co.uk> + + Reviewed by Martin Robinson. + + [GTK] Replace GdkRectangle by cairo_rectangle_int_t + https://bugs.webkit.org/show_bug.cgi?id=60687 + + Replace GdkRectangle by cairo_rectangle_int_t. + + * wtf/gobject/GTypedefs.h: Replace GdkRectangle by cairo_rectangle_int_t. + +2011-06-16 Gavin Barraclough <barraclough@apple.com> + + Reviewed by Oliver Hunt. + + https://bugs.webkit.org/show_bug.cgi?id=53014 + ES5 strict mode keyword restrictions aren't implemented + + The following are future restricted words is strict mode code: + implements, interface, let, package, private, protected, public, static, yield + + * parser/JSParser.h: + - Add RESERVED_IF_STRICT token. + * parser/Keywords.table: + - Add new future restricted words. + * parser/Lexer.cpp: + (JSC::Lexer::parseIdentifier): + - Check for RESERVED_IF_STRICT; in nonstrict code this is converted to IDENT. + (JSC::Lexer::lex): + - Pass strictMode flag to parseIdentifier. + * parser/Lexer.h: + - parseIdentifier needs a strictMode flag. + * runtime/CommonIdentifiers.h: + - Add identifiers for new reserved words. + +2011-06-16 Gavin Barraclough <barraclough@apple.com> + + Reviewed by Oliver Hunt. + + https://bugs.webkit.org/show_bug.cgi?id=23611 + Multiline Javascript comments cause incorrect parsing of following script. + + From the spec: + "A MultiLineComment [is] simply discarded if it contains no line terminator, + but if a MultiLineComment contains one or more line terminators, then it is + replaced with a single line terminator, which becomes part of the stream of + inputs for the syntactic grammar." + + This may result in behavioural changes, due to automatic semicolon insertion. + + * parser/Lexer.cpp: + (JSC::Lexer::parseMultilineComment): + - Set m_terminator is we see a line terminator in a multiline comment. + +2011-06-16 Gavin Barraclough <barraclough@apple.com> + + Reviewed by Sam Weinig. + + https://bugs.webkit.org/show_bug.cgi?id=62824 + DFG JIT - add support for branch-fusion of compareEq, JSValue comparisons in SpeculativeJIT + + CompareEq of non-integer values is the most common cause of speculation failure. + + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::compilePeepHoleIntegerBranch): + - Support Equals. + (JSC::DFG::SpeculativeJIT::compilePeepHoleEq): + - new! - peephole optimized Eq of JSValues. + (JSC::DFG::SpeculativeJIT::compile): + - Add peephole optimization for CompareEq. + * dfg/DFGSpeculativeJIT.h: + (JSC::DFG::SpeculativeJIT::detectPeepHoleBranch): + - Add support for dead nodes between compare & branch. + (JSC::DFG::SpeculativeJIT::isInteger): + - Added to determine which form of peephole to do in CompareEq. + +2011-06-16 Geoffrey Garen <ggaren@apple.com> + + Try to fix the Windows build. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Export another + symbol. + + * bytecode/EvalCodeCache.h: + * heap/HandleHeap.h: + * heap/HeapRootVisitor.h: + * heap/NewSpace.h: + * runtime/ArgList.h: + * runtime/ScopeChain.h: + * runtime/SmallStrings.h: + * runtime/Structure.h: Stop forward-declaring things that don't really + exist anymore. + +2011-06-16 Geoffrey Garen <ggaren@apple.com> + + Try to fix the Mac build: Removed and re-added SlotVisitor.h to the Xcode + project while crossing my fingers and facing west. + + * JavaScriptCore.xcodeproj/project.pbxproj: + +2011-06-16 Geoffrey Garen <ggaren@apple.com> + + Build fix: Removed an incorrect symbol on Windows. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + +2011-06-16 Geoffrey Garen <ggaren@apple.com> + + Build fix: Removed an accidental commit from the future. + + * CMakeLists.txt: + +2011-06-16 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Oliver Hunt. + + Introduced SlotVisitor into the project + https://bugs.webkit.org/show_bug.cgi?id=62820 + + This resolves a class vs typedef forward declaration issue, and gives all + exported symbols the correct names. + + * CMakeLists.txt: + * GNUmakefile.list.am: + * JavaScriptCore.exp: + * JavaScriptCore.gypi: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * JavaScriptCore.xcodeproj/project.pbxproj: Build! + + * bytecode/EvalCodeCache.h: + * heap/HandleHeap.h: + * heap/Heap.cpp: + (JSC::Heap::Heap): + (JSC::Heap::markRoots): + * heap/Heap.h: + * heap/HeapRootVisitor.h: Replaced MarkStack with SlotVisitor. Now no + clients operate on a MarkStack. + + * heap/MarkStack.cpp: + (JSC::SlotVisitor::visitChildren): + (JSC::SlotVisitor::drain): + * heap/SlotVisitor.h: Added. + (JSC::SlotVisitor::SlotVisitor): Used 'protected' and a little cheesy + inheritance to give SlotVisitor all the attributes of MarkStack without + making this change giant. Over time, we will move more behavior into + SlotVisitor and its subclasses. + + * heap/MarkStack.h: + * heap/NewSpace.h: Replaced MarkStack with SlotVisitor. Now no + clients operate on a MarkStack. + + * runtime/ArgList.h: + * runtime/JSCell.h: + * runtime/JSObject.h: + * runtime/ScopeChain.h: + * runtime/SmallStrings.h: + * runtime/Structure.h: Replaced MarkStack with SlotVisitor. Now no + clients operate on a MarkStack. + +2011-06-15 Oliver Hunt <oliver@apple.com> + + Reviewed by Geoffrey Garen. + + Reduce memory usage of resolve_global + https://bugs.webkit.org/show_bug.cgi?id=62765 + + If we have a large number of resolve_globals in a single + block start planting plain resolve instructions instead + whenever we aren't in a loop. This allows us to reduce + the code size for extremely large functions without + losing the performance benefits of op_resolve_global. + + * bytecode/CodeBlock.h: + (JSC::CodeBlock::globalResolveInfoCount): + * bytecompiler/BytecodeGenerator.cpp: + (JSC::BytecodeGenerator::shouldAvoidResolveGlobal): + (JSC::BytecodeGenerator::emitResolve): + (JSC::BytecodeGenerator::emitResolveWithBase): + * bytecompiler/BytecodeGenerator.h: + +2011-06-16 Qi Zhang <qi.2.zhang@nokia.com> + + Reviewed by Laszlo Gombos. + + [Qt] Fix building with CONFIG(use_system_icu) + https://bugs.webkit.org/show_bug.cgi?id=62744 + + Do not define WTF_USE_QT4_UNICODE if WTF_USE_ICU_UNICODE is set. + + * wtf/Platform.h: + +2011-06-15 Darin Adler <darin@apple.com> + + Reviewed by Adam Barth. + + Remove obsolete LOOSE_OWN_PTR code + https://bugs.webkit.org/show_bug.cgi?id=59909 + + The internal Apple dependency on this is gone now. + + * wtf/OwnArrayPtr.h: Removed constructor that takes a raw pointer, + set function that takes a raw pointer. + + * wtf/OwnPtr.h: Removed constructor that takes a raw pointer, + set functino that takes a raw pointer. + + * wtf/PassOwnArrayPtr.h: Made constructor that takes a nullptr + and assignment operator that takes a nullptr unconditional. + Made constructor that takes a raw pointer private and explicit, + and removed assignment operator that takes a raw pointer. + + * wtf/PassOwnPtr.h: Made assignment operator that takes a nullptr + unconditional. Made constructor that takes a raw pointer private + and explicit, and removed assignment operator that takes a raw pointer. + +2011-06-15 Sam Weinig <sam@webkit.org> + + Reviewed by Geoffrey Garen and Gavin Barraclough. + + Make access-nseive ~9x faster on the non-speculative path by + adding special casing for doubles that can lossless-ly be converted + to a uint32_t in getByVal and putByVal. This avoids calls to stringification + and the hash lookup. Long term, we should try and get property of a getByVal + and putByVal to be an integer immediate even in the non-speculative path. + + * dfg/DFGOperations.cpp: + (JSC::DFG::putByVal): + (JSC::DFG::operationPutByValInternal): + +2011-06-15 Oliver Hunt <oliver@apple.com> + + Reviewed by Darin Adler. + + REGRESSION (r88719): 5by5.tv schedule is not visible + https://bugs.webkit.org/show_bug.cgi?id=62720 + + Problem here is that the lexer wasn't considering '$' to be + a valid character in an identifier. + + * parser/Lexer.h: + (JSC::Lexer::lexExpectIdentifier): + +2011-06-15 Oliver Hunt <oliver@apple.com> + + Reviewed by Sam Weinig. + + Reduce the size of global_resolve + https://bugs.webkit.org/show_bug.cgi?id=62738 + + Reduce the code size of global_resolve in the JIT by replacing + multiple pointer loads with a single pointer move + two offset + loads. + + * jit/JITOpcodes.cpp: + (JSC::JIT::emit_op_resolve_global): + * jit/JITOpcodes32_64.cpp: + (JSC::JIT::emit_op_resolve_global): + +2011-06-14 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Dan Bernstein. + + Fixed an inavlid ASSERT I found while investigating + <rdar://problem/9580254> Crash in JSC::HandleHeap::finalizeWeakHandles + 92 + https://bugs.webkit.org/show_bug.cgi?id=62699 + + No test since we don't know of a way to get WebCore to deallocate the + next-to-finalize handle, which is also the last handle in the list, + while finalizing the second-to-last handle in the list. + + * heap/HandleHeap.h: + (JSC::HandleHeap::deallocate): Don't ASSERT that m_nextToFinalize has a + non-0 next() after updating it, since it is valid to update m_nextToFinalize + to point to the tail sentinel. + + Do ASSERT that m_nextToFinalize has a non-0 next() before updating it, + since it is not valid to update m_nextToFinalize to point past the tail + sentinel. + + Also, use m_nextToFinalize consistently for clarity. + +2011-06-14 Gavin Barraclough <barraclough@apple.com> + + Reviewed by Sam Weinig. + + https://bugs.webkit.org/show_bug.cgi?id=43841 + SegmentedVector::operator== typo + + * wtf/SegmentedVector.h: + (WTF::SegmentedVectorIterator::operator==): + (WTF::SegmentedVectorIterator::operator!=): + +2011-06-14 Oliver Hunt <oliver@apple.com> + + Reviewed by Gavin Barraclough. + + Constant array literals result in unnecessarily large amounts of code + https://bugs.webkit.org/show_bug.cgi?id=62658 + + Add a new version of op_new_array that simply copies values from a buffer + we hang off of the CodeBlock, rather than generating code to place each + entry into the registerfile, and then copying it from the registerfile into + the array. This is a slight improvement on some sunspider tests, but no + measurable overall change. That's okay though as our goal was to reduce + code size without hurting performance. + + * bytecode/CodeBlock.cpp: + (JSC::CodeBlock::dump): + * bytecode/CodeBlock.h: + (JSC::CodeBlock::addImmediateBuffer): + (JSC::CodeBlock::immediateBuffer): + * bytecode/Opcode.h: + * bytecompiler/BytecodeGenerator.cpp: + (JSC::BytecodeGenerator::addImmediateBuffer): + (JSC::BytecodeGenerator::emitNewArray): + * bytecompiler/BytecodeGenerator.h: + * bytecompiler/NodesCodegen.cpp: + (JSC::ArrayNode::emitBytecode): + * interpreter/Interpreter.cpp: + (JSC::Interpreter::privateExecute): + * jit/JIT.cpp: + (JSC::JIT::privateCompileMainPass): + * jit/JIT.h: + * jit/JITOpcodes.cpp: + (JSC::JIT::emit_op_new_array): + (JSC::JIT::emit_op_new_array_buffer): + * jit/JITOpcodes32_64.cpp: + * jit/JITStubs.cpp: + (JSC::DEFINE_STUB_FUNCTION): + * jit/JITStubs.h: + +2011-06-14 Sheriff Bot <webkit.review.bot@gmail.com> + + Unreviewed, rolling out r88841. + http://trac.webkit.org/changeset/88841 + https://bugs.webkit.org/show_bug.cgi?id=62672 + + Caused many tests to crash (Requested by rniwa on #webkit). + + * bytecode/CodeBlock.cpp: + (JSC::CodeBlock::dump): + * bytecode/CodeBlock.h: + * bytecode/Opcode.h: + * bytecompiler/BytecodeGenerator.cpp: + (JSC::BytecodeGenerator::emitNewArray): + * bytecompiler/BytecodeGenerator.h: + * bytecompiler/NodesCodegen.cpp: + (JSC::ArrayNode::emitBytecode): + * interpreter/Interpreter.cpp: + (JSC::Interpreter::privateExecute): + * jit/JIT.cpp: + (JSC::JIT::privateCompileMainPass): + * jit/JIT.h: + * jit/JITOpcodes.cpp: + (JSC::JIT::emit_op_new_array): + * jit/JITOpcodes32_64.cpp: + (JSC::JIT::emit_op_new_array): + * jit/JITStubs.cpp: + * jit/JITStubs.h: + +2011-06-14 Oliver Hunt <oliver@apple.com> + + Reviewed by Gavin Barraclough. + + Constant array literals result in unnecessarily large amounts of code + https://bugs.webkit.org/show_bug.cgi?id=62658 + + Add a new version of op_new_array that simply copies values from a buffer + we hang off of the CodeBlock, rather than generating code to place each + entry into the registerfile, and then copying it from the registerfile into + the array. This is a slight improvement on some sunspider tests, but no + measurable overall change. That's okay though as our goal was to reduce + code size without hurting performance. + + * bytecode/CodeBlock.cpp: + (JSC::CodeBlock::dump): + * bytecode/CodeBlock.h: + (JSC::CodeBlock::addImmediateBuffer): + (JSC::CodeBlock::immediateBuffer): + * bytecode/Opcode.h: + * bytecompiler/BytecodeGenerator.cpp: + (JSC::BytecodeGenerator::addImmediateBuffer): + (JSC::BytecodeGenerator::emitNewArray): + * bytecompiler/BytecodeGenerator.h: + * bytecompiler/NodesCodegen.cpp: + (JSC::ArrayNode::emitBytecode): + * interpreter/Interpreter.cpp: + (JSC::Interpreter::privateExecute): + * jit/JIT.cpp: + (JSC::JIT::privateCompileMainPass): + * jit/JIT.h: + * jit/JITOpcodes.cpp: + (JSC::JIT::emit_op_new_array): + (JSC::JIT::emit_op_new_array_buffer): + * jit/JITOpcodes32_64.cpp: + * jit/JITStubs.cpp: + (JSC::DEFINE_STUB_FUNCTION): + * jit/JITStubs.h: + +2011-06-14 Stephanie Lewis <slewis@apple.com> + + Rubber stamped by Oliver Hunt. + + <rdar://problem/9511169> + Update order files. + + * JavaScriptCore.order: + +2011-06-14 Sam Weinig <sam@webkit.org> + + Reviewed by Geoffrey Garen. + + Fix dumping of constants to have the correct constant number. + + * bytecode/CodeBlock.cpp: + (JSC::CodeBlock::dump): + +2011-06-14 Benjamin Poulain <benjamin@webkit.org> + + Reviewed by Eric Seidel. + + KeywordLookupGenerator's Trie does not work with Python 3 + https://bugs.webkit.org/show_bug.cgi?id=62635 + + With Python 3, dict.items() return an iterator. Since the iterator + protocol changed between Python 2 and 3, the easiest way to get the + values is to have something that use the iterator implicitely, like a + for() loop. + + * KeywordLookupGenerator.py: + +2011-06-13 Oliver Hunt <oliver@apple.com> + + Reviewed by Gavin Barraclough. + + Fix llocp and lvalp names in the lexer to something more meaningful + https://bugs.webkit.org/show_bug.cgi?id=62605 + + A simple rename + + * parser/Lexer.cpp: + (JSC::Lexer::parseIdentifier): + (JSC::Lexer::parseString): + (JSC::Lexer::lex): + * parser/Lexer.h: + (JSC::Lexer::lexExpectIdentifier): + +2011-06-13 Oliver Hunt <oliver@apple.com> + + Reviewed by Gavin Barraclough. + + Make it possible to inline the common case of identifier lexing + https://bugs.webkit.org/show_bug.cgi?id=62600 + + Add a lexing function that expects to lex an "normal" alpha numeric + identifier (that ignores keywords) so it's possible to inline the + common parsing cases. This comes out as a reasonable parsing speed + boost. + + * parser/JSParser.cpp: + (JSC::JSParser::nextExpectIdentifier): + (JSC::JSParser::parseProperty): + (JSC::JSParser::parseMemberExpression): + * parser/Lexer.cpp: + * parser/Lexer.h: + (JSC::Lexer::makeIdentifier): + (JSC::Lexer::lexExpectIdentifier): + +2011-06-13 Xan Lopez <xlopez@igalia.com> + + Reviewed by Martin Robinson. + + Distcheck fixes. + + * GNUmakefile.am: + * GNUmakefile.list.am: + +2011-06-13 Oliver Hunt <oliver@apple.com> + + Reviewed by Simon Fraser. + + Make it possible to inline Identifier::equal + https://bugs.webkit.org/show_bug.cgi?id=62584 + + Move Identifier::equal to the Identifier header file. + + * runtime/Identifier.cpp: + * runtime/Identifier.h: + (JSC::Identifier::equal): + +2011-06-13 Tony Chang <tony@chromium.org> + + Reviewed by Dimitri Glazkov. + + rename ENABLE_NEW_FLEXBOX to ENABLE_CSS3_FLEXBOX + https://bugs.webkit.org/show_bug.cgi?id=62578 + + * Configurations/FeatureDefines.xcconfig: + +2011-06-13 Tony Chang <tony@chromium.org> + + Reviewed by Adam Barth. + + rename ENABLE_FLEXBOX to ENABLE_NEW_FLEXBOX + https://bugs.webkit.org/show_bug.cgi?id=62545 + + * Configurations/FeatureDefines.xcconfig: + +2011-06-12 Patrick Gansterer <paroga@webkit.org> + + Unreviewed. Build fix for !ENABLE(JIT) after r88604. + + * bytecode/CodeBlock.cpp: + (JSC::CodeBlock::visitAggregate): + +2011-06-11 Gavin Barraclough <barraclough@apple.com> + + Reviewed by Darin Adler. + + https://bugs.webkit.org/show_bug.cgi?id=16777 + + Remove #define NaN per Darin's comments. + + * runtime/JSGlobalObjectFunctions.cpp: + (JSC::parseIntOverflow): + (JSC::parseInt): + (JSC::jsStrDecimalLiteral): + (JSC::jsToNumber): + (JSC::parseFloat): + * wtf/DateMath.cpp: + (WTF::equivalentYearForDST): + (WTF::parseES5DateFromNullTerminatedCharacters): + (WTF::parseDateFromNullTerminatedCharacters): + (WTF::timeClip): + (JSC::parseDateFromNullTerminatedCharacters): + +2011-06-11 Gavin Barraclough <barraclough@apple.com> + + Rubber stamped by Geoff Garen. + + https://bugs.webkit.org/show_bug.cgi?id=62503 + Remove JIT_OPTIMIZE_* switches + + The alternative code paths are untested, and not well maintained. + These were useful when there was more churn in the JIT, but now + are a maintenance overhead. Time to move on, removing. + + * bytecode/CodeBlock.cpp: + (JSC::CodeBlock::visitAggregate): + * jit/JIT.cpp: + (JSC::JIT::privateCompileSlowCases): + (JSC::JIT::privateCompile): + (JSC::JIT::linkConstruct): + * jit/JIT.h: + * jit/JITCall.cpp: + * jit/JITCall32_64.cpp: + * jit/JITOpcodes.cpp: + (JSC::JIT::privateCompileCTIMachineTrampolines): + (JSC::JIT::privateCompileCTINativeCall): + * jit/JITOpcodes32_64.cpp: + (JSC::JIT::privateCompileCTIMachineTrampolines): + (JSC::JIT::privateCompileCTINativeCall): + (JSC::JIT::softModulo): + * jit/JITPropertyAccess.cpp: + * jit/JITPropertyAccess32_64.cpp: + * jit/JITStubs.cpp: + (JSC::DEFINE_STUB_FUNCTION): + * runtime/Lookup.cpp: + (JSC::setUpStaticFunctionSlot): + * runtime/Lookup.h: + * wtf/Platform.h: + +2011-06-10 Gavin Barraclough <barraclough@apple.com> + + Reviewed by Sam Weinig. + + https://bugs.webkit.org/show_bug.cgi?id=16777 + Eliminate JSC::NaN and JSC::Inf + + There's no good reason for -K-J-S- JSC to have its own NAN and infinity constants. + The ones in std::numeric_limits are perfectly good. + Remove JSC::Inf, JSC::NaN, switch some cases of (isnan || isinf) to !isfinite. + + * API/JSCallbackObjectFunctions.h: + (JSC::::toNumber): + * API/JSValueRef.cpp: + (JSValueMakeNumber): + (JSValueToNumber): + * JavaScriptCore.exp: + * runtime/CachedTranscendentalFunction.h: + (JSC::CachedTranscendentalFunction::initialize): + * runtime/DateConstructor.cpp: + (JSC::constructDate): + * runtime/DateInstanceCache.h: + (JSC::DateInstanceData::DateInstanceData): + (JSC::DateInstanceCache::reset): + * runtime/JSCell.cpp: + * runtime/JSCell.h: + (JSC::JSCell::JSValue::getPrimitiveNumber): + (JSC::JSCell::JSValue::toNumber): + * runtime/JSGlobalData.cpp: + (JSC::JSGlobalData::JSGlobalData): + (JSC::JSGlobalData::resetDateCache): + * runtime/JSGlobalObject.cpp: + (JSC::JSGlobalObject::reset): + * runtime/JSGlobalObjectFunctions.cpp: + (JSC::globalFuncParseInt): + (JSC::globalFuncIsFinite): + * runtime/JSNotAnObject.cpp: + (JSC::JSNotAnObject::toNumber): + * runtime/JSValue.cpp: + * runtime/JSValue.h: + * runtime/JSValueInlineMethods.h: + (JSC::jsNaN): + * runtime/MathObject.cpp: + (JSC::mathProtoFuncMax): + (JSC::mathProtoFuncMin): + * runtime/NumberConstructor.cpp: + (JSC::numberConstructorNegInfinity): + (JSC::numberConstructorPosInfinity): + * runtime/NumberPrototype.cpp: + (JSC::numberProtoFuncToExponential): + (JSC::numberProtoFuncToFixed): + (JSC::numberProtoFuncToPrecision): + (JSC::numberProtoFuncToString): + * runtime/UString.cpp: + * wtf/DecimalNumber.h: + (WTF::DecimalNumber::DecimalNumber): + * wtf/dtoa.cpp: + (WTF::dtoa): + +2011-06-10 Tony Chang <tony@chromium.org> + + Reviewed by Ojan Vafai. + + add a compile guard ENABLE(FLEXBOX) + https://bugs.webkit.org/show_bug.cgi?id=62049 + + * Configurations/FeatureDefines.xcconfig: + +2011-06-10 Gavin Barraclough <barraclough@apple.com> + + Reviewed by Sam Weinig. + + https://bugs.webkit.org/show_bug.cgi?id=55347 + "name" and "message" enumerable on *Error.prototype + + This arises from chapter 15 of the spec: + "Every other property described in this clause has the attributes + { [[Writable]]: true, [[Enumerable]]: false, [[Configurable]]: true } + unless otherwise specified." + Standardized properties are not enumerable. + + * runtime/ErrorInstance.cpp: + (JSC::ErrorInstance::ErrorInstance): + * runtime/NativeErrorPrototype.cpp: + (JSC::NativeErrorPrototype::NativeErrorPrototype): + +2011-06-09 Geoffrey Garen <ggaren@apple.com> + + Build fix: Corrected header spelling. + + * heap/OldSpace.h: + +2011-06-09 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Oliver Hunt. + + Added OldSpace to the project + https://bugs.webkit.org/show_bug.cgi?id=62417 + + Currently unused. + + Added OldSpace, the ability to iterate NewSpace vs OldSpace, and a + per-block flag for testing whether you're in NewSpace vs OldSpace. + + * CMakeLists.txt: + * GNUmakefile.list.am: + * JavaScriptCore.gypi: + * JavaScriptCore.pro: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: Build! + + * heap/MarkedBlock.cpp: + (JSC::MarkedBlock::MarkedBlock): + * heap/MarkedBlock.h: + (JSC::MarkedBlock::inNewSpace): + (JSC::MarkedBlock::setInNewSpace): Added inNewSpace flag, for use in + write barrier. + + * heap/NewSpace.cpp: + (JSC::NewSpace::addBlock): + (JSC::NewSpace::removeBlock): + * heap/NewSpace.h: + (JSC::NewSpace::forEachBlock): Added forEachBlock, to use for + NewSpace-specific operations. + + * heap/OldSpace.cpp: Added. + (JSC::OldSpace::OldSpace): + (JSC::OldSpace::addBlock): + (JSC::OldSpace::removeBlock): + * heap/OldSpace.h: Added. + (JSC::OldSpace::forEachBlock): New class for holding promoted blocks. + Not in use yet. + +2011-06-09 Hyowon Kim <hw1008.kim@samsung.com> + + Reviewed by Antonio Gomes. + + [EFL] Make accelerated compositing build in Webkit-EFL + https://bugs.webkit.org/show_bug.cgi?id=62361 + + Add PLATFORM(EFL) to enable ACCELERATED_COMPOSITING on EFL port. + + * wtf/Platform.h: + +2011-06-09 Gavin Barraclough <barraclough@apple.com> + + Reviewed by Geoff Garen. + + Bug 62405 - Fix integer overflow in Array.prototype.push + + Fix geoff's review comments re static_cast. + + * runtime/ArrayPrototype.cpp: + (JSC::arrayProtoFuncPush): + +2011-06-09 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Oliver Hunt. + + Factored MarkedBlock set management into a helper class with a fast case Bloom filter + https://bugs.webkit.org/show_bug.cgi?id=62413 + + SunSpider reports a small speedup. + + This is in preparation for having ConservativeSet operate on arbitrary + sets of MarkedBlocks, and in preparation for conservative scanning + becoming proportionally more important than other GC activities. + + * GNUmakefile.list.am: + * JavaScriptCore.gypi: + * JavaScriptCore.xcodeproj/project.pbxproj: Build-o. + + * heap/ConservativeRoots.cpp: + (JSC::ConservativeRoots::add): + * heap/ConservativeRoots.h: + (JSC::ConservativeRoots::ConservativeRoots): Operate on a MarkedBlockSet + directly, instead of a Heap, so we can operate on subsets of the Heap + instead. + + Use a TinyBloomFilter for single-cycle exclusion of most pointers. This + is particularly important since we expect not to find our subject pointer + in the MarkedBlock hash, and hash misses are more expensive than typical + hash lookups because they have high collision rates. + + No need for single-pointer add() to be public anymore, since nobody uses it. + + * heap/Heap.cpp: + (JSC::Heap::markRoots): + * heap/Heap.h: + (JSC::Heap::forEachCell): + (JSC::Heap::forEachBlock): Use MarkedBlockSet since that's what + ConservativeRoots relies on. + + Nixed contains(), since nobody uses it anymore. + + * heap/MarkedBlock.h: + (WTF::MarkedBlockHash::hash): Added a faster hash taking advantage of + the VM layout properties of MarkedBlocks. + + * heap/MarkedBlockSet.h: Added. + (JSC::MarkedBlockSet::add): + (JSC::MarkedBlockSet::remove): + (JSC::MarkedBlockSet::recomputeFilter): + (JSC::MarkedBlockSet::filter): + (JSC::MarkedBlockSet::set): + * heap/TinyBloomFilter.h: Added. + (JSC::TinyBloomFilter::TinyBloomFilter): + (JSC::TinyBloomFilter::add): + (JSC::TinyBloomFilter::ruleOut): New helper class, used above. + + * interpreter/RegisterFile.cpp: + (JSC::RegisterFile::gatherConservativeRoots): No need to specifically + exclude values by tag -- the tiny bloom filter is already a register-register + compare, so adding another "rule out" factor just slows things down. + +2011-06-09 Gavin Barraclough <barraclough@apple.com> + + Reviewed by Oliver Hunt. + + Bug 62405 - Fix integer overflow in Array.prototype.push + + There are three integer overflows here, leading to safe (not a security risk) + but incorrect (non-spec-compliant) behaviour. + + Two overflows occur when calculating the new length after pushing (one in the + fast version of push in JSArray, one in the generic version in ArrayPrototype). + The other occurs calculating indices to write to when multiple items are pushed. + + These errors result in three test-262 failures. + + * runtime/ArrayPrototype.cpp: + (JSC::arrayProtoFuncPush): + * runtime/JSArray.cpp: + (JSC::JSArray::put): + (JSC::JSArray::push): + +2011-06-09 Dan Bernstein <mitz@apple.com> + + Reviewed by Anders Carlsson. + + Add Vector::reverse() + https://bugs.webkit.org/show_bug.cgi?id=62393 + + * wtf/Vector.h: + (WTF::Vector::reverse): Added + +2011-06-08 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Oliver Hunt. + + Factored a bunch of Heap functionality into stand-alone functors + https://bugs.webkit.org/show_bug.cgi?id=62337 + + This is in preparation for making these functors operate on arbitrary + sets of MarkedBlocks. + + * JavaScriptCore.exp: This file is a small tragedy. + + * debugger/Debugger.cpp: + (JSC::Debugger::recompileAllJSFunctions): Updated for type change and rename. + + * heap/HandleHeap.h: + (JSC::HandleHeap::forEachStrongHandle): New function for iterating all + strong handles, so we can play along in the functor game. + + * heap/Heap.cpp: + (JSC::CountFunctor::CountFunctor::CountFunctor): + (JSC::CountFunctor::CountFunctor::count): + (JSC::CountFunctor::CountFunctor::returnValue): + (JSC::CountFunctor::ClearMarks::operator()): + (JSC::CountFunctor::ResetAllocator::operator()): + (JSC::CountFunctor::Sweep::operator()): + (JSC::CountFunctor::MarkCount::operator()): + (JSC::CountFunctor::Size::operator()): + (JSC::CountFunctor::Capacity::operator()): + (JSC::CountFunctor::Count::operator()): + (JSC::CountFunctor::CountIfGlobalObject::operator()): + (JSC::CountFunctor::TakeIfEmpty::TakeIfEmpty): + (JSC::CountFunctor::TakeIfEmpty::operator()): + (JSC::CountFunctor::TakeIfEmpty::returnValue): + (JSC::CountFunctor::RecordType::RecordType): + (JSC::CountFunctor::RecordType::typeName): + (JSC::CountFunctor::RecordType::operator()): + (JSC::CountFunctor::RecordType::returnValue): These functors factor out + behavior that used to be in the functions below. + + (JSC::Heap::clearMarks): + (JSC::Heap::sweep): + (JSC::Heap::objectCount): + (JSC::Heap::size): + (JSC::Heap::capacity): + (JSC::Heap::protectedGlobalObjectCount): + (JSC::Heap::protectedObjectCount): + (JSC::Heap::protectedObjectTypeCounts): + (JSC::Heap::objectTypeCounts): + (JSC::Heap::resetAllocator): + (JSC::Heap::freeBlocks): + (JSC::Heap::shrink): Factored out behavior into the functors above. + + * heap/Heap.h: + (JSC::Heap::forEachProtectedCell): + (JSC::Heap::forEachCell): + (JSC::Heap::forEachBlock): Added forEach* iteration templates. I chose + functor-based templates instead of plain iterators because they're simpler + to implement in this case and they require a lot less code at the call site. + + * heap/MarkedBlock.h: + (JSC::MarkedBlock::VoidFunctor::returnValue): Default parent class for + trivial functors. + + (JSC::MarkedBlock::forEachCell): Renamed forEach to forEachCell because + we have a few different kind of "for each" now. + + * runtime/JSGlobalData.cpp: + (WTF::Recompile::operator()): + (JSC::JSGlobalData::JSGlobalData): + (JSC::JSGlobalData::recompileAllJSFunctions): Updated for type change and rename. + + * runtime/JSGlobalData.h: Removed globalObjectCount because it was unused. + +2011-06-08 Mikołaj Małecki <m.malecki@samsung.com> + + Reviewed by Pavel Feldman. + + Web Inspector: Crash by buffer overrun crash when serializing inspector object tree. + https://bugs.webkit.org/show_bug.cgi?id=52791 + + No new tests. The problem can be reproduced by trying to create InspectorValue + from 1.0e-100 and call ->toJSONString() on this. + + * JavaScriptCore.exp: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + export 2 functions DecimalNumber::bufferLengthForStringExponential and + DecimalNumber::toStringExponential. + +2011-06-08 Sheriff Bot <webkit.review.bot@gmail.com> + + Unreviewed, rolling out r88404. + http://trac.webkit.org/changeset/88404 + https://bugs.webkit.org/show_bug.cgi?id=62342 + + broke win and mac build (Requested by tony^work on #webkit). + + * JavaScriptCore.gyp/JavaScriptCore.gyp: + +2011-06-08 Evan Martin <evan@chromium.org> + + Reviewed by Adam Barth. + + [chromium] use gyp 'settings' type for settings target + https://bugs.webkit.org/show_bug.cgi?id=62323 + + The 'settings' gyp target type is for targets that exist solely + for their settings (no build rules). The comment above this target + says it's for this, but it incorrectly uses 'none'. + + * JavaScriptCore.gyp/JavaScriptCore.gyp: + +2011-06-08 Sailesh Agrawal <sail@chromium.org> + + Reviewed by Mihai Parparita. + + Chromium Mac: Enable overlay scrollbars + https://bugs.webkit.org/show_bug.cgi?id=59756 + + Enable WTF_USE_WK_SCROLLBAR_PAINTER for Chromium Mac. This allows us to use overlay scrollbars on future versions of Mac OS X. + + * wtf/Platform.h: + +2011-06-08 Oliver Hunt <oliver@apple.com> + + Reviewed by Geoffrey Garen. + + Add faster lookup cache for multi character identifiers + https://bugs.webkit.org/show_bug.cgi?id=62327 + + Add a non-hash lookup for mutiple character identifiers. This saves us from + adding repeated identifiers to the ParserArena's identifier list as people + tend to not start all their variables and properties with the same character + and happily identifier locality works in our favour. + + * parser/ParserArena.h: + (JSC::IdentifierArena::isEmpty): + (JSC::IdentifierArena::clear): + (JSC::IdentifierArena::makeIdentifier): + +2011-06-08 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Oliver Hunt. + + Took some responsibilities away from NewSpace + https://bugs.webkit.org/show_bug.cgi?id=62325 + + NewSpace is basically just an allocator now. + + Heap acts as a controller, responsible for managing the set of all + MarkedBlocks. + + This is in preparation for moving parts of the controller logic into + separate helper classes that can act on arbitrary sets of MarkedBlocks + that may or may not be in NewSpace. + + * heap/Heap.cpp: + (JSC::Heap::Heap): + (JSC::Heap::destroy): + (JSC::Heap::allocate): + (JSC::Heap::markRoots): + (JSC::Heap::clearMarks): + (JSC::Heap::sweep): + (JSC::Heap::objectCount): + (JSC::Heap::size): + (JSC::Heap::capacity): + (JSC::Heap::collect): + (JSC::Heap::resetAllocator): + (JSC::Heap::allocateBlock): + (JSC::Heap::freeBlocks): + (JSC::Heap::shrink): Moved the set of MarkedBlocks from NewSpace to Heap, + along with all functions that operate on the set of MarkedBlocks. Also + moved responsibility for deciding whether to allocate a new MarkedBlock, + and for allocating it. + + * heap/Heap.h: + (JSC::Heap::contains): + (JSC::Heap::forEach): Ditto. + + * heap/NewSpace.cpp: + (JSC::NewSpace::addBlock): + (JSC::NewSpace::removeBlock): + (JSC::NewSpace::resetAllocator): + * heap/NewSpace.h: + (JSC::NewSpace::waterMark): + (JSC::NewSpace::allocate): Ditto. + +2011-06-08 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Oliver Hunt. + + Some more MarkedSpace => NewSpace renaming + https://bugs.webkit.org/show_bug.cgi?id=62305 + + * JavaScriptCore.exp: + * JavaScriptCore.order: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * heap/Heap.cpp: + (JSC::Heap::Heap): + (JSC::Heap::destroy): + (JSC::Heap::reportExtraMemoryCostSlowCase): + (JSC::Heap::allocate): + (JSC::Heap::markRoots): + (JSC::Heap::objectCount): + (JSC::Heap::size): + (JSC::Heap::capacity): + (JSC::Heap::collect): + (JSC::Heap::isValidAllocation): + * heap/Heap.h: + (JSC::Heap::markedSpace): + (JSC::Heap::contains): + (JSC::Heap::forEach): + (JSC::Heap::allocate): + * runtime/JSCell.h: + +2011-06-08 Kevin Ollivier <kevino@theolliviers.com> + + Reviewed by Eric Seidel. + + Add export macros to profiler headers. + https://bugs.webkit.org/show_bug.cgi?id=27551 + + * profiler/Profiler.h: + +2011-06-08 Kevin Ollivier <kevino@theolliviers.com> + + Reviewed by Eric Seidel. + + Add export symbols to parser headers. + https://bugs.webkit.org/show_bug.cgi?id=27551 + + * parser/SourceProviderCache.h: + +2011-06-08 Kevin Ollivier <kevino@theolliviers.com> + + Reviewed by Eric Seidel. + + Add export symbols to interpreter headers. + https://bugs.webkit.org/show_bug.cgi?id=27551 + + * interpreter/Interpreter.h: + +2011-06-08 Kevin Ollivier <kevino@theolliviers.com> + + Reviewed by Eric Seidel. + + Add export symbols to debugger headers. + https://bugs.webkit.org/show_bug.cgi?id=27551 + + * debugger/Debugger.h: + * debugger/DebuggerCallFrame.h: + +2011-06-08 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Darin Adler. + + Moved MarkedSpace.* to NewSpace.* in preparation for more renaming + https://bugs.webkit.org/show_bug.cgi?id=62268 + + * CMakeLists.txt: + * GNUmakefile.list.am: + * JavaScriptCore.gypi: + * JavaScriptCore.pro: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * heap/Heap.h: + * heap/MarkedBlock.h: + * heap/MarkedSpace.cpp: Removed. + * heap/MarkedSpace.h: Removed. + * heap/NewSpace.cpp: Copied from Source/JavaScriptCore/heap/MarkedSpace.cpp. + * heap/NewSpace.h: Copied from Source/JavaScriptCore/heap/MarkedSpace.h. + +2011-06-08 Sheriff Bot <webkit.review.bot@gmail.com> + + Unreviewed, rolling out r88365. + http://trac.webkit.org/changeset/88365 + https://bugs.webkit.org/show_bug.cgi?id=62301 + + windows bots broken (Requested by loislo_ on #webkit). + + * JavaScriptCore.exp: + +2011-06-08 Ryan Sleevi <rsleevi@chromium.org> + + Reviewed by Tony Chang. + + Suppress C++0x compat warnings when compiling Chromium port with GCC 4.6 + + Compiling Chromium port under GCC 4.6 produces warnings about nullptr + https://bugs.webkit.org/show_bug.cgi?id=62242 + + * JavaScriptCore.gyp/JavaScriptCore.gyp: + +2011-06-08 Ademar de Souza Reis Jr. <ademar.reis@openbossa.org> + + Reviewed by Andreas Kling. + + Webkit on SPARC Solaris has wrong endian + https://bugs.webkit.org/show_bug.cgi?id=29407 + + Bug 57256 fixed one crash on misaligned reads on sparc/solaris, but + there are more ocurrences of the same code pattern in webkit. + + This patch includes the check on these other parts of the code. + + This is a speculative fix, I don't have a sparc machine to test and + don't know which kind of test would trigger a crash (but it's quite + obvious that it's the same code duplicated in different files). + + * runtime/UString.h: + (JSC::UStringHash::equal): + * wtf/text/StringHash.h: + (WTF::StringHash::equal): + +2011-06-08 Yael Aharon <yael.aharon@nokia.com> + + Reviewed by Andreas Kling. + + [Qt] Build fix for building QtWebKit inside of Qt. + https://bugs.webkit.org/show_bug.cgi?id=62280 + + Remove CONFIG=staticlib, because it causes the configure script to add -ljavascriptcore + into QtWebKit.prl. + + No new tests, as this is just a build fix. + + * JavaScriptCore.pri: + +2011-06-07 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Oliver Hunt. + + Split 'reset' into 'collect' and 'resetAllocator' + https://bugs.webkit.org/show_bug.cgi?id=62267 + + * heap/Heap.cpp: + (JSC::Heap::allocate): + (JSC::Heap::collectAllGarbage): + (JSC::Heap::collect): + * heap/Heap.h: + * heap/MarkedBlock.h: + (JSC::MarkedBlock::resetAllocator): + * heap/MarkedSpace.cpp: + (JSC::MarkedSpace::resetAllocator): + * heap/MarkedSpace.h: + (JSC::MarkedSpace::SizeClass::resetAllocator): + +2011-06-07 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Sam Weinig. + + Renamed some more marks to visits + https://bugs.webkit.org/show_bug.cgi?id=62254 + + * heap/HandleHeap.cpp: + (JSC::HandleHeap::visitStrongHandles): + (JSC::HandleHeap::visitWeakHandles): + * heap/HandleHeap.h: + * heap/HandleStack.cpp: + (JSC::HandleStack::visit): + * heap/HandleStack.h: + * heap/Heap.cpp: + (JSC::Heap::markProtectedObjects): + (JSC::Heap::markTempSortVectors): + (JSC::Heap::markRoots): + * heap/HeapRootVisitor.h: + (JSC::HeapRootVisitor::visit): + * runtime/ArgList.cpp: + (JSC::MarkedArgumentBuffer::markLists): + +2011-06-07 Gavin Barraclough <barraclough@apple.com> + + Reviewed by Sam Weinig + + https://bugs.webkit.org/show_bug.cgi?id=55537 + Functions claim to have 'callee' which they actually don't (and shouldn't) + + * JavaScriptCore.xcodeproj/project.pbxproj: + * runtime/JSFunction.cpp: + (JSC::JSFunction::getOwnPropertyNames): + +2011-06-07 Juan C. Montemayor <jmont@apple.com> + + Reviewed by Darin Adler. + + Make JSStaticFunction and JSStaticValue less "const" + https://bugs.webkit.org/show_bug.cgi?id=62222 + + * API/JSObjectRef.h: + * API/tests/testapi.c: + (checkConstnessInJSObjectNames): + (main): + * JavaScriptCore.xcodeproj/project.pbxproj: + +2011-06-07 Gavin Barraclough <barraclough@apple.com> + + Reviewed by Sam Weinig. + + https://bugs.webkit.org/show_bug.cgi?id=62240 + DFG JIT - add support for for-loop array initialization. + + Support put by val beyond vector length. + Add a operationPutByValBeyondArrayBounds operation, make + PutValVal call this if the vector length check fails. + + * dfg/DFGJITCodeGenerator.h: + (JSC::DFG::JITCodeGenerator::silentSpillGPR): + (JSC::DFG::JITCodeGenerator::silentFillGPR): + (JSC::DFG::JITCodeGenerator::silentSpillAllRegisters): + (JSC::DFG::JITCodeGenerator::isDoubleConstantWithInt32Value): + (JSC::DFG::JITCodeGenerator::isJSConstantWithInt32Value): + (JSC::DFG::JITCodeGenerator::isIntegerConstant): + (JSC::DFG::JITCodeGenerator::valueOfIntegerConstant): + * dfg/DFGOperations.cpp: + (JSC::DFG::operationPutByValInternal): + * dfg/DFGOperations.h: + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::compile): + * dfg/DFGSpeculativeJIT.h: + +2011-06-06 James Simonsen <simonjam@chromium.org> + + Reviewed by James Robinson. + + Add monotonicallyIncreasingTime() to get monotonically increasing time + https://bugs.webkit.org/show_bug.cgi?id=37743 + + * wtf/CurrentTime.cpp: Add monotonicallyIncreasingTime() for mac and a fallback implementation that just wraps currentTime(). + (WTF::monotonicallyIncreasingTime): + * wtf/CurrentTime.h: Add monotonicallyIncreasingTime(). + +2011-06-06 Alexandru Chiculita <achicu@adobe.com> + + Reviewed by Kent Tamura. + + Add ENABLE_CSS_EXCLUSIONS support for build-webkit script + https://bugs.webkit.org/show_bug.cgi?id=61628 + + * Configurations/FeatureDefines.xcconfig: + +2011-06-06 Mihnea Ovidenie <mihnea@adobe.com> + + Reviewed by Kent Tamura. + + Add ENABLE(CSS_REGIONS) guard for CSS Regions support + https://bugs.webkit.org/show_bug.cgi?id=61631 + + * Configurations/FeatureDefines.xcconfig: + +2011-06-06 Carlos Garcia Campos <cgarcia@igalia.com> + + Unreviewed. Fix the GTK+ build. + + * GNUmakefile.am: Add javascriptcore_cflags variable. + +2011-06-04 Kevin Ollivier <kevino@theolliviers.com> + + [wx] Unreviewed build fix. Restore the PPC build and allow users to specify architectures + to build on Mac. + + * wtf/Platform.h: + +2011-06-04 Gustavo Noronha Silva <gns@gnome.org> + + Unreviewed, MIPS build fix. + + WebKitGTK+ tarball fails to build on MIPS. + https://buildd.debian.org/status/fetch.php?pkg=webkitgtk%2B&arch=mips&ver=1.4.0-1&stamp=1304786691 + + * GNUmakefile.list.am: Add missing MIPS-related file to the list + of files that are added to the tarball on make dist, and fix + sorting. + +2011-06-04 Sam Weinig <sam@webkit.org> + + Reviewed by Darin Adler. + + Fix formatting of the output generated by KeywordLookupGenerator.py + https://bugs.webkit.org/show_bug.cgi?id=62083 + + - Uses correct year for copyright. + - Puts ending brace on same line as "else if" + - Puts starting brace of function on its own line. + - Adds some tasteful whitespace. + - Adds comments to make clear that scopes are ending + - Make macros actually split on two lines. + + * KeywordLookupGenerator.py: + +2011-06-04 Adam Barth <abarth@webkit.org> + + Reviewed by Eric Seidel. + + KeywordLookupGenerator.py spams stdout in Chromium Linux build + https://bugs.webkit.org/show_bug.cgi?id=62087 + + This action does not appear to be needed. + + * JavaScriptCore.gyp/JavaScriptCore.gyp: + +2011-06-03 Oliver Hunt <oliver@apple.com> + + Reviewed by Maciej Stachowiak. + + Lexer needs to provide Identifier for reserved words + https://bugs.webkit.org/show_bug.cgi?id=62086 + + Alas it is necessary to provide an Identifier reference for keywords + so that we can do the right thing when they're used in object literals. + We now keep Identifiers for all reserved words in the CommonIdentifiers + structure so that we can access them without a hash lookup. + + * KeywordLookupGenerator.py: + * parser/Lexer.cpp: + (JSC::Lexer::parseIdentifier): + * parser/Lexer.h: + * runtime/CommonIdentifiers.cpp: + (JSC::CommonIdentifiers::CommonIdentifiers): + * runtime/CommonIdentifiers.h: + +2011-06-03 Gavin Barraclough <barraclough@apple.com> + + Reviewed by Sam Weinig. + + Add debug code to break on speculation failures. + + * dfg/DFGJITCompiler.cpp: + (JSC::DFG::JITCompiler::jumpFromSpeculativeToNonSpeculative): + (JSC::DFG::JITCompiler::compileFunction): + * dfg/DFGNode.h: + +2011-06-03 Gavin Barraclough <barraclough@apple.com> + + Reviewed by Sam Weinig. + + https://bugs.webkit.org/show_bug.cgi?id=62082 + DFG JIT - bug passing arguments that need swap + + This is really just a typo. + When setting up the arguments for a call out to a C operation, we'll + fail to swap arguments where this is necessary. For example, in the + case of 2 arg calls, where the first argument is in %rdx & the second + is in %rsi we should swap (exec will be passed in %rdi), but we don't. + + This can also affect function calls passing three arguments. + + * dfg/DFGJITCodeGenerator.h: + (JSC::DFG::JITCodeGenerator::setupTwoStubArgs): + - Call swap with the correct arguments. + +2011-06-03 Oliver Hunt <oliver@apple.com> + + Reviewed by Gavin Barraclough. + + Force inlining of some hot lexer functions + https://bugs.webkit.org/show_bug.cgi?id=62079 + + Fix more GCC stupidity + + * parser/Lexer.h: + (JSC::Lexer::isWhiteSpace): + (JSC::Lexer::isLineTerminator): + +2011-06-03 Oliver Hunt <oliver@apple.com> + + Reviewed by Gavin Barraclough. + + GCC not inlining some functions that it really should be + https://bugs.webkit.org/show_bug.cgi?id=62075 + + Add ALWAYS_INLINE to a number of parsing and lexing functions + that should always be inlined. This gets us ~1.4% on my ad hoc + parser test. + + * KeywordLookupGenerator.py: + * parser/JSParser.cpp: + (JSC::JSParser::next): + (JSC::JSParser::nextTokenIsColon): + (JSC::JSParser::consume): + (JSC::JSParser::match): + (JSC::JSParser::tokenStart): + (JSC::JSParser::tokenLine): + (JSC::JSParser::tokenEnd): + * parser/Lexer.cpp: + (JSC::isIdentPart): + +2011-06-03 Oliver Hunt <oliver@apple.com> + + Whoops, fix last minute bug. + + * parser/Lexer.cpp: + (JSC::Lexer::parseIdentifier): + +2011-06-03 Martin Robinson <mrobinson@igalia.com> + + Try to fix the GTK+ build. + + * GNUmakefile.am: Clean up some spaces that should be tabs. + * GNUmakefile.list.am: Add KeywordLookup.h to the source list + and clean up some spaces that should be tabs. + +2011-06-03 Oliver Hunt <oliver@apple.com> + + Reviewed by Geoffrey Garen. + + Improve keyword lookup + https://bugs.webkit.org/show_bug.cgi?id=61913 + + Rather than doing multiple hash lookups as we currently + do when trying to identify keywords we now use an + automatically generated decision tree (essentially it's + a hard coded patricia trie). We still use the regular + lookup table for the last few characters of an input as + this allows us to completely skip all bounds checks. + + * CMakeLists.txt: + * DerivedSources.make: + * DerivedSources.pro: + * GNUmakefile.am: + * JavaScriptCore.gyp/JavaScriptCore.gyp: + * JavaScriptCore.xcodeproj/project.pbxproj: + * KeywordLookupGenerator.py: Added. + * make-generated-sources.sh: + * parser/Lexer.cpp: + (JSC::Lexer::internalShift): + (JSC::Lexer::shift): + (JSC::Lexer::parseIdentifier): + * parser/Lexer.h: + +2011-06-03 Siddharth Mathur <siddharth.mathur@nokia.com> + + Reviewed by Benjamin Poulain. + + [Qt] Build flag for experimental ICU library support + https://bugs.webkit.org/show_bug.cgi?id=60786 + + Adds a build-time flag (CONFIG+=use_system_icu) that enables experimental + ICU powered Unicode support. + + * JavaScriptCore.pri: Support for use_system_icu CONFIG flag. + * wtf/unicode/qt4/UnicodeQt4.h: Guard an include file with USE(ICU_UNICODE). + +2011-06-03 Alexis Menard <alexis.menard@openbossa.org> + + Reviewed by Benjamin Poulain. + + [Qt] Build fix of QtWebKit 2.2 when inside Qt tree with GCC 4.6. + https://bugs.webkit.org/show_bug.cgi?id=61957 + + When building inside the Qt source tree, qmake always append the mkspecs + defines after ours. We have to workaround and make sure that we append + our flags after the qmake variable used inside Qt. This workaround was provided + by our qmake folks. We need to append in both case because qmake behave differently + when called with -spec or via SUBDIR+=. This patch unbreak r87950 on Mac for Qt port. + + * JavaScriptCore.pro: + +2011-06-02 Jay Civelli <jcivelli@chromium.org> + + Reviewed by Adam Barth. + + Added a method to generate RFC 2822 compliant date strings. + https://bugs.webkit.org/show_bug.cgi?id=7169 + + * wtf/DateMath.cpp: + (WTF::twoDigitStringFromNumber): + (WTF::makeRFC2822DateString): + * wtf/DateMath.h: + +2011-06-02 Alexis Menard <alexis.menard@openbossa.org> + + Reviewed by Andreas Kling. + + [Qt] Build fix of QtWebKit 2.2 when inside Qt tree with GCC 4.6. + https://bugs.webkit.org/show_bug.cgi?id=61957 + + When building inside the Qt source tree, qmake always append the mkspecs + defines after ours. We have to workaround and make sure that we append + our flags after the qmake variable used inside Qt. This workaround was provided + by our qmake folks. + + * JavaScriptCore.pro: + +2011-06-01 Oliver Hunt <oliver@apple.com> + + Reviewed by Geoffrey Garen. + + Add single character lookup cache to IdentifierArena + https://bugs.webkit.org/show_bug.cgi?id=61879 + + Add a simple lookup cache for single ascii character + identifiers. Produces around a 2% improvement in parse + time for my adhoc parser test. + + * parser/ParserArena.h: + (JSC::IdentifierArena::IdentifierArena): + (JSC::IdentifierArena::clear): + (JSC::IdentifierArena::makeIdentifier): + +2011-05-31 Oliver Hunt <oliver@apple.com> + + Reviewed by Geoffrey Garen. + + Freezing a function and its prototype causes browser to crash. + https://bugs.webkit.org/show_bug.cgi?id=61758 + + Make JSObject::preventExtensions virtual so that we can override it + and instantiate all lazy + + * JavaScriptCore.exp: + * runtime/JSFunction.cpp: + (JSC::createPrototypeProperty): + (JSC::JSFunction::preventExtensions): + (JSC::JSFunction::getOwnPropertySlot): + * runtime/JSFunction.h: + * runtime/JSObject.h: + * runtime/JSObject.cpp: + (JSC::JSObject::seal): + (JSC::JSObject::seal): + +2011-06-01 Sheriff Bot <webkit.review.bot@gmail.com> + + Unreviewed, rolling out r87788. + http://trac.webkit.org/changeset/87788 + https://bugs.webkit.org/show_bug.cgi?id=61856 + + breaks windows chromium canary (Requested by jknotten on + #webkit). + + * wtf/DateMath.cpp: + (WTF::timeClip): + * wtf/DateMath.h: + +2011-06-01 Jay Civelli <jcivelli@chromium.org> + + Reviewed by Adam Barth. + + Added a method to generate RFC 2822 compliant date strings. + https://bugs.webkit.org/show_bug.cgi?id=7169 + + * wtf/DateMath.cpp: + (WTF::twoDigitStringFromNumber): + (WTF::makeRFC2822DateString): + * wtf/DateMath.h: + +2011-05-31 Yong Li <yoli@rim.com> + + Reviewed by Eric Seidel. + + https://bugs.webkit.org/show_bug.cgi?id=54807 + We have been assuming plain bitfields (like "int a : 31") are always signed integers. + However some compilers can treat them as unsigned. For example, RVCT 4.0 states plain + bitfields (declared without either signed or unsigned qualifiers) are treats as unsigned. + http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0348c/Babjddhe.html + Although we can use "--signed-bitfields" flag to make RVCT 4.0 behave as most other compilers, + always using "signed"/"unsigned" qualifier to declare integral type bitfields is still a good + rule we should have in order to make our code independent from compilers and compiler flags. + + No new test added because this change is not known to fix any issue. + + * bytecode/StructureStubInfo.h: + +2011-05-30 Hojong Han <hojong.han@samsung.com> + + Reviewed by Geoffrey Garen. + + [JSC] malfunction during arithmetic condition check with negative number (-2147483648) + https://bugs.webkit.org/show_bug.cgi?id=61416 + + * assembler/MacroAssemblerARM.h: + (JSC::MacroAssemblerARM::branch32): + * tests/mozilla/ecma/Expressions/11.12-1.js: + (getTestCases): + +2011-05-29 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Sam Weinig. + + Some heap refactoring + https://bugs.webkit.org/show_bug.cgi?id=61704 + + SunSpider says no change. + + * JavaScriptCore.exp: Export! + + * heap/Heap.cpp: COLLECT_ON_EVERY_ALLOCATION can actually do so now. + + (JSC::Heap::Heap): Changed Heap sub-objects to point to the heap. + + (JSC::Heap::allocate): Changed inline allocation code to only select the + size class, since this can be optimized out at compile time -- everything + else is now inlined into this out-of-line function. + + No need to duplicate ASSERTs made in our caller. + + * heap/Heap.h: + (JSC::Heap::heap): + (JSC::Heap::isMarked): + (JSC::Heap::testAndSetMarked): + (JSC::Heap::testAndClearMarked): + (JSC::Heap::setMarked): Call directly into MarkedBlock instead of adding + a layer of indirection through MarkedSpace. + + (JSC::Heap::allocate): See above. + + * heap/MarkedBlock.cpp: + (JSC::MarkedBlock::create): + (JSC::MarkedBlock::MarkedBlock): + * heap/MarkedBlock.h: Changed Heap sub-objects to point to the heap. + + * heap/MarkedSpace.cpp: + (JSC::MarkedSpace::MarkedSpace): + (JSC::MarkedSpace::allocateBlock): + * heap/MarkedSpace.h: + (JSC::MarkedSpace::allocate): Updated to match changes above. + +2011-05-28 David Kilzer <ddkilzer@apple.com> + + BUILD FIX when building only the interpreter + + Fixes the following compiler warning: + + JavaScriptCore/runtime/JSGlobalData.cpp:462:6: error: no previous prototype for function 'releaseExecutableMemory' [-Werror,-Wmissing-prototypes,3] + void releaseExecutableMemory(JSGlobalData& globalData) + ^ + + * jit/ExecutableAllocator.h: Moved declaration of + JSC::releaseExecutableMemory(). + +2011-05-28 David Kilzer <ddkilzer@apple.com> + + BUILD FIX after r87527 with ENABLE(BRANCH_COMPACTION) + + * assembler/LinkBuffer.h: + (JSC::LinkBuffer::linkCode): Added missing argument. + +2011-05-27 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Oliver Hunt. + + JS API is too aggressive about throwing exceptions for NULL get or set operations + https://bugs.webkit.org/show_bug.cgi?id=61678 + + * API/JSCallbackObject.h: Changed our staticValueGetter to a regular + function that returns a JSValue, so it can fail and still forward to + normal property lookup. + + * API/JSCallbackObjectFunctions.h: + (JSC::::getOwnPropertySlot): Don't throw an exception when failing to + access a static property -- just forward the access. This allows objects + to observe get/set operations but still let the JS object manage lifetime. + + (JSC::::put): Ditto. + + (JSC::::getStaticValue): Same as JSCallbackObject.h. + + * API/tests/testapi.c: + (MyObject_set_nullGetForwardSet): + * API/tests/testapi.js: Updated tests to reflect slightly less strict + behavior, which matches headerdoc claims. + +2011-05-27 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Oliver Hunt. + + Property caching is too aggressive for API objects + https://bugs.webkit.org/show_bug.cgi?id=61677 + + * API/JSCallbackObject.h: Opt in to ProhibitsPropertyCaching, since our + callback APIs allow the client to change its mind about our propertis at + any time. + + * API/tests/testapi.c: + (PropertyCatchalls_getProperty): + (PropertyCatchalls_setProperty): + (PropertyCatchalls_getPropertyNames): + (PropertyCatchalls_class): + (main): + * API/tests/testapi.js: Some tests for dynamic API objects. + + * interpreter/Interpreter.cpp: + (JSC::Interpreter::tryCachePutByID): + (JSC::Interpreter::tryCacheGetByID): + * jit/JITStubs.cpp: + (JSC::JITThunks::tryCachePutByID): + (JSC::JITThunks::tryCacheGetByID): + (JSC::DEFINE_STUB_FUNCTION): Opt out of property caching if the client + requires it. + + * runtime/JSTypeInfo.h: + (JSC::TypeInfo::TypeInfo): + (JSC::TypeInfo::isFinal): + (JSC::TypeInfo::prohibitsPropertyCaching): + (JSC::TypeInfo::flags): Added a flag to track opting out of property + caching. Fixed an "&&" vs "&" typo that was previously harmless, but + is now harmful since m_flags2 can have more than one bit set. + +2011-05-27 Stephanie Lewis <slewis@apple.com> + + Unreviewed. + + Fix a typo in the order_file flag. + + * Configurations/Base.xcconfig: + +2011-05-27 Patrick Gansterer <paroga@webkit.org> + + Unreviewed. Build fix for !ENABLE(ASSEMBLER) after r87527. + + * runtime/JSGlobalData.cpp: + (JSGlobalData::JSGlobalData): + +2011-05-27 Oliver Hunt <oliver@apple.com> + + Reviewed by Geoffrey Garen. + + Add a few validity assertions to JSCallbackObject + https://bugs.webkit.org/show_bug.cgi?id=61659 + + * API/JSCallbackObject.h: + (JSC::JSCallbackObject::visitChildren): + +2011-05-27 Oliver Hunt <oliver@apple.com> + + Build fix + + * runtime/RegExpCache.cpp: + (JSC::RegExpCache::invalidateCode): + +2011-05-27 Oliver Hunt <oliver@apple.com> + + Reviewed by Geoffrey Garen. + + Try to release unused executable memory when the FixedVMPool allocator is under pressure + https://bugs.webkit.org/show_bug.cgi?id=61651 + + Rather than crashing when full the FixedVMPool allocator now returns a null + allocation. We replace the code that used to CRASH() on null allocations + with logic that asks the provided globalData to release any executable memory + that it can. Currently this just means throwing away all regexp code, but + in future we'll try to be more aggressive. + + * assembler/ARMAssembler.cpp: + (JSC::ARMAssembler::executableCopy): + * assembler/ARMAssembler.h: + * assembler/AssemblerBuffer.h: + (JSC::AssemblerBuffer::executableCopy): + * assembler/AssemblerBufferWithConstantPool.h: + * assembler/LinkBuffer.h: + (JSC::LinkBuffer::LinkBuffer): + (JSC::LinkBuffer::linkCode): + * assembler/MIPSAssembler.h: + (JSC::MIPSAssembler::executableCopy): + * assembler/SH4Assembler.h: + (JSC::SH4Assembler::executableCopy): + * assembler/X86Assembler.h: + (JSC::X86Assembler::executableCopy): + (JSC::X86Assembler::X86InstructionFormatter::executableCopy): + * dfg/DFGJITCompiler.cpp: + (JSC::DFG::JITCompiler::compileFunction): + * jit/ExecutableAllocator.h: + (JSC::ExecutablePool::create): + (JSC::ExecutablePool::alloc): + (JSC::ExecutableAllocator::ExecutableAllocator): + (JSC::ExecutableAllocator::poolForSize): + (JSC::ExecutablePool::ExecutablePool): + (JSC::ExecutablePool::poolAllocate): + * jit/ExecutableAllocatorFixedVMPool.cpp: + (JSC::FixedVMPoolAllocator::alloc): + * jit/JIT.cpp: + (JSC::JIT::privateCompile): + * jit/JITOpcodes.cpp: + (JSC::JIT::privateCompileCTIMachineTrampolines): + * jit/JITOpcodes32_64.cpp: + (JSC::JIT::privateCompileCTIMachineTrampolines): + (JSC::JIT::privateCompileCTINativeCall): + * jit/JITPropertyAccess.cpp: + (JSC::JIT::stringGetByValStubGenerator): + (JSC::JIT::privateCompilePutByIdTransition): + (JSC::JIT::privateCompilePatchGetArrayLength): + (JSC::JIT::privateCompileGetByIdProto): + (JSC::JIT::privateCompileGetByIdSelfList): + (JSC::JIT::privateCompileGetByIdProtoList): + (JSC::JIT::privateCompileGetByIdChainList): + (JSC::JIT::privateCompileGetByIdChain): + * jit/JITPropertyAccess32_64.cpp: + (JSC::JIT::stringGetByValStubGenerator): + (JSC::JIT::privateCompilePutByIdTransition): + (JSC::JIT::privateCompilePatchGetArrayLength): + (JSC::JIT::privateCompileGetByIdProto): + (JSC::JIT::privateCompileGetByIdSelfList): + (JSC::JIT::privateCompileGetByIdProtoList): + (JSC::JIT::privateCompileGetByIdChainList): + (JSC::JIT::privateCompileGetByIdChain): + * jit/SpecializedThunkJIT.h: + (JSC::SpecializedThunkJIT::finalize): + * jit/ThunkGenerators.cpp: + (JSC::charCodeAtThunkGenerator): + (JSC::charAtThunkGenerator): + (JSC::fromCharCodeThunkGenerator): + (JSC::sqrtThunkGenerator): + (JSC::powThunkGenerator): + * runtime/JSGlobalData.cpp: + (JSC::JSGlobalData::JSGlobalData): + (JSC::JSGlobalData::releaseExecutableMemory): + (JSC::releaseExecutableMemory): + * runtime/JSGlobalData.h: + * runtime/RegExpCache.cpp: + (JSC::RegExpCache::invalidateCode): + * runtime/RegExpCache.h: + * yarr/YarrJIT.cpp: + (JSC::Yarr::YarrGenerator::compile): + +2011-05-26 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Oliver Hunt. + + Optimized ConservativeSet to avoid double-visiting objects + https://bugs.webkit.org/show_bug.cgi?id=61592 + + SunSpider thinks this might be a 1% speedup + + * heap/ConservativeRoots.h: + (JSC::ConservativeRoots::add): Use testAndClearMarked to avoid double-visiting + an object. + + * heap/Heap.h: + (JSC::Heap::isMarked): + (JSC::Heap::testAndSetMarked): + (JSC::Heap::testAndClearMarked): + (JSC::Heap::setMarked): Added testAndClearMarked. Changed argument type + to void*, since clients want to ask questions about arbitrary pointers + into the heap, even when they aren't known to be JSCells. + + * heap/MarkedBlock.h: + (JSC::MarkedBlock::testAndClearMarked): + * heap/MarkedSpace.h: + (JSC::MarkedSpace::isMarked): + (JSC::MarkedSpace::testAndSetMarked): + (JSC::MarkedSpace::testAndClearMarked): + (JSC::MarkedSpace::setMarked): + (JSC::MarkedSpace::contains): Ditto. + + * wtf/Bitmap.h: + (WTF::::testAndClear): New function for ConservativeRoots's inverted + marking pass. + +2011-05-27 Stephanie Lewis <slewis@apple.com> + + Rubber Stamped by Adam Roben. + + Update Order Files. Use -order_file flag since it can order more of the binary. + + * Configurations/Base.xcconfig: + * JavaScriptCore.order: + +2011-05-26 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Oliver Hunt. + + Renamed heapRootMarker to heapRootVisitor to match its class name + https://bugs.webkit.org/show_bug.cgi?id=61584 + + * heap/Heap.cpp: + (JSC::Heap::markProtectedObjects): + (JSC::Heap::markTempSortVectors): + (JSC::Heap::markRoots): + +2011-05-26 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Oliver Hunt. + + Removed some interdependency between Heap and SmallStrings by simplifying + the SmallStrings lifetime model + https://bugs.webkit.org/show_bug.cgi?id=61579 + + SunSpider reports no change. + + Using Weak<T> could accomplish this too, but we're not sure it will give + us the performance we need. This is a first step, and it accomplishes + most of the value of using Weak<T>. + + * heap/Heap.cpp: + (JSC::Heap::destroy): + (JSC::Heap::markRoots): + (JSC::Heap::reset): Finalize small strings just like other weak handles. + + * runtime/SmallStrings.cpp: + (JSC::finalize): + (JSC::SmallStrings::finalizeSmallStrings): + * runtime/SmallStrings.h: Make all small strings trivially weak, instead + of having an "all for one, one for all" memory model. + +2011-05-26 Oliver Hunt <oliver@apple.com> + + Reviewed by Geoffrey Garen. + + Make RegExpCache a weak map + https://bugs.webkit.org/show_bug.cgi?id=61554 + + Switch to a weak map for the regexp cache, and hide that + behaviour behind RegExp::create. + + When a RegExp is compiled it attempts to add itself to + the "strong" cache. This cache is a simple round-robin + buffer as was the old strong cache. Happily this can + be smaller than the old strong cache as RegExps are only + added when they're compiled so it is under less pressure + to evict. + + * bytecompiler/NodesCodegen.cpp: + (JSC::RegExpNode::emitBytecode): + * runtime/RegExp.cpp: + (JSC::RegExp::RegExp): + (JSC::RegExp::create): + (JSC::RegExp::match): + * runtime/RegExp.h: + (JSC::RegExp::gcShouldInvalidateCode): + (JSC::RegExp::hasCode): + (JSC::RegExp::key): + * runtime/RegExpCache.cpp: + (JSC::RegExpCache::lookupOrCreate): + (JSC::RegExpCache::RegExpCache): + (JSC::RegExpCache::isReachableFromOpaqueRoots): + (JSC::RegExpCache::finalize): + * runtime/RegExpCache.h: + * runtime/RegExpConstructor.cpp: + (JSC::constructRegExp): + * runtime/RegExpPrototype.cpp: + (JSC::regExpProtoFuncCompile): + * runtime/StringPrototype.cpp: + (JSC::stringProtoFuncMatch): + (JSC::stringProtoFuncSearch): + +2011-05-26 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Oliver Hunt. + + Moved Heap-related functions out of JSCell.h and into respective header files + https://bugs.webkit.org/show_bug.cgi?id=61567 + + * heap/Heap.h: + (JSC::Heap::allocate): + (JSC::Heap::heap): + * heap/MarkedBlock.h: + (JSC::MarkedBlock::allocate): + * heap/MarkedSpace.h: + (JSC::MarkedSpace::sizeClassFor): + (JSC::MarkedSpace::allocate): + * runtime/JSCell.h: + (JSC::JSCell::destructor): + +2011-05-26 Geoffrey Garen <ggaren@apple.com> + + Try to fix Windows build. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + +2011-05-26 Ryosuke Niwa <rniwa@webkit.org> + + Reviewed by Eric Seidel. + + [debug feature] WTFString should have show() method + https://bugs.webkit.org/show_bug.cgi?id=61149 + + Added String::show and AtomicString::show in NDEBUG. + + * wtf/text/AtomicString.cpp: + (WTF::AtomicString::show): + * wtf/text/AtomicString.h: + * wtf/text/WTFString.cpp: + (String::show): + * wtf/text/WTFString.h: + +2011-05-26 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Geoffrey Garen. + + Factored out some Heap ASSERTs + https://bugs.webkit.org/show_bug.cgi?id=61565 + + * JavaScriptCore.exp: + * heap/Heap.cpp: + (JSC::isValidSharedInstanceThreadState): + (JSC::isValidThreadState): + (JSC::Heap::markRoots): + (JSC::Heap::isValidAllocation): + * heap/Heap.h: + * runtime/JSCell.h: + (JSC::JSCell::Heap::allocate): + +2011-05-26 Gavin Barraclough <barraclough@apple.com> + + Reviewed by Geoff Garen. + + https://bugs.webkit.org/show_bug.cgi?id=61508 + DFG JIT - Add support for get by id self caching. + + Change the call out to be an unexpected call (using silent spill/fill functions), + add a structure check & compact load to the JIT code, and add repatching mechanisms. + Since DFGOperations may want to be be implemented in asm, make these symbols be extern + "C". Add an asm wrapper to pass the return address to the optimizing get-by-id operation, + so that it can look up its StructureStubInfo. + + * JavaScriptCore.xcodeproj/project.pbxproj: + - Added new files. + * bytecode/StructureStubInfo.h: + - Added 'unset' entries to union. + * dfg/DFGJITCodeGenerator.h: + (JSC::DFG::JITCodeGenerator::appendCallWithExceptionCheck): + - Return the call, we need this to populate the StructureStubInfo. + * dfg/DFGJITCompiler.cpp: + (JSC::DFG::JITCompiler::compileFunction): + - Populate the CodebBlock's StructureStubInfo Vector. + * dfg/DFGJITCompiler.h: + (JSC::DFG::JITCompiler::appendCallWithExceptionCheck): + - Return the call, we need this to populate the StructureStubInfo. + (JSC::DFG::JITCompiler::addPropertyAccess): + (JSC::DFG::JITCompiler::PropertyAccessRecord::PropertyAccessRecord): + - Add structures to record property access info during compilation. + * dfg/DFGOperations.cpp: + - Made all external methods extern "C". + (JSC::DFG::operationPutByValInternal): + - Moved outside of the extern "C" block. + * dfg/DFGOperations.h: + - Made all external methods extern "C". + * dfg/DFGRepatch.cpp: Added. + (JSC::DFG::dfgRepatchCall): + - repatch a call to link to a new callee function. + (JSC::DFG::dfgRepatchGetByIdSelf): + - Modify the JIT code to optimize self accesses. + (JSC::DFG::tryCacheGetByID): + - Internal implementation of dfgRepatchGetByID (factor out failing cases). + (JSC::DFG::dfgRepatchGetByID): + - Used to optimize 'operationGetByIdOptimize' - repatches to 'operationGetById', and tries to optimize self accesses! + * dfg/DFGRepatch.h: Added. + - Expose dfgRepatchGetByID. + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::compile): + - Changed implementation of GetById ops. + +2011-05-26 Geoffrey Garen <ggaren@apple.com> + + Rolled back in http://trac.webkit.org/changeset/87408 with Windows build fixed. + + * heap/MarkedBlock.cpp: + (JSC::MarkedBlock::MarkedBlock): + * heap/MarkedBlock.h: + * wtf/DoublyLinkedList.h: + (WTF::::DoublyLinkedListNode): + (WTF::::setPrev): + (WTF::::setNext): + (WTF::::prev): + (WTF::::next): + (WTF::::DoublyLinkedList): + (WTF::::isEmpty): + (WTF::::size): + (WTF::::clear): + (WTF::::head): + (WTF::::append): + (WTF::::remove): + (WTF::::removeHead): + +2011-05-26 Geoffrey Garen <ggaren@apple.com> + + Rolled out http://trac.webkit.org/changeset/87408 because it broke the + Windows build. + + * heap/MarkedBlock.cpp: + (JSC::MarkedBlock::MarkedBlock): + * heap/MarkedBlock.h: + (JSC::MarkedBlock::setPrev): + (JSC::MarkedBlock::setNext): + (JSC::MarkedBlock::prev): + (JSC::MarkedBlock::next): + * wtf/DoublyLinkedList.h: + (WTF::::DoublyLinkedList): + (WTF::::isEmpty): + (WTF::::head): + (WTF::::append): + (WTF::::remove): + +2011-05-26 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Oliver Hunt. + + Provide a real owner when copying a property table, for the sake of + write barriers. + https://bugs.webkit.org/show_bug.cgi?id=61547 + + No test because we can't enable the writeBarrier() ASSERT just yet. + + * runtime/Structure.cpp: + (JSC::Structure::addPropertyTransition): + +2011-05-26 Adam Roben <aroben@apple.com> + + Windows build fix after r87346 + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Fixed up exports to match + reality. + +2011-05-26 Patrick Gansterer <paroga@webkit.org> + + Reviewed by Adam Barth. + + ASSERT(isMainThread()) when using single threaded jsc executable + https://bugs.webkit.org/show_bug.cgi?id=60846 + + Remove the ASSERT since we do not have the concept of MainThread in JSC. + + * wtf/CryptographicallyRandomNumber.cpp: + (WTF::ARC4Stream::ARC4RandomNumberGenerator::randomNumber): + (WTF::ARC4Stream::ARC4RandomNumberGenerator::randomValues): + +2011-05-25 Gavin Barraclough <barraclough@apple.com> + + Reviewed by Sam Weinig. + + https://bugs.webkit.org/show_bug.cgi?id=61506 + + Move the silent spill/fill methods in the DFG JIT to the JITCodeGenerator + so that they are available to the SpeculativeJIT. + + * dfg/DFGJITCodeGenerator.h: + (JSC::DFG::JITCodeGenerator::silentSpillGPR): + (JSC::DFG::JITCodeGenerator::silentSpillFPR): + (JSC::DFG::JITCodeGenerator::silentFillGPR): + (JSC::DFG::JITCodeGenerator::silentFillFPR): + (JSC::DFG::JITCodeGenerator::silentSpillAllRegisters): + (JSC::DFG::JITCodeGenerator::silentFillAllRegisters): + * dfg/DFGNonSpeculativeJIT.h: + +2011-05-25 Ryosuke Niwa <rniwa@webkit.org> + + An attempt to revive Windows bots. + + * runtime/RegExp.cpp: + * runtime/RegExp.h: + +2011-05-25 Gavin Barraclough <barraclough@apple.com> + + Reviewed by Sam Weinig. + + Bug 61503 - Move population of CodeBlock::m_structureStubInfos into JIT + + This data structure, used at runtime by the JIT, is currently unnecessarily populated + with default entries during byte compilation. + + Aside from meaning that there is JIT specific code in the bytecompiler, this also ties + us to one entry per corresponding bytecode op, which may be undesirable. Instead, + populate this array from the JIT. + + The type StructureStubInfo has two unused states, one for gets & one for puts. Unify + these, so that the class can have a default constructor (and to simply switch statements + in code walking over the table). + + This change has ramification for the DFG JIT, in that the DFG JIT used this datastructure + to check for functions containing property access. Instead do so in the DFGByteCodeParser. + + * bytecode/CodeBlock.cpp: + (JSC::printStructureStubInfo): + * bytecode/CodeBlock.h: + (JSC::CodeBlock::setNumberOfStructureStubInfos): + (JSC::CodeBlock::numberOfStructureStubInfos): + * bytecode/StructureStubInfo.cpp: + (JSC::StructureStubInfo::deref): + (JSC::StructureStubInfo::visitAggregate): + * bytecode/StructureStubInfo.h: + (JSC::StructureStubInfo::StructureStubInfo): + * bytecompiler/BytecodeGenerator.cpp: + (JSC::BytecodeGenerator::emitGetById): + (JSC::BytecodeGenerator::emitPutById): + (JSC::BytecodeGenerator::emitDirectPutById): + * dfg/DFGByteCodeParser.cpp: + (JSC::DFG::ByteCodeParser::parseBlock): + * jit/JIT.cpp: + (JSC::JIT::JIT): + (JSC::JIT::privateCompileMainPass): + (JSC::JIT::privateCompileSlowCases): + (JSC::JIT::privateCompile): + * jit/JIT.h: + * jit/JITPropertyAccess.cpp: + (JSC::JIT::emit_op_get_by_id): + (JSC::JIT::emit_op_put_by_id): + (JSC::JIT::emit_op_method_check): + (JSC::JIT::compileGetByIdHotPath): + (JSC::JIT::compileGetByIdSlowCase): + (JSC::JIT::emitSlow_op_put_by_id): + * jit/JITPropertyAccess32_64.cpp: + (JSC::JIT::emit_op_get_by_id): + (JSC::JIT::emitSlow_op_get_by_id): + (JSC::JIT::emit_op_put_by_id): + (JSC::JIT::emitSlow_op_put_by_id): + (JSC::JIT::emit_op_method_check): + (JSC::JIT::compileGetByIdHotPath): + (JSC::JIT::compileGetByIdSlowCase): + * runtime/Executable.cpp: + (JSC::tryDFGCompile): + +2011-05-25 Gavin Barraclough <barraclough@apple.com> + + Reviewed by Sam Weinig. + + Bug 61501 - Unify AbstractMacroAssembler::differenceBetween methods. + + * assembler/AbstractMacroAssembler.h: + (JSC::AbstractMacroAssembler::Call::Call): + (JSC::AbstractMacroAssembler::Call::fromTailJump): + (JSC::AbstractMacroAssembler::Jump::Jump): + (JSC::AbstractMacroAssembler::Jump::link): + (JSC::AbstractMacroAssembler::Jump::linkTo): + (JSC::AbstractMacroAssembler::Jump::isSet): + (JSC::AbstractMacroAssembler::differenceBetween): + (JSC::AbstractMacroAssembler::linkJump): + (JSC::AbstractMacroAssembler::getLinkerCallReturnOffset): + * assembler/LinkBuffer.h: + (JSC::LinkBuffer::link): + (JSC::LinkBuffer::locationOf): + (JSC::LinkBuffer::locationOfNearCall): + (JSC::LinkBuffer::returnAddressOffset): + * assembler/MacroAssemblerARM.h: + (JSC::MacroAssemblerARM::linkCall): + * assembler/MacroAssemblerARMv7.h: + (JSC::MacroAssemblerARMv7::linkCall): + * assembler/MacroAssemblerMIPS.h: + (JSC::MacroAssemblerMIPS::linkCall): + * assembler/MacroAssemblerSH4.cpp: + (JSC::MacroAssemblerSH4::linkCall): + * assembler/MacroAssemblerX86.h: + (JSC::MacroAssemblerX86::linkCall): + * assembler/MacroAssemblerX86_64.h: + (JSC::MacroAssemblerX86_64::linkCall): + +2011-05-25 Gavin Barraclough <barraclough@apple.com> + + Reviewed by Sam Weinig. + + https://bugs.webkit.org/show_bug.cgi?id=61500 + Add JSObject::offsetOfPropertyStorage + + * jit/JITPropertyAccess.cpp: + (JSC::JIT::compileGetDirectOffset): + (JSC::JIT::compileGetByIdHotPath): + (JSC::JIT::emit_op_put_by_id): + (JSC::JIT::compilePutDirectOffset): + * jit/JITPropertyAccess32_64.cpp: + (JSC::JIT::compileGetByIdHotPath): + (JSC::JIT::emit_op_put_by_id): + (JSC::JIT::compilePutDirectOffset): + (JSC::JIT::compileGetDirectOffset): + * runtime/JSObject.h: + (JSC::JSObject::offsetOfPropertyStorage): + +2011-05-25 Oliver Hunt <oliver@apple.com> + + Reviewed by Geoffrey Garen. + + Make RegExp GC allocated + https://bugs.webkit.org/show_bug.cgi?id=61490 + + Make RegExp GC allocated. Basically mechanical change to replace + most use of [Pass]RefPtr<RegExp> with RegExp* or WriteBarrier<RegExp> + where actual ownership happens. + + Made the RegExpCache use Strong<> references currently to avoid any + changes in behaviour. + + * JavaScriptCore.exp: + * bytecode/CodeBlock.cpp: + (JSC::CodeBlock::visitAggregate): + * bytecode/CodeBlock.h: + (JSC::CodeBlock::addRegExp): + * bytecompiler/BytecodeGenerator.cpp: + (JSC::BytecodeGenerator::addRegExp): + (JSC::BytecodeGenerator::emitNewRegExp): + * bytecompiler/BytecodeGenerator.h: + * runtime/JSCell.h: + * runtime/JSGlobalData.cpp: + (JSC::JSGlobalData::JSGlobalData): + (JSC::JSGlobalData::clearBuiltinStructures): + (JSC::JSGlobalData::addRegExpToTrace): + * runtime/JSGlobalData.h: + * runtime/JSGlobalObject.cpp: + (JSC::JSGlobalObject::reset): + * runtime/RegExp.cpp: + (JSC::RegExp::RegExp): + (JSC::RegExp::create): + (JSC::RegExp::invalidateCode): + * runtime/RegExp.h: + (JSC::RegExp::createStructure): + * runtime/RegExpCache.cpp: + (JSC::RegExpCache::lookupOrCreate): + (JSC::RegExpCache::create): + * runtime/RegExpCache.h: + * runtime/RegExpConstructor.cpp: + (JSC::constructRegExp): + * runtime/RegExpObject.cpp: + (JSC::RegExpObject::RegExpObject): + (JSC::RegExpObject::visitChildren): + * runtime/RegExpObject.h: + (JSC::RegExpObject::setRegExp): + (JSC::RegExpObject::RegExpObjectData::RegExpObjectData): + * runtime/RegExpPrototype.cpp: + (JSC::RegExpPrototype::RegExpPrototype): + (JSC::regExpProtoFuncCompile): + * runtime/RegExpPrototype.h: + * runtime/StringPrototype.cpp: + (JSC::stringProtoFuncMatch): + (JSC::stringProtoFuncSearch): + +2011-05-25 Oliver Hunt <oliver@apple.com> + + Reviewed by Geoffrey Garen. + + Generate regexp code lazily + https://bugs.webkit.org/show_bug.cgi?id=61476 + + RegExp construction now simply validates the RegExp, it does + not perform actual codegen. + + * runtime/RegExp.cpp: + (JSC::RegExp::RegExp): + (JSC::RegExp::recompile): + (JSC::RegExp::compile): + (JSC::RegExp::match): + * runtime/RegExp.h: + (JSC::RegExp::recompileIfNecessary): + * runtime/RegExpConstructor.h: + (JSC::RegExpConstructor::performMatch): + * runtime/RegExpObject.cpp: + (JSC::RegExpObject::match): + * runtime/StringPrototype.cpp: + (JSC::stringProtoFuncReplace): + (JSC::stringProtoFuncMatch): + (JSC::stringProtoFuncSearch): + (JSC::stringProtoFuncSplit): + +2011-05-24 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Geoffrey Garen. + + Removed MarkSetProperties because it was unused + https://bugs.webkit.org/show_bug.cgi?id=61418 + + * heap/MarkStack.h: + (JSC::MarkSet::MarkSet): + (JSC::MarkStack::append): + * runtime/JSActivation.cpp: + (JSC::JSActivation::visitChildren): + * runtime/JSArray.h: + (JSC::JSArray::visitChildrenDirect): + * runtime/JSPropertyNameIterator.cpp: + (JSC::JSPropertyNameIterator::visitChildren): + * runtime/WriteBarrier.h: + (JSC::MarkStack::appendValues): + +2011-05-25 Oliver Hunt <oliver@apple.com> + + Reviewed by Geoffrey Garen. + + Make allocations with guard pages ensure that the allocation succeeded + https://bugs.webkit.org/show_bug.cgi?id=61453 + + Add null checks, and make PageBlock's operator bool() use + the realbase, rather than the start of usable memory. + + * wtf/OSAllocatorPosix.cpp: + (WTF::OSAllocator::reserveAndCommit): + * wtf/PageBlock.h: + (WTF::PageBlock::operator bool): + (WTF::PageBlock::PageBlock): + +2011-04-10 Kevin Ollivier <kevino@theolliviers.com> + + Reviewed by Eric Seidel. + + Add JS_EXPORT_PRIVATE macro for exported methods in bytecompiler headers. + + https://bugs.webkit.org/show_bug.cgi?id=27551 + + * bytecompiler/BytecodeGenerator.h: + +2011-05-24 Keishi Hattori <keishi@webkit.org> + + Reviewed by Kent Tamura. + + Disable textfield implementation of <input type=color>. Add INPUT_COLOR feature flag. Add input color sanitizer. + https://bugs.webkit.org/show_bug.cgi?id=61273 + + * Configurations/FeatureDefines.xcconfig: Added COLOR_INPUT feature flag. + +2011-05-24 Kevin Ollivier <kevino@theolliviers.com> + + Reviewed by Eric Seidel. + + Add export macros to WTFString.h. + + https://bugs.webkit.org/show_bug.cgi?id=27551 + + * wtf/text/WTFString.h: + (WTF::String::String): + (WTF::String::findIgnoringCase): + (WTF::String::isHashTableDeletedValue): + +2011-05-24 Geoffrey Garen <ggaren@apple.com> + + Maybe fix the Mac build now? + + * JavaScriptCore.xcodeproj/project.pbxproj: + +2011-05-24 Geoffrey Garen <ggaren@apple.com> + + Maybe fix the Mac build? + + * JavaScriptCore.xcodeproj/project.pbxproj: + +2011-05-24 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Oliver Hunt. + + Split HeapRootVisitor into its own class + https://bugs.webkit.org/show_bug.cgi?id=61399 + + * GNUmakefile.list.am: + * JavaScriptCore.gypi: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * heap/HandleHeap.cpp: + * heap/HandleStack.cpp: + * heap/Heap.cpp: + * heap/HeapRootVisitor.h: Copied from Source/JavaScriptCore/heap/MarkStack.h. + * heap/MarkStack.h: + * runtime/ArgList.cpp: + * runtime/SmallStrings.cpp: + +2011-05-24 Jay Civelli <jcivelli@chromium.org> + + Rubberstamped by David Kilzer. + + Updated some files that I forgot in my previous MHTML CL. + + * Configurations/FeatureDefines.xcconfig: + +2011-05-24 Geoffrey Garen <ggaren@apple.com> + + Fix the Mac build: Yes, please do remove these files, svn. + + * JavaScriptCore.xcodeproj/project.pbxproj: + +2011-05-24 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Oliver Hunt. + + Let's just have one way to get the system page size, bokay? + https://bugs.webkit.org/show_bug.cgi?id=61384 + + * CMakeListsEfl.txt: + * CMakeListsWinCE.txt: + * GNUmakefile.list.am: + * JavaScriptCore.exp: + * JavaScriptCore.gypi: + * JavaScriptCore.pro: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: MarkStack[Platform].cpp + is gone completely now, since it only existed to provide a duplicate way + to access the system page size. + + * heap/MarkStack.cpp: + (JSC::MarkStack::reset): + * heap/MarkStack.h: + (JSC::::MarkStackArray): + (JSC::::shrinkAllocation): Use WTF::pageSize. + + * heap/MarkStackPosix.cpp: + * heap/MarkStackSymbian.cpp: + * heap/MarkStackWin.cpp: Removed now-empty files. + + * jit/ExecutableAllocator.cpp: + (JSC::ExecutableAllocator::reprotectRegion): + * jit/ExecutableAllocator.h: + (JSC::ExecutableAllocator::ExecutableAllocator): + (JSC::ExecutablePool::ExecutablePool): + (JSC::ExecutablePool::poolAllocate): + * jit/ExecutableAllocatorFixedVMPool.cpp: Use WTF::pageSize. + + * wscript: Removed now-empty files. + + * wtf/PageBlock.cpp: + (WTF::systemPageSize): Integrated questionable Symbian page size rule + from ExecutableAllocator, because that seems like what the original + author should have done. + +2011-05-24 Oliver Hunt <oliver@apple.com> + + Reviewed by Gavin Barraclough. + + Interpreter crashes with gc validation enabled due to failure to mark initial cache structure + https://bugs.webkit.org/show_bug.cgi?id=61385 + + The interpreter uses the structure slot of get_by_id and put_by_id to hold + the initial structure it encountered so that it can identify whether a + given access is stable. + + When marking though we only visit the slot when we've decided to cache, and + so this value could die. This was "safe" as the value was only used for a + pointer compare, but it was incorrect. We now just mark the slot like we + should have been doing already. + + * bytecode/CodeBlock.cpp: + (JSC::CodeBlock::visitStructures): + +2011-05-24 Adam Roben <aroben@apple.com> + + Windows build fix + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Removed now-inline functions. + +2011-05-24 Geoffrey Garen <ggaren@apple.com> + + Windows build fix: update the #if OS(WINDOWS) section to match my last patch. + + * heap/MarkStack.h: + (JSC::::shrinkAllocation): + +2011-05-24 Geoffrey Garen <ggaren@apple.com> + + Rubber-stamped by Oliver Hunt. + + Split out function definitions and class definitions from class + declarations in MarkStack.h, for readability. + + * heap/MarkStack.h: + (JSC::MarkStack::MarkStack): + (JSC::MarkStack::~MarkStack): + (JSC::MarkStack::addOpaqueRoot): + (JSC::MarkStack::containsOpaqueRoot): + (JSC::MarkStack::opaqueRootCount): + (JSC::MarkSet::MarkSet): + (JSC::MarkStack::allocateStack): + (JSC::MarkStack::releaseStack): + (JSC::MarkStack::pageSize): + (JSC::::MarkStackArray): + (JSC::::~MarkStackArray): + (JSC::::expand): + (JSC::::append): + (JSC::::removeLast): + (JSC::::last): + (JSC::::isEmpty): + (JSC::::size): + (JSC::::shrinkAllocation): + +2011-05-24 Oliver Hunt <oliver@apple.com> + + Reviewed by Geoffrey Garen. + + Avoid creating unnecessary identifiers and strings in the syntax checker + https://bugs.webkit.org/show_bug.cgi?id=61378 + + Selectively tell the lexer that there are some places it does not need to + do the real work of creating Identifiers for IDENT and STRING tokens. + + Make parseString and parseIdentifier templatized on whether they should + do real work, or merely validate the tokens. + + SunSpider --parse-only reports ~5-8% win depending on hardware. + + * parser/ASTBuilder.h: + (JSC::ASTBuilder::createDotAccess): + * parser/JSParser.cpp: + (JSC::JSParser::next): + (JSC::JSParser::consume): + (JSC::JSParser::parseVarDeclarationList): + (JSC::JSParser::parseConstDeclarationList): + (JSC::JSParser::parseExpression): + (JSC::JSParser::parseAssignmentExpression): + (JSC::JSParser::parseConditionalExpression): + (JSC::JSParser::parseBinaryExpression): + (JSC::JSParser::parseProperty): + (JSC::JSParser::parseObjectLiteral): + (JSC::JSParser::parseArrayLiteral): + (JSC::JSParser::parseArguments): + (JSC::JSParser::parseMemberExpression): + * parser/Lexer.cpp: + (JSC::Lexer::parseIdentifier): + (JSC::Lexer::parseString): + (JSC::Lexer::lex): + * parser/Lexer.h: + * parser/SyntaxChecker.h: + (JSC::SyntaxChecker::createDotAccess): + (JSC::SyntaxChecker::createProperty): + +2011-05-23 Michael Saboff <msaboff@apple.com> + + Reviewed by Mark Rowe. + + Safari often freezes when clicking "Return free memory" in Caches dialog + https://bugs.webkit.org/show_bug.cgi?id=61325 + + There are two fixes and improvement in instrumentation code used to find + one of the problems. + Changed ReleaseFreeList() to set the "decommitted" bit when releasing + pages to the system and moving Spans from the normal list to the returned + list. + Added a "not making forward progress" check to TCMalloc_PageHeap::scavenge + to eliminate an infinite loop if we can't meet the pagesToRelease target. + Added a check for the decommitted bit being set properly in + TCMalloc_PageHeap::CheckList. + + * wtf/FastMalloc.cpp: + (WTF::TCMalloc_PageHeap::scavenge): + (WTF::TCMalloc_PageHeap::Check): + (WTF::TCMalloc_PageHeap::CheckList): + (WTF::ReleaseFreeList): + +2011-05-23 Gavin Barraclough <barraclough@apple.com> + + Reviewed by Geoff Garen. + + https://bugs.webkit.org/show_bug.cgi?id=61306 + + The begin characters optimization currently has issues (#61129), + and does not appear to still be a performance win. The prudent + next step seems to be to disable while we ascertain whether this + is still a useful performance optimization. + + * yarr/YarrInterpreter.cpp: + (JSC::Yarr::Interpreter::matchDisjunction): + (JSC::Yarr::Interpreter::interpret): + * yarr/YarrInterpreter.h: + (JSC::Yarr::BytecodePattern::BytecodePattern): + * yarr/YarrPattern.cpp: + (JSC::Yarr::YarrPatternConstructor::YarrPatternConstructor): + (JSC::Yarr::YarrPattern::compile): + (JSC::Yarr::YarrPattern::YarrPattern): + * yarr/YarrPattern.h: + (JSC::Yarr::YarrPattern::reset): + +2011-05-23 Matthew Delaney <mdelaney@apple.com> + + Reviewed by Simon Fraser. + + Remove safeFloatToInt() in FloatRect.cpp and replace with working version of clampToInteger() + https://bugs.webkit.org/show_bug.cgi?id=58216 + + * wtf/MathExtras.h: + (clampToInteger): + (clampToPositiveInteger): + +2011-05-23 Ruben <chromium@hybridsource.org> + + Reviewed by Tony Chang. + + Chromium gyp patch to use new POSIX defines toolkit_uses_gtk and os_posix + https://bugs.webkit.org/show_bug.cgi?id=61219 + + * JavaScriptCore.gyp/JavaScriptCore.gyp: + +2011-05-23 Thouraya ANDOLSI <thouraya.andolsi@st.com> + + Reviewed by Gavin Barraclough. + + [SH4] AssemblerLabel does not name a type + https://bugs.webkit.org/show_bug.cgi?id=59927 + + SH4Assembler.h file shoold be included before AbstractMacroAssembler.h. + + * assembler/MacroAssemblerSH4.h: + +2011-05-23 Ryuan Choi <ryuan.choi@samsung.com> + + Rubber stamped by Eric Seidel. + + [CMAKE] Refactoring wtf related code. + https://bugs.webkit.org/show_bug.cgi?id=60146 + + Move wtf-files to Source/JavaScriptCore/wtf/CMakeLists.txt. + + * CMakeLists.txt: + * CMakeListsEfl.txt: + * wtf/CMakeLists.txt: + * wtf/CMakeListsEfl.txt: + +2011-05-22 Adam Barth <abarth@webkit.org> + + Enable strict PassOwnPtr for everyone. I expect this patch will need + some followups to make the GTK and EFL bots green again. + + * wtf/PassOwnPtr.h: + +2011-05-20 Oliver Hunt <oliver@apple.com> + + Reviewed by Gavin Barraclough. + + Reduce size of inline cache path of get_by_id on ARMv7 + https://bugs.webkit.org/show_bug.cgi?id=61221 + + This reduces the code size of get_by_id by 20 bytes + + * assembler/ARMv7Assembler.h: + (JSC::ARMv7Assembler::ldrCompact): + (JSC::ARMv7Assembler::repatchCompact): + (JSC::ARMv7Assembler::setUInt7ForLoad): + * assembler/MacroAssemblerARMv7.h: + (JSC::MacroAssemblerARMv7::load32WithCompactAddressOffsetPatch): + * jit/JIT.h: + +2011-05-20 Zoltan Herczeg <zherczeg@inf.u-szeged.hu> + + Reviewed by Oliver Hunt. + + Zombies should "live" forever + https://bugs.webkit.org/show_bug.cgi?id=61170 + + Reusing zombie cells could still hide garbage + collected cell related bugs. + + * JavaScriptCore.pro: + * heap/MarkedBlock.cpp: + (JSC::MarkedBlock::clearMarks): + * heap/MarkedBlock.h: + * heap/MarkedSpace.cpp: + (JSC::MarkedSpace::destroy): + * runtime/JSCell.h: + (JSC::JSCell::JSValue::isZombie): + * runtime/JSZombie.h: + (JSC::JSZombie::~JSZombie): + * runtime/WriteBarrier.h: + (JSC::WriteBarrierBase::setWithoutWriteBarrier): + +2011-05-20 Brady Eidson <beidson@apple.com> + + Reviewed by Sam Weinig. + + <rdar://problem/9472883> and https://bugs.webkit.org/show_bug.cgi?id=61203 + Horrendous bug in callOnMainThreadAndWait + + * wtf/MainThread.cpp: + (WTF::dispatchFunctionsFromMainThread): Before signaling the background thread with the + syncFlag condition, reacquire the mutex first. + +2011-05-20 Oliver Hunt <oliver@apple.com> + + Reviewed by Sam Weinig. + + Remove unnecessary double->int conversion at the end of op_div + https://bugs.webkit.org/show_bug.cgi?id=61198 + + We don't attempt this conversion on 64bit, removing it actually speeds + up sunspider and v8 slightly, and it reduces code size. + + * jit/JITArithmetic32_64.cpp: + (JSC::JIT::emit_op_div): + +2011-05-19 Evan Martin <evan@chromium.org> + + Reviewed by Tony Chang. + + [chromium] remove <(library) variable + https://bugs.webkit.org/show_bug.cgi?id=61158 + + This was for a build experiment; we can just use the correct value now. + + * JavaScriptCore.gyp/JavaScriptCore.gyp: + +2011-05-20 Oliver Hunt <oliver@apple.com> + + Reviewed by Sam Weinig. + + Interpreter uses wrong bytecode offset for determining exception handler + https://bugs.webkit.org/show_bug.cgi?id=61191 + + The bytecode offset given for the returnPC from the JIT is + actually the offset for the start of the instruction triggering + the call, whereas in the interpreter it is the actual return + VPC. This means if the next instruction following a call was + in an exception region we would incorrectly redirect to its + handler. Long term we want to completely redo how exceptions + are handled anyway so the simplest and lowest risk fix here is + to simply subtract one from the return vPC so that we have an + offset in the triggering instruction. + + It turns out this is caught by a couple of tests already. + + * interpreter/Interpreter.cpp: + (JSC::Interpreter::unwindCallFrame): + +2011-05-20 Xan Lopez <xlopez@igalia.com> + + Reviewed by Oliver Hunt. + + JIT requires VM overcommit (particularly on x86-64), Linux does not by default support this without swap? + https://bugs.webkit.org/show_bug.cgi?id=42756 + + Use the MAP_NORESERVE flag for mmap on Linux to skip the kernel + check of the available memory. This should give us an + overcommit-like behavior in most systems, which is what we want. + + * wtf/OSAllocatorPosix.cpp: + (WTF::OSAllocator::reserveAndCommit): pass MAP_NORSERVE to mmap. + +2011-05-19 Gabor Loki <loki@webkit.org> + + Fix ARM build after r86919 + + * assembler/ARMAssembler.h: + (JSC::ARMAssembler::nop): + +2011-05-19 Oliver Hunt <oliver@apple.com> + + Reviewed by Gavin Barraclough. + + Randomise code starting location a little + https://bugs.webkit.org/show_bug.cgi?id=61161 + + Add a nop() function to the Assemblers so that we + can randomise code offsets slightly at no real cost. + + * assembler/ARMAssembler.h: + (JSC::ARMAssembler::nop): + * assembler/ARMv7Assembler.h: + (JSC::ARMv7Assembler::nop): + * assembler/MacroAssemblerARM.h: + (JSC::MacroAssemblerARM::nop): + * assembler/MacroAssemblerARMv7.h: + (JSC::MacroAssemblerARMv7::nop): + * assembler/MacroAssemblerMIPS.h: + (JSC::MacroAssemblerMIPS::nop): + * assembler/MacroAssemblerSH4.h: + (JSC::MacroAssemblerSH4::nop): + * assembler/MacroAssemblerX86Common.h: + (JSC::MacroAssemblerX86Common::nop): + * assembler/X86Assembler.h: + (JSC::X86Assembler::nop): + * jit/JIT.cpp: + (JSC::JIT::JIT): + (JSC::JIT::privateCompile): + * jit/JIT.h: + * runtime/WeakRandom.h: + (JSC::WeakRandom::getUint32): + +2011-05-19 Oliver Hunt <oliver@apple.com> + + Fix windows build. + + * wtf/OSAllocatorWin.cpp: + (WTF::OSAllocator::reserveUncommitted): + (WTF::OSAllocator::reserveAndCommit): + +2011-05-19 Oliver Hunt <oliver@apple.com> + + Reviewed by Gavin Barraclough. + + Add guard pages to each end of the memory region used by the fixedvm allocator + https://bugs.webkit.org/show_bug.cgi?id=61150 + + Add mechanism to notify the OSAllocator that pages at either end of an + allocation should be considered guard pages. Update PageReservation, + PageAllocation, etc to handle this. + + * JavaScriptCore.exp: + * jit/ExecutableAllocatorFixedVMPool.cpp: + (JSC::FixedVMPoolAllocator::FixedVMPoolAllocator): + * wtf/OSAllocator.h: + * wtf/OSAllocatorPosix.cpp: + (WTF::OSAllocator::reserveUncommitted): + (WTF::OSAllocator::reserveAndCommit): + * wtf/PageAllocation.h: + (WTF::PageAllocation::PageAllocation): + * wtf/PageAllocationAligned.h: + (WTF::PageAllocationAligned::PageAllocationAligned): + * wtf/PageBlock.h: + (WTF::PageBlock::PageBlock): + * wtf/PageReservation.h: + (WTF::PageReservation::reserve): + (WTF::PageReservation::reserveWithGuardPages): + Add a new function to make a reservation that will add guard + pages to the ends of an allocation. + (WTF::PageReservation::PageReservation): + +2011-05-19 Oliver Hunt <oliver@apple.com> + + Reviewed by Geoffrey Garen. + + Make Executables release their JIT code as soon as they become dead + https://bugs.webkit.org/show_bug.cgi?id=61134 + + Add an ability to clear an Executable's jit code without requiring + it to be destroyed, and then call that from a finalizer. + + * heap/Weak.h: + (JSC::Weak::Weak): + (JSC::Weak::leak): + * jit/JITCode.h: + (JSC::JITCode::clear): + * runtime/Executable.cpp: + (JSC::ExecutableFinalizer::finalize): + (JSC::ExecutableBase::executableFinalizer): + * runtime/Executable.h: + (JSC::ExecutableBase::ExecutableBase): + (JSC::ExecutableBase::clearExecutableCode): + +2011-05-19 Adam Roben <aroben@apple.com> + + Remove a redundant and broken data export + + Data can't be exported from JavaScriptCore.dll by listing it in the .def file. The + JS_EXPORTDATA macro must be used instead. (In this case it was already being used, leading + to a linker warning about multiple definitions.) + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Removed JSGlobalData::s_info. + +2011-05-18 Oliver Hunt <oliver@apple.com> + + Reviewed by Gavin Barraclough. + + Some tests crashing in JSC::MarkStack::validateValue beneath ScriptController::clearWindowShell on SnowLeopard Intel Release (WebKit2 Tests) + https://bugs.webkit.org/show_bug.cgi?id=61064 + + Switch NonFinalObject to using WriteBarrier<> rather than WriteBarrierBase<> + for its inline storage. This resolves the problem of GC occurring before + a subclass has initialised its anonymous storage. + + * runtime/JSObject.h: + +2011-05-18 Adam Barth <abarth@webkit.org> + + Reviewed by Sam Weinig. + + Delete WTFURL + https://bugs.webkit.org/show_bug.cgi?id=61084 + + It's been a year and we've failed to complete this project. It's time + to throw in the towel. + + * JavaScriptCore.xcodeproj/project.pbxproj: + * wtf/url: Removed. + * wtf/url/api: Removed. + * wtf/url/api/ParsedURL.cpp: Removed. + * wtf/url/api/ParsedURL.h: Removed. + * wtf/url/api/URLString.h: Removed. + * wtf/url/src: Removed. + * wtf/url/src/RawURLBuffer.h: Removed. + * wtf/url/src/URLBuffer.h: Removed. + * wtf/url/src/URLCharacterTypes.cpp: Removed. + * wtf/url/src/URLCharacterTypes.h: Removed. + * wtf/url/src/URLComponent.h: Removed. + * wtf/url/src/URLEscape.cpp: Removed. + * wtf/url/src/URLEscape.h: Removed. + * wtf/url/src/URLParser.h: Removed. + * wtf/url/src/URLQueryCanonicalizer.h: Removed. + * wtf/url/src/URLSegments.cpp: Removed. + * wtf/url/src/URLSegments.h: Removed. + * wtf/url/wtfurl.gyp: Removed. + +2011-05-18 Oliver Hunt <oliver@apple.com> + + Reviewed by Sam Weinig. + + JSGlobalObject and some others do GC allocation during initialization, which can cause heap corruption + https://bugs.webkit.org/show_bug.cgi?id=61090 + + Remove the Structure-free JSGlobalObject constructor and instead always + pass the structure into the JSGlobalObject constructor. + Stop DebuggerActivation creating a new structure every time, and simply + use a single shared structure held by the GlobalData. + + * API/JSContextRef.cpp: + * debugger/DebuggerActivation.cpp: + (JSC::DebuggerActivation::DebuggerActivation): + * jsc.cpp: + (GlobalObject::GlobalObject): + (functionRun): + (jscmain): + * runtime/JSGlobalData.cpp: + (JSC::JSGlobalData::JSGlobalData): + (JSC::JSGlobalData::clearBuiltinStructures): + * runtime/JSGlobalData.h: + * runtime/JSGlobalObject.h: + +2011-05-18 Oliver Hunt <oliver@apple.com> + + Reviewed by Adam Roben. + + Disable gc validation in release builds + https://bugs.webkit.org/show_bug.cgi?id=60680 + + Add back the NDEBUG check + + * wtf/Platform.h: + +2011-05-17 Geoffrey Garen <ggaren@apple.com> + + Rolled out attempts to fix EFL build because they're not enough -- the + build script needs to be fixed. + + * runtime/BooleanPrototype.cpp: + * runtime/DateConstructor.cpp: + * runtime/ErrorPrototype.cpp: + +2011-05-17 Geoffrey Garen <ggaren@apple.com> + + More attempts to work around the EFL build system being borken. + + * runtime/DateConstructor.cpp: + * runtime/ErrorPrototype.cpp: + +2011-05-17 Geoffrey Garen <ggaren@apple.com> + + Try to fix the EFL build. + + * runtime/BooleanPrototype.cpp: + +2011-05-16 Geoffrey Garen <ggaren@apple.com> + + Rolling back in r86653 with build fixed. + + Reviewed by Gavin Barraclough and Oliver Hunt. + + Global object initialization is expensive + https://bugs.webkit.org/show_bug.cgi?id=60933 + + Changed a bunch of globals to allocate their properties lazily, and changed + the global object to allocate a bunch of its globals lazily. + + This reduces the footprint of a global object from 287 objects with 58 + functions for 24K to 173 objects with 20 functions for 15K. + + Large patch, but it's all mechanical. + + * DerivedSources.make: + * JavaScriptCore.exp: Build! + + * create_hash_table: Added a special case for fromCharCode, since it uses + a custom "thunk generator". + + * heap/Heap.cpp: + (JSC::TypeCounter::operator()): Fixed a bug where the type counter would + overcount objects that were owned through more than one mechanism because + it was getting in the way of counting the results for this patch. + + * interpreter/CallFrame.h: + (JSC::ExecState::arrayConstructorTable): + (JSC::ExecState::arrayPrototypeTable): + (JSC::ExecState::booleanPrototypeTable): + (JSC::ExecState::dateConstructorTable): + (JSC::ExecState::errorPrototypeTable): + (JSC::ExecState::globalObjectTable): + (JSC::ExecState::numberConstructorTable): + (JSC::ExecState::numberPrototypeTable): + (JSC::ExecState::objectPrototypeTable): + (JSC::ExecState::regExpPrototypeTable): + (JSC::ExecState::stringConstructorTable): Added new tables. + + * runtime/ArrayConstructor.cpp: + (JSC::ArrayConstructor::ArrayConstructor): + (JSC::ArrayConstructor::getOwnPropertySlot): + (JSC::ArrayConstructor::getOwnPropertyDescriptor): + * runtime/ArrayConstructor.h: + (JSC::ArrayConstructor::createStructure): + * runtime/ArrayPrototype.cpp: + (JSC::ArrayPrototype::getOwnPropertySlot): + (JSC::ArrayPrototype::getOwnPropertyDescriptor): + * runtime/ArrayPrototype.h: + * runtime/BooleanPrototype.cpp: + (JSC::BooleanPrototype::BooleanPrototype): + (JSC::BooleanPrototype::getOwnPropertySlot): + (JSC::BooleanPrototype::getOwnPropertyDescriptor): + * runtime/BooleanPrototype.h: + (JSC::BooleanPrototype::createStructure): + * runtime/DateConstructor.cpp: + (JSC::DateConstructor::DateConstructor): + (JSC::DateConstructor::getOwnPropertySlot): + (JSC::DateConstructor::getOwnPropertyDescriptor): + * runtime/DateConstructor.h: + (JSC::DateConstructor::createStructure): + * runtime/ErrorPrototype.cpp: + (JSC::ErrorPrototype::ErrorPrototype): + (JSC::ErrorPrototype::getOwnPropertySlot): + (JSC::ErrorPrototype::getOwnPropertyDescriptor): + * runtime/ErrorPrototype.h: + (JSC::ErrorPrototype::createStructure): Standardized these objects + to use static tables for function properties. + + * runtime/JSGlobalData.cpp: + (JSC::JSGlobalData::JSGlobalData): + (JSC::JSGlobalData::~JSGlobalData): + * runtime/JSGlobalData.h: Added new tables. + + * runtime/JSGlobalObject.cpp: + (JSC::JSGlobalObject::reset): + (JSC::JSGlobalObject::addStaticGlobals): + (JSC::JSGlobalObject::getOwnPropertySlot): + (JSC::JSGlobalObject::getOwnPropertyDescriptor): + * runtime/JSGlobalObject.h: + * runtime/JSGlobalObjectFunctions.cpp: + * runtime/JSGlobalObjectFunctions.h: Changed JSGlobalObject to use a + static table for its global functions. This required uninlining some + things to avoid a circular header dependency. However, those things + probably shouldn't have been inlined in the first place. + + Even more global object properties can be made lazy, but that requires + more in-depth changes. + + * runtime/MathObject.cpp: + * runtime/NumberConstructor.cpp: + (JSC::NumberConstructor::getOwnPropertySlot): + (JSC::NumberConstructor::getOwnPropertyDescriptor): + * runtime/NumberPrototype.cpp: + (JSC::NumberPrototype::NumberPrototype): + (JSC::NumberPrototype::getOwnPropertySlot): + (JSC::NumberPrototype::getOwnPropertyDescriptor): + * runtime/NumberPrototype.h: + (JSC::NumberPrototype::createStructure): + * runtime/ObjectPrototype.cpp: + (JSC::ObjectPrototype::ObjectPrototype): + (JSC::ObjectPrototype::put): + (JSC::ObjectPrototype::getOwnPropertySlot): + (JSC::ObjectPrototype::getOwnPropertyDescriptor): + * runtime/ObjectPrototype.h: + (JSC::ObjectPrototype::createStructure): + * runtime/RegExpPrototype.cpp: + (JSC::RegExpPrototype::RegExpPrototype): + (JSC::RegExpPrototype::getOwnPropertySlot): + (JSC::RegExpPrototype::getOwnPropertyDescriptor): + * runtime/RegExpPrototype.h: + (JSC::RegExpPrototype::createStructure): + * runtime/StringConstructor.cpp: + (JSC::StringConstructor::StringConstructor): + (JSC::StringConstructor::getOwnPropertySlot): + (JSC::StringConstructor::getOwnPropertyDescriptor): + * runtime/StringConstructor.h: + (JSC::StringConstructor::createStructure): Standardized these objects + to use static tables for function properties. + +2011-05-17 Sam Weinig <sam@webkit.org> + + Reviewed by Oliver Hunt. + + JSGlobalContextRelease should not trigger a synchronous garbage collection + https://bugs.webkit.org/show_bug.cgi?id=60990 + + * API/JSContextRef.cpp: + Change synchronous call to collectAllGarbage to a call to trigger the + activityCallback. + +2011-05-16 Oliver Hunt <oliver@apple.com> + + Reviewed by Gavin Barraclough. + + Reduce code size for inline cache + https://bugs.webkit.org/show_bug.cgi?id=60942 + + This patch introduces the concept of a "compact" address that + allows individual architectures to control the maximum offset + used for the inline path of get_by_id. This reduces the code + size of get_by_id by 3 bytes on x86 and x86_64 and slightly + improves performance on v8 tests. + + * assembler/ARMAssembler.h: + (JSC::ARMAssembler::repatchCompact): + * assembler/ARMv7Assembler.h: + (JSC::ARMv7Assembler::repatchCompact): + * assembler/AbstractMacroAssembler.h: + (JSC::AbstractMacroAssembler::DataLabelCompact::DataLabelCompact): + (JSC::AbstractMacroAssembler::differenceBetween): + (JSC::AbstractMacroAssembler::repatchCompact): + * assembler/CodeLocation.h: + (JSC::CodeLocationDataLabelCompact::CodeLocationDataLabelCompact): + (JSC::CodeLocationCommon::dataLabelCompactAtOffset): + * assembler/LinkBuffer.h: + (JSC::LinkBuffer::locationOf): + * assembler/MIPSAssembler.h: + (JSC::MIPSAssembler::repatchCompact): + * assembler/MacroAssembler.h: + (JSC::MacroAssembler::loadPtrWithCompactAddressOffsetPatch): + * assembler/MacroAssemblerARM.h: + (JSC::MacroAssemblerARM::load32WithCompactAddressOffsetPatch): + * assembler/MacroAssemblerARMv7.h: + (JSC::MacroAssemblerARMv7::load32WithCompactAddressOffsetPatch): + * assembler/MacroAssemblerMIPS.h: + (JSC::MacroAssemblerMIPS::load32WithCompactAddressOffsetPatch): + * assembler/MacroAssemblerSH4.h: + (JSC::MacroAssemblerSH4::load32WithAddressOffsetPatch): + * assembler/MacroAssemblerX86.h: + (JSC::MacroAssemblerX86::repatchCompact): + * assembler/MacroAssemblerX86Common.h: + (JSC::MacroAssemblerX86Common::loadCompactWithAddressOffsetPatch): + * assembler/MacroAssemblerX86_64.h: + (JSC::MacroAssemblerX86_64::loadPtrWithCompactAddressOffsetPatch): + * assembler/RepatchBuffer.h: + (JSC::RepatchBuffer::repatch): + * assembler/SH4Assembler.h: + (JSC::SH4Assembler::repatchCompact): + * assembler/X86Assembler.h: + (JSC::X86Assembler::movl_mr_disp8): + (JSC::X86Assembler::movq_mr_disp8): + (JSC::X86Assembler::repatchCompact): + (JSC::X86Assembler::setInt8): + (JSC::X86Assembler::X86InstructionFormatter::oneByteOp_disp8): + (JSC::X86Assembler::X86InstructionFormatter::oneByteOp64_disp8): + (JSC::X86Assembler::X86InstructionFormatter::memoryModRM): + * jit/JIT.h: + * jit/JITPropertyAccess.cpp: + (JSC::JIT::compileGetByIdHotPath): + (JSC::JIT::emit_op_put_by_id): + (JSC::JIT::patchGetByIdSelf): + * jit/JITPropertyAccess32_64.cpp: + (JSC::JIT::compileGetByIdHotPath): + (JSC::JIT::emit_op_put_by_id): + (JSC::JIT::patchGetByIdSelf): + * jit/JITStubs.cpp: + (JSC::JITThunks::tryCacheGetByID): + +2011-05-16 Sheriff Bot <webkit.review.bot@gmail.com> + + Unreviewed, rolling out r86653. + http://trac.webkit.org/changeset/86653 + https://bugs.webkit.org/show_bug.cgi?id=60944 + + "Caused regressions on Windows, OSX and EFL" (Requested by + yutak on #webkit). + + * DerivedSources.make: + * DerivedSources.pro: + * GNUmakefile.am: + * GNUmakefile.list.am: + * JavaScriptCore.exp: + * JavaScriptCore.gypi: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * create_hash_table: + * heap/Heap.cpp: + (JSC::TypeCounter::operator()): + * interpreter/CallFrame.h: + (JSC::ExecState::arrayTable): + (JSC::ExecState::numberTable): + * runtime/ArrayConstructor.cpp: + (JSC::ArrayConstructor::ArrayConstructor): + * runtime/ArrayConstructor.h: + * runtime/ArrayPrototype.cpp: + (JSC::ArrayPrototype::getOwnPropertySlot): + (JSC::ArrayPrototype::getOwnPropertyDescriptor): + * runtime/ArrayPrototype.h: + * runtime/BooleanPrototype.cpp: + (JSC::BooleanPrototype::BooleanPrototype): + * runtime/BooleanPrototype.h: + * runtime/DateConstructor.cpp: + (JSC::DateConstructor::DateConstructor): + * runtime/DateConstructor.h: + * runtime/ErrorPrototype.cpp: + (JSC::ErrorPrototype::ErrorPrototype): + * runtime/ErrorPrototype.h: + * runtime/JSGlobalData.cpp: + (JSC::JSGlobalData::JSGlobalData): + (JSC::JSGlobalData::~JSGlobalData): + * runtime/JSGlobalData.h: + * runtime/JSGlobalObject.cpp: + (JSC::JSGlobalObject::reset): + * runtime/JSGlobalObject.h: + (JSC::JSGlobalObject::addStaticGlobals): + (JSC::JSGlobalObject::getOwnPropertySlot): + (JSC::JSGlobalObject::getOwnPropertyDescriptor): + * runtime/JSGlobalObjectFunctions.cpp: + (JSC::globalFuncJSCPrint): + * runtime/JSGlobalObjectFunctions.h: + * runtime/MathObject.cpp: + * runtime/NumberConstructor.cpp: + (JSC::NumberConstructor::getOwnPropertySlot): + (JSC::NumberConstructor::getOwnPropertyDescriptor): + * runtime/NumberPrototype.cpp: + (JSC::NumberPrototype::NumberPrototype): + * runtime/NumberPrototype.h: + * runtime/ObjectPrototype.cpp: + (JSC::ObjectPrototype::ObjectPrototype): + (JSC::ObjectPrototype::put): + (JSC::ObjectPrototype::getOwnPropertySlot): + * runtime/ObjectPrototype.h: + * runtime/RegExpPrototype.cpp: + (JSC::RegExpPrototype::RegExpPrototype): + * runtime/RegExpPrototype.h: + * runtime/StringConstructor.cpp: + (JSC::StringConstructor::StringConstructor): + * runtime/StringConstructor.h: + +2011-05-16 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Geoffrey Garen. + + Global object initialization is expensive + https://bugs.webkit.org/show_bug.cgi?id=60933 + + Changed a bunch of globals to allocate their properties lazily, and changed + the global object to allocate a bunch of its globals lazily. + + This reduces the footprint of a global object from 287 objects with 58 + functions for 24K to 173 objects with 20 functions for 15K. + + Large patch, but it's all mechanical. + + * DerivedSources.make: + * JavaScriptCore.exp: Build! + + * create_hash_table: Added a special case for fromCharCode, since it uses + a custom "thunk generator". + + * heap/Heap.cpp: + (JSC::TypeCounter::operator()): Fixed a bug where the type counter would + overcount objects that were owned through more than one mechanism because + it was getting in the way of counting the results for this patch. + + * interpreter/CallFrame.h: + (JSC::ExecState::arrayConstructorTable): + (JSC::ExecState::arrayPrototypeTable): + (JSC::ExecState::booleanPrototypeTable): + (JSC::ExecState::dateConstructorTable): + (JSC::ExecState::errorPrototypeTable): + (JSC::ExecState::globalObjectTable): + (JSC::ExecState::numberConstructorTable): + (JSC::ExecState::numberPrototypeTable): + (JSC::ExecState::objectPrototypeTable): + (JSC::ExecState::regExpPrototypeTable): + (JSC::ExecState::stringConstructorTable): Added new tables. + + * runtime/ArrayConstructor.cpp: + (JSC::ArrayConstructor::ArrayConstructor): + (JSC::ArrayConstructor::getOwnPropertySlot): + (JSC::ArrayConstructor::getOwnPropertyDescriptor): + * runtime/ArrayConstructor.h: + (JSC::ArrayConstructor::createStructure): + * runtime/ArrayPrototype.cpp: + (JSC::ArrayPrototype::getOwnPropertySlot): + (JSC::ArrayPrototype::getOwnPropertyDescriptor): + * runtime/ArrayPrototype.h: + * runtime/BooleanPrototype.cpp: + (JSC::BooleanPrototype::BooleanPrototype): + (JSC::BooleanPrototype::getOwnPropertySlot): + (JSC::BooleanPrototype::getOwnPropertyDescriptor): + * runtime/BooleanPrototype.h: + (JSC::BooleanPrototype::createStructure): + * runtime/DateConstructor.cpp: + (JSC::DateConstructor::DateConstructor): + (JSC::DateConstructor::getOwnPropertySlot): + (JSC::DateConstructor::getOwnPropertyDescriptor): + * runtime/DateConstructor.h: + (JSC::DateConstructor::createStructure): + * runtime/ErrorPrototype.cpp: + (JSC::ErrorPrototype::ErrorPrototype): + (JSC::ErrorPrototype::getOwnPropertySlot): + (JSC::ErrorPrototype::getOwnPropertyDescriptor): + * runtime/ErrorPrototype.h: + (JSC::ErrorPrototype::createStructure): Standardized these objects + to use static tables for function properties. + + * runtime/JSGlobalData.cpp: + (JSC::JSGlobalData::JSGlobalData): + (JSC::JSGlobalData::~JSGlobalData): + * runtime/JSGlobalData.h: Added new tables. + + * runtime/JSGlobalObject.cpp: + (JSC::JSGlobalObject::reset): + (JSC::JSGlobalObject::addStaticGlobals): + (JSC::JSGlobalObject::getOwnPropertySlot): + (JSC::JSGlobalObject::getOwnPropertyDescriptor): + * runtime/JSGlobalObject.h: + * runtime/JSGlobalObjectFunctions.cpp: + * runtime/JSGlobalObjectFunctions.h: Changed JSGlobalObject to use a + static table for its global functions. This required uninlining some + things to avoid a circular header dependency. However, those things + probably shouldn't have been inlined in the first place. + + Even more global object properties can be made lazy, but that requires + more in-depth changes. + + * runtime/MathObject.cpp: + * runtime/NumberConstructor.cpp: + (JSC::NumberConstructor::getOwnPropertySlot): + (JSC::NumberConstructor::getOwnPropertyDescriptor): + * runtime/NumberPrototype.cpp: + (JSC::NumberPrototype::NumberPrototype): + (JSC::NumberPrototype::getOwnPropertySlot): + (JSC::NumberPrototype::getOwnPropertyDescriptor): + * runtime/NumberPrototype.h: + (JSC::NumberPrototype::createStructure): + * runtime/ObjectPrototype.cpp: + (JSC::ObjectPrototype::ObjectPrototype): + (JSC::ObjectPrototype::put): + (JSC::ObjectPrototype::getOwnPropertySlot): + (JSC::ObjectPrototype::getOwnPropertyDescriptor): + * runtime/ObjectPrototype.h: + (JSC::ObjectPrototype::createStructure): + * runtime/RegExpPrototype.cpp: + (JSC::RegExpPrototype::RegExpPrototype): + (JSC::RegExpPrototype::getOwnPropertySlot): + (JSC::RegExpPrototype::getOwnPropertyDescriptor): + * runtime/RegExpPrototype.h: + (JSC::RegExpPrototype::createStructure): + * runtime/StringConstructor.cpp: + (JSC::StringConstructor::StringConstructor): + (JSC::StringConstructor::getOwnPropertySlot): + (JSC::StringConstructor::getOwnPropertyDescriptor): + * runtime/StringConstructor.h: + (JSC::StringConstructor::createStructure): Standardized these objects + to use static tables for function properties. + +2011-05-16 David Kilzer <ddkilzer@apple.com> + + <http://webkit.org/b/60913> C++ exceptions should not be enabled when building with llvm-gcc-4.2 + <rdar://problem/9446430> + + Reviewed by Mark Rowe. + + * Configurations/Base.xcconfig: Fixed typo. + +2011-05-16 Oliver Hunt <oliver@apple.com> + + Reviewed by Geoffrey Garen. + + JSWeakObjectMap finalisation may occur while gc is in inconsistent state + https://bugs.webkit.org/show_bug.cgi?id=60908 + <rdar://problem/9409491> + + We need to ensure that we have called all the weak map finalizers while + the global object (and hence global context) is still in a consistent + state. The best way to achieve this is to simply use a weak handle and + finalizer on the global object. + + * JavaScriptCore.exp: + * runtime/JSGlobalObject.cpp: + (JSC::JSGlobalObject::WeakMapFinalizer::finalize): + * runtime/JSGlobalObject.h: + (JSC::JSGlobalObject::registerWeakMap): + +2011-05-16 Siddharth Mathur <siddharth.mathur@nokia.com> + + Reviewed by Laszlo Gombos. + + [Qt][WK2][Symbian] Shared memory implementation for Symbian + https://bugs.webkit.org/show_bug.cgi?id=55875 + + * wtf/Platform.h: Exclude Symbian OS from USE(UNIX_DOMAIN_SOCKETS) users + +2011-05-16 Gavin Barraclough <barraclough@apple.com> + + Rubber stamped by Geoff Garen. + + https://bugs.webkit.org/show_bug.cgi?id=60866 + Evaluation order broken for empty alternatives in subpatterns + + Reverting https://bugs.webkit.org/show_bug.cgi?id=51395 + + * yarr/YarrPattern.cpp: + (JSC::Yarr::YarrPatternConstructor::atomParenthesesEnd): + +2011-05-15 Gavin Barraclough <barraclough@apple.com> + + Reviewed by Geoff Garen & Michael Saboff. + + https://bugs.webkit.org/show_bug.cgi?id=60860 + Simplify backtracking in YARR JIT + + YARR JIT currently performs a single pass of code generation over the pattern, + with special handling to allow the code generation for some backtracking code + out of line. We can simplify things by moving to a common mechanism whereby all + forwards matching code is generated in one pass, and all backtracking code is + generated in another. Backtracking code can be generated in reverse order, to + optimized the common fall-through case. + + To make it easier to walk over the pattern, we can first convert to a more + byte-code like format before JIT generating. In time we should unify this with + the YARR interpreter to more closely unify the two. + + * yarr/YarrJIT.cpp: + (JSC::Yarr::YarrGenerator::jumpIfNoAvailableInput): + (JSC::Yarr::YarrGenerator::YarrOp::YarrOp): + (JSC::Yarr::YarrGenerator::BacktrackingState::BacktrackingState): + (JSC::Yarr::YarrGenerator::BacktrackingState::append): + (JSC::Yarr::YarrGenerator::BacktrackingState::fallthrough): + (JSC::Yarr::YarrGenerator::BacktrackingState::link): + (JSC::Yarr::YarrGenerator::BacktrackingState::linkTo): + (JSC::Yarr::YarrGenerator::BacktrackingState::takeBacktracksToJumpList): + (JSC::Yarr::YarrGenerator::BacktrackingState::isEmpty): + (JSC::Yarr::YarrGenerator::BacktrackingState::linkDataLabels): + (JSC::Yarr::YarrGenerator::BacktrackingState::ReturnAddressRecord::ReturnAddressRecord): + (JSC::Yarr::YarrGenerator::generateAssertionBOL): + (JSC::Yarr::YarrGenerator::backtrackAssertionBOL): + (JSC::Yarr::YarrGenerator::generateAssertionEOL): + (JSC::Yarr::YarrGenerator::backtrackAssertionEOL): + (JSC::Yarr::YarrGenerator::matchAssertionWordchar): + (JSC::Yarr::YarrGenerator::generateAssertionWordBoundary): + (JSC::Yarr::YarrGenerator::backtrackAssertionWordBoundary): + (JSC::Yarr::YarrGenerator::generatePatternCharacterOnce): + (JSC::Yarr::YarrGenerator::backtrackPatternCharacterOnce): + (JSC::Yarr::YarrGenerator::generatePatternCharacterFixed): + (JSC::Yarr::YarrGenerator::backtrackPatternCharacterFixed): + (JSC::Yarr::YarrGenerator::generatePatternCharacterGreedy): + (JSC::Yarr::YarrGenerator::backtrackPatternCharacterGreedy): + (JSC::Yarr::YarrGenerator::generatePatternCharacterNonGreedy): + (JSC::Yarr::YarrGenerator::backtrackPatternCharacterNonGreedy): + (JSC::Yarr::YarrGenerator::generateCharacterClassOnce): + (JSC::Yarr::YarrGenerator::backtrackCharacterClassOnce): + (JSC::Yarr::YarrGenerator::generateCharacterClassFixed): + (JSC::Yarr::YarrGenerator::backtrackCharacterClassFixed): + (JSC::Yarr::YarrGenerator::generateCharacterClassGreedy): + (JSC::Yarr::YarrGenerator::backtrackCharacterClassGreedy): + (JSC::Yarr::YarrGenerator::generateCharacterClassNonGreedy): + (JSC::Yarr::YarrGenerator::backtrackCharacterClassNonGreedy): + (JSC::Yarr::YarrGenerator::generateTerm): + (JSC::Yarr::YarrGenerator::backtrackTerm): + (JSC::Yarr::YarrGenerator::generate): + (JSC::Yarr::YarrGenerator::backtrack): + (JSC::Yarr::YarrGenerator::opCompileParenthesesSubpattern): + (JSC::Yarr::YarrGenerator::opCompileParentheticalAssertion): + (JSC::Yarr::YarrGenerator::opCompileAlternative): + (JSC::Yarr::YarrGenerator::opCompileBody): + (JSC::Yarr::YarrGenerator::YarrGenerator): + (JSC::Yarr::YarrGenerator::compile): + +2011-05-15 Adam Barth <abarth@webkit.org> + + Enable strict PassOwnPtr on Qt. (Build fixes to follow.) + + * wtf/PassOwnPtr.h: + +2011-05-15 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Maciej Stachowiak. + + Partial fix for <rdar://problem/9417875> REGRESSION: SunSpider ~17% slower + in browser than on command line + + This patch fixes a few issues in generated code that could unreasonably + prolong object lifetimes. + + * heap/Heap.cpp: + (JSC::Heap::collectAllGarbage): Throw away all function code before doing + a major collection. We want to clear polymorphic caches, since they can + keep alive large object graphs that have gone "stale". For the same reason, + but to a lesser extent, we also want to clear linked functions and other + one-off caches. + + This has the side-benefit of reducing memory footprint from run-once + functions, and of allowing predictions and caches that have failed to + re-specialize. + + Eventually, if compilation costs rise far enough, we may want a more + limited strategy for de-specializing code without throwing it away + completely, but this works for now, and it's the simplest solution. + + * jit/JITStubs.cpp: + (JSC::JITThunks::hostFunctionStub): + * jit/JITStubs.h: + * runtime/JSFunction.cpp: Made the host function stub cache weak -- + otherwise it's effectively a memory leak that can seriously fragment the + GC and JIT heaps. + + (JSC::JSFunction::JSFunction): + (JSC::JSFunction::visitChildren): Cleared up some comments that confused + me when working with this code. + +2011-05-13 Oliver Hunt <oliver@apple.com> + + Reviewed by Geoffrey Garen. + + Make GC validation more aggressive + https://bugs.webkit.org/show_bug.cgi?id=60802 + + This patch makes the checks performed under GC_VALIDATION + much more aggressive, and adds the checks to more places + in order to allow us to catch GC bugs much closer to the + point of failure. + + * JavaScriptCore.exp: + * JavaScriptCore.xcodeproj/project.pbxproj: + * debugger/DebuggerActivation.cpp: + (JSC::DebuggerActivation::visitChildren): + * heap/MarkedBlock.cpp: + (JSC::MarkedBlock::MarkedBlock): + * heap/MarkedSpace.cpp: + * runtime/Arguments.cpp: + (JSC::Arguments::visitChildren): + * runtime/Executable.cpp: + (JSC::EvalExecutable::visitChildren): + (JSC::ProgramExecutable::visitChildren): + (JSC::FunctionExecutable::visitChildren): + * runtime/Executable.h: + * runtime/GetterSetter.cpp: + (JSC::GetterSetter::visitChildren): + * runtime/GetterSetter.h: + * runtime/JSAPIValueWrapper.h: + (JSC::JSAPIValueWrapper::createStructure): + (JSC::JSAPIValueWrapper::JSAPIValueWrapper): + * runtime/JSActivation.cpp: + (JSC::JSActivation::visitChildren): + * runtime/JSArray.cpp: + (JSC::JSArray::visitChildren): + * runtime/JSCell.cpp: + (JSC::slowValidateCell): + * runtime/JSCell.h: + (JSC::JSCell::JSCell::unvalidatedStructure): + (JSC::JSCell::JSCell::JSCell): + * runtime/JSFunction.cpp: + (JSC::JSFunction::visitChildren): + * runtime/JSGlobalObject.cpp: + (JSC::JSGlobalObject::visitChildren): + (JSC::slowValidateCell): + * runtime/JSONObject.h: + * runtime/JSObject.cpp: + (JSC::JSObject::visitChildren): + * runtime/JSPropertyNameIterator.cpp: + (JSC::JSPropertyNameIterator::visitChildren): + * runtime/JSPropertyNameIterator.h: + * runtime/JSStaticScopeObject.cpp: + (JSC::JSStaticScopeObject::visitChildren): + * runtime/JSString.h: + (JSC::RopeBuilder::JSString): + * runtime/JSWrapperObject.cpp: + (JSC::JSWrapperObject::visitChildren): + * runtime/NativeErrorConstructor.cpp: + (JSC::NativeErrorConstructor::visitChildren): + * runtime/PropertyMapHashTable.h: + (JSC::PropertyMapEntry::PropertyMapEntry): + * runtime/RegExpObject.cpp: + (JSC::RegExpObject::visitChildren): + * runtime/ScopeChain.cpp: + (JSC::ScopeChainNode::visitChildren): + * runtime/ScopeChain.h: + (JSC::ScopeChainNode::ScopeChainNode): + * runtime/Structure.cpp: + (JSC::Structure::Structure): + (JSC::Structure::addPropertyTransition): + (JSC::Structure::visitChildren): + * runtime/Structure.h: + (JSC::JSCell::classInfo): + * runtime/StructureChain.cpp: + (JSC::StructureChain::visitChildren): + * runtime/StructureChain.h: + * runtime/WriteBarrier.h: + (JSC::validateCell): + (JSC::JSCell): + (JSC::JSGlobalObject): + (JSC::WriteBarrierBase::set): + (JSC::WriteBarrierBase::setMayBeNull): + (JSC::WriteBarrierBase::setEarlyValue): + (JSC::WriteBarrierBase::get): + (JSC::WriteBarrierBase::operator*): + (JSC::WriteBarrierBase::operator->): + (JSC::WriteBarrierBase::unvalidatedGet): + (JSC::WriteBarrier::WriteBarrier): + * wtf/Assertions.h: + +2011-05-13 Oliver Hunt <oliver@apple.com> + + Reviewed by Geoffrey Garen. + + Make GC validation more aggressive + https://bugs.webkit.org/show_bug.cgi?id=60802 + + This patch makes the checks performed under GC_VALIDATION + much more aggressive, and adds the checks to more places + in order to allow us to catch GC bugs much closer to the + point of failure. + + * JavaScriptCore.exp: + * JavaScriptCore.xcodeproj/project.pbxproj: + * debugger/DebuggerActivation.cpp: + (JSC::DebuggerActivation::visitChildren): + * heap/MarkedBlock.cpp: + (JSC::MarkedBlock::MarkedBlock): + * heap/MarkedSpace.cpp: + * runtime/Arguments.cpp: + (JSC::Arguments::visitChildren): + * runtime/Executable.cpp: + (JSC::EvalExecutable::visitChildren): + (JSC::ProgramExecutable::visitChildren): + (JSC::FunctionExecutable::visitChildren): + * runtime/Executable.h: + * runtime/GetterSetter.cpp: + (JSC::GetterSetter::visitChildren): + * runtime/GetterSetter.h: + * runtime/JSAPIValueWrapper.h: + (JSC::JSAPIValueWrapper::createStructure): + (JSC::JSAPIValueWrapper::JSAPIValueWrapper): + * runtime/JSActivation.cpp: + (JSC::JSActivation::visitChildren): + * runtime/JSArray.cpp: + (JSC::JSArray::visitChildren): + * runtime/JSCell.cpp: + (JSC::slowValidateCell): + * runtime/JSCell.h: + (JSC::JSCell::JSCell::unvalidatedStructure): + (JSC::JSCell::JSCell::JSCell): + * runtime/JSFunction.cpp: + (JSC::JSFunction::visitChildren): + * runtime/JSGlobalObject.cpp: + (JSC::JSGlobalObject::visitChildren): + (JSC::slowValidateCell): + * runtime/JSONObject.h: + * runtime/JSObject.cpp: + (JSC::JSObject::visitChildren): + * runtime/JSPropertyNameIterator.cpp: + (JSC::JSPropertyNameIterator::visitChildren): + * runtime/JSPropertyNameIterator.h: + * runtime/JSStaticScopeObject.cpp: + (JSC::JSStaticScopeObject::visitChildren): + * runtime/JSString.h: + (JSC::RopeBuilder::JSString): + * runtime/JSWrapperObject.cpp: + (JSC::JSWrapperObject::visitChildren): + * runtime/NativeErrorConstructor.cpp: + (JSC::NativeErrorConstructor::visitChildren): + * runtime/PropertyMapHashTable.h: + (JSC::PropertyMapEntry::PropertyMapEntry): + * runtime/RegExpObject.cpp: + (JSC::RegExpObject::visitChildren): + * runtime/ScopeChain.cpp: + (JSC::ScopeChainNode::visitChildren): + * runtime/ScopeChain.h: + (JSC::ScopeChainNode::ScopeChainNode): + * runtime/Structure.cpp: + (JSC::Structure::Structure): + (JSC::Structure::addPropertyTransition): + (JSC::Structure::visitChildren): + * runtime/Structure.h: + (JSC::JSCell::classInfo): + * runtime/StructureChain.cpp: + (JSC::StructureChain::visitChildren): + * runtime/StructureChain.h: + * runtime/WriteBarrier.h: + (JSC::validateCell): + (JSC::JSCell): + (JSC::JSGlobalObject): + (JSC::WriteBarrierBase::set): + (JSC::WriteBarrierBase::setMayBeNull): + (JSC::WriteBarrierBase::setEarlyValue): + (JSC::WriteBarrierBase::get): + (JSC::WriteBarrierBase::operator*): + (JSC::WriteBarrierBase::operator->): + (JSC::WriteBarrierBase::unvalidatedGet): + (JSC::WriteBarrier::WriteBarrier): + * wtf/Assertions.h: + +2011-05-14 Csaba Osztrogonác <ossy@webkit.org> + + Unreviewed, rolling out r86469 and r86471, because they made hundreds tests crash on Qt. + + Make GC validation more aggressive + https://bugs.webkit.org/show_bug.cgi?id=60802 + + * JavaScriptCore.exp: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * JavaScriptCore.xcodeproj/project.pbxproj: + * debugger/DebuggerActivation.cpp: + (JSC::DebuggerActivation::visitChildren): + * heap/MarkedBlock.cpp: + (JSC::MarkedBlock::MarkedBlock): + * heap/MarkedSpace.cpp: + * runtime/Arguments.cpp: + (JSC::Arguments::visitChildren): + * runtime/Executable.cpp: + (JSC::EvalExecutable::visitChildren): + (JSC::ProgramExecutable::visitChildren): + (JSC::FunctionExecutable::visitChildren): + * runtime/Executable.h: + (JSC::ProgramExecutable::createStructure): + (JSC::FunctionExecutable::createStructure): + * runtime/GetterSetter.cpp: + (JSC::GetterSetter::visitChildren): + * runtime/GetterSetter.h: + (JSC::GetterSetter::createStructure): + * runtime/JSAPIValueWrapper.h: + (JSC::JSAPIValueWrapper::createStructure): + * runtime/JSActivation.cpp: + (JSC::JSActivation::visitChildren): + * runtime/JSArray.cpp: + (JSC::JSArray::visitChildren): + * runtime/JSCell.cpp: + * runtime/JSCell.h: + (JSC::JSCell::JSCell::JSCell): + * runtime/JSFunction.cpp: + (JSC::JSFunction::visitChildren): + * runtime/JSGlobalObject.cpp: + (JSC::JSGlobalObject::visitChildren): + * runtime/JSONObject.h: + (JSC::JSONObject::createStructure): + * runtime/JSObject.cpp: + (JSC::JSObject::visitChildren): + * runtime/JSPropertyNameIterator.cpp: + (JSC::JSPropertyNameIterator::visitChildren): + * runtime/JSPropertyNameIterator.h: + * runtime/JSStaticScopeObject.cpp: + (JSC::JSStaticScopeObject::visitChildren): + * runtime/JSString.h: + (JSC::RopeBuilder::createStructure): + * runtime/JSWrapperObject.cpp: + (JSC::JSWrapperObject::visitChildren): + * runtime/NativeErrorConstructor.cpp: + (JSC::NativeErrorConstructor::visitChildren): + * runtime/PropertyMapHashTable.h: + (JSC::PropertyMapEntry::PropertyMapEntry): + * runtime/RegExpObject.cpp: + (JSC::RegExpObject::visitChildren): + * runtime/ScopeChain.cpp: + (JSC::ScopeChainNode::visitChildren): + * runtime/ScopeChain.h: + (JSC::ScopeChainNode::ScopeChainNode): + * runtime/Structure.cpp: + (JSC::Structure::Structure): + (JSC::Structure::addPropertyTransition): + (JSC::Structure::visitChildren): + * runtime/Structure.h: + (JSC::Structure::createStructure): + (JSC::JSCell::classInfo): + * runtime/StructureChain.cpp: + (JSC::StructureChain::visitChildren): + * runtime/StructureChain.h: + * runtime/WriteBarrier.h: + (JSC::WriteBarrierBase::set): + (JSC::WriteBarrierBase::get): + (JSC::WriteBarrierBase::operator*): + (JSC::WriteBarrierBase::operator->): + (JSC::WriteBarrier::WriteBarrier): + * wtf/Assertions.h: + +2011-05-13 Oliver Hunt <oliver@apple.com> + + Reviewed by Geoffrey Garen. + + Make GC validation more aggressive + https://bugs.webkit.org/show_bug.cgi?id=60802 + + This patch makes the checks performed under GC_VALIDATION + much more aggressive, and adds the checks to more places + in order to allow us to catch GC bugs much closer to the + point of failure. + + * JavaScriptCore.exp: + * JavaScriptCore.xcodeproj/project.pbxproj: + * debugger/DebuggerActivation.cpp: + (JSC::DebuggerActivation::visitChildren): + * heap/MarkedBlock.cpp: + (JSC::MarkedBlock::MarkedBlock): + * heap/MarkedSpace.cpp: + * runtime/Arguments.cpp: + (JSC::Arguments::visitChildren): + * runtime/Executable.cpp: + (JSC::EvalExecutable::visitChildren): + (JSC::ProgramExecutable::visitChildren): + (JSC::FunctionExecutable::visitChildren): + * runtime/Executable.h: + * runtime/GetterSetter.cpp: + (JSC::GetterSetter::visitChildren): + * runtime/GetterSetter.h: + * runtime/JSAPIValueWrapper.h: + (JSC::JSAPIValueWrapper::createStructure): + (JSC::JSAPIValueWrapper::JSAPIValueWrapper): + * runtime/JSActivation.cpp: + (JSC::JSActivation::visitChildren): + * runtime/JSArray.cpp: + (JSC::JSArray::visitChildren): + * runtime/JSCell.cpp: + (JSC::slowValidateCell): + * runtime/JSCell.h: + (JSC::JSCell::JSCell::unvalidatedStructure): + (JSC::JSCell::JSCell::JSCell): + * runtime/JSFunction.cpp: + (JSC::JSFunction::visitChildren): + * runtime/JSGlobalObject.cpp: + (JSC::JSGlobalObject::visitChildren): + (JSC::slowValidateCell): + * runtime/JSONObject.h: + * runtime/JSObject.cpp: + (JSC::JSObject::visitChildren): + * runtime/JSPropertyNameIterator.cpp: + (JSC::JSPropertyNameIterator::visitChildren): + * runtime/JSPropertyNameIterator.h: + * runtime/JSStaticScopeObject.cpp: + (JSC::JSStaticScopeObject::visitChildren): + * runtime/JSString.h: + (JSC::RopeBuilder::JSString): + * runtime/JSWrapperObject.cpp: + (JSC::JSWrapperObject::visitChildren): + * runtime/NativeErrorConstructor.cpp: + (JSC::NativeErrorConstructor::visitChildren): + * runtime/PropertyMapHashTable.h: + (JSC::PropertyMapEntry::PropertyMapEntry): + * runtime/RegExpObject.cpp: + (JSC::RegExpObject::visitChildren): + * runtime/ScopeChain.cpp: + (JSC::ScopeChainNode::visitChildren): + * runtime/ScopeChain.h: + (JSC::ScopeChainNode::ScopeChainNode): + * runtime/Structure.cpp: + (JSC::Structure::Structure): + (JSC::Structure::addPropertyTransition): + (JSC::Structure::visitChildren): + * runtime/Structure.h: + (JSC::JSCell::classInfo): + * runtime/StructureChain.cpp: + (JSC::StructureChain::visitChildren): + * runtime/StructureChain.h: + * runtime/WriteBarrier.h: + (JSC::validateCell): + (JSC::JSCell): + (JSC::JSGlobalObject): + (JSC::WriteBarrierBase::set): + (JSC::WriteBarrierBase::setMayBeNull): + (JSC::WriteBarrierBase::setEarlyValue): + (JSC::WriteBarrierBase::get): + (JSC::WriteBarrierBase::operator*): + (JSC::WriteBarrierBase::operator->): + (JSC::WriteBarrierBase::unvalidatedGet): + (JSC::WriteBarrier::WriteBarrier): + * wtf/Assertions.h: + +2011-05-01 Holger Hans Peter Freyther <holger@moiji-mobile.com> + + Reviewed by Steve Block. + + [android] OS(ANDROID) does not imply PLATFORM(ANDROID) + https://bugs.webkit.org/show_bug.cgi?id=59888 + + It is possible to build QtWebKit and others for OS(ANDROID). Let + the buildsystem decide which platform is to be build. + + * wtf/Platform.h: + +2011-05-12 Maciej Stachowiak <mjs@apple.com> + + Reviewed by Darin Adler. + + XMLDocumentParserLibxml2 should play nice with strict OwnPtrs + https://bugs.webkit.org/show_bug.cgi?id=59394 + + This portion of the change introduces a PassTraits template, which + is used to enable takeFirst() to work for a Deque holding OwnPtrs, + and optimize it for a Deque holding RefPtrs. In the future it can + be deployed elsewhere to make our data structures work better with + our smart pointers. + + * GNUmakefile.list.am: + * JavaScriptCore.gypi: + * JavaScriptCore.vcproj/WTF/WTF.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * wtf/CMakeLists.txt: + * wtf/Deque.h: + (WTF::::takeFirst): + * wtf/PassTraits.h: Added. + (WTF::PassTraits::transfer): + +2011-05-12 Nikolas Zimmermann <nzimmermann@rim.com> + + Not reviewed. + + Revert r86334, it broke the win build. WinCE build is fixed even without this patch. WinCairo remains broken atm, everything else works. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + +2011-05-12 Nikolas Zimmermann <nzimmermann@rim.com> + + Not reviewed. + + String operator+ reallocates unnecessarily when concatting > 2 strings + https://bugs.webkit.org/show_bug.cgi?id=58420 + + Try to fix WinCE/WinCairo linking by exporting three symbols, not sure whether it's correct though. Win worked just fine before. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + +2011-05-12 Nikolas Zimmermann <nzimmermann@rim.com> + + Reviewed by Darin Adler. + + String operator+ reallocates unnecessarily when concatting > 2 strings + https://bugs.webkit.org/show_bug.cgi?id=58420 + + Provide a faster String append operator. + Up until now, "String operator+(const String& a, const String& b)" copied String a into a temporary + object, and used a.append(b), which reallocates a new buffer of aLength+bLength. When concatting + N strings using operator+, this leads to N-1 reallocations. + + Replace this with a flexible operator+ implementation, that avoids these reallocations. + When concatting a 'String' with any string type (char*, UChar, Vector<char>, String, AtomicString, etc..) + a StringAppend<String, T> object is created, which holds the intermediate string objects, and delays + creation of the final string, until operator String() is invoked. + + template<typename T> + StringAppend<String, T> operator+(const String& string1, T string2) + { + return StringAppend<String, T>(string1, string2); + } + + template<typename U, typename V, typename W> + StringAppend<U, StringAppend<V, W> > operator+(U string1, const StringAppend<V, W>& string2) + { + return StringAppend<U, StringAppend<V, W> >(string1, string2); + } + + When concatting three strings - "String a, b, c; String result = a + b + c;" following happens: + first a StringAppend<String, String> object is created by operator+(const String& string1, String string2). + Then operator+(String string1, const StringAppend<String, String>& string2) is invoked, which returns + a StringAppend<String, StringAppend<String, String> > object. + Then operator String() is invoked, which allocates a StringImpl object, once, large enough to hold the + final string - it uses tryMakeString provided by StringConcatenate.h under the hoods, which guards us + against too big string allocations, etc. + + Note that the second template, defines a recursive way to concat an arbitary number of strings + into a single String with just one allocation. + + * GNUmakefile.list.am: Add StringOperators.h to build. + * JavaScriptCore.exp: Export WTF::emptyString(). Remove no longer needed symbols. + * JavaScriptCore.gypi: Add StringOperators.h to build. + * JavaScriptCore.vcproj/WTF/WTF.vcproj: Ditto. + * JavaScriptCore.xcodeproj/project.pbxproj: Ditto. + * wtf/text/AtomicString.h: Pull in StringConcatenate.h at the end of the file. + * wtf/text/StringConcatenate.h: Conditionally include AtomicString.h to avoid a cyclic dependency. Pull in StringOperators.h at the end of the file. + * wtf/text/StringOperators.h: Added. This is never meant to be included directly, including either WTFString.h or AtomicString.h automatically pulls in this file. + (WTF::StringAppend::StringAppend): + (WTF::StringAppend::operator String): + (WTF::StringAppend::operator AtomicString): + (WTF::StringAppend::writeTo): + (WTF::StringAppend::length): + (WTF::operator+): + * wtf/text/WTFString.cpp: Remove operator+ implementations that use String::append(). + (WTF::emptyString): Add new shared empty string free function. + * wtf/text/WTFString.h: Replace operator+ implementations by StringAppend template solution. Pull in AtomicString.h at the end of the file. + +2011-05-12 Philippe Normand <pnormand@igalia.com> + + Unreviewed, GTK build fix. + + * wtf/Platform.h: + +2011-05-12 Keith Kyzivat <keith.kyzivat@nokia.com> + + Reviewed by Csaba Osztrogonác. + + [Qt] Arm debug build failing on ARMAssembler::debugOffset() + https://bugs.webkit.org/show_bug.cgi?id=60688 + + Related to svn rev 85523 + + * assembler/ARMAssembler.h: + (JSC::ARMAssembler::debugOffset): + +2011-05-11 Igor Oliveira <igor.oliveira@openbossa.org> + + Reviewed by Eric Seidel. + + WebKit does not build with GCCE + https://bugs.webkit.org/show_bug.cgi?id=60667 + + Allow compile WebKit with GCCE + + * wtf/Alignment.h: + * wtf/Platform.h: + +2011-05-11 Adam Barth <abarth@webkit.org> + + Reviewed by Eric Seidel. + + Enable strict PassOwnPtr on Mac + https://bugs.webkit.org/show_bug.cgi?id=60684 + + This should build cleanly now. + + * wtf/PassOwnPtr.h: + +2011-05-11 Oliver Hunt <oliver@apple.com> + + Reviewed by Darin Adler. + + Protect JSC from WebCore executing JS during JS wrapper finalization + https://bugs.webkit.org/show_bug.cgi?id=60672 + <rdar://problem/9350997> + + Detect when we're trying to execute JS during GC and prevent the + execution from happening. We also assert that this isn't happening + as it implies incorrect behaviour of an object's destructor. + + * JavaScriptCore.exp: + * heap/Heap.cpp: + * heap/Heap.h: + (JSC::Heap::isBusy): + * interpreter/Interpreter.cpp: + (JSC::Interpreter::execute): + (JSC::Interpreter::executeCall): + (JSC::Interpreter::executeConstruct): + * runtime/JSGlobalData.h: + (JSC::JSGlobalData::isCollectorBusy): + +2011-05-11 Oliver Hunt <oliver@apple.com> + + Reviewed by Gavin Barraclough. + + Enable gc mark validation in temporarily in release builds + https://bugs.webkit.org/show_bug.cgi?id=60678 + + Make it easier to turn the gc mark validation on and off, and + temporarily turn it on for all builds. + + * heap/MarkStack.cpp: + * heap/MarkStack.h: + (JSC::MarkStack::append): + (JSC::MarkStack::internalAppend): + * runtime/WriteBarrier.h: + (JSC::MarkStack::appendValues): + * wtf/Platform.h: + +2011-05-11 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Oliver Hunt. + + <rdar://problem/9331651> REGRESSION: RPRVT grows by 1MB / sec @ dvd2blu.com + + SunSpider reports no change. + + This bug was caused by changing Structure and Executable to being GC + objects, and by a long-standing bug that would thrash the global object + between dictionary and non-dictionary states. + + * runtime/BatchedTransitionOptimizer.h: + (JSC::BatchedTransitionOptimizer::BatchedTransitionOptimizer): Don't + eagerly transition to dictionary -- this can cause pathological dictionary + churn, and it's not necessary, since objects know how to automatically + transition to dictionary when necessary. + + * runtime/Executable.cpp: + (JSC::EvalExecutable::compileInternal): + (JSC::ProgramExecutable::compileInternal): + (JSC::FunctionExecutable::compileForCallInternal): + (JSC::FunctionExecutable::compileForConstructInternal): Be sure to report + extra cost from compilation, because it can be quite high. This is especially + important for program code, since DOM timers can repeatedly allocate + program code without allocating any other objects. + + * runtime/JSObject.cpp: + (JSC::JSObject::removeDirect): Don't transition to the uncacheable state + if the thing we're trying to remove doesn't exist. This can happen during + compilation, since the compiler needs to ensure that no pre-existing + conflicting definitions exist for certain declarations. + +2011-05-11 Oliver Hunt <oliver@apple.com> + + Reviewed by Gavin Barraclough. + + Make mark stack validation functions do something useful in a release build + https://bugs.webkit.org/show_bug.cgi?id=60645 + + Turn ASSERTs into actual if(...) CRASH(); statements. + + * heap/MarkStack.cpp: + (JSC::MarkStack::validateValue): + +2011-05-11 Xan Lopez <xlopez@igalia.com> + + Reviewed by Martin Robinson. + + Fix copy&paste error in comment. + + * jit/JITPropertyAccess.cpp: + (JSC::JIT::stringGetByValStubGenerator): the value is stored in + regT2, not regT1. + +2011-05-11 Adam Roben <aroben@apple.com> + + WinCE build fixes for strict PassOwnPtr + + * wtf/unicode/CollatorDefault.cpp: + (WTF::Collator::userDefault): Use adoptPtr. + +2011-05-11 Holger Hans Peter Freyther <holger@moiji-mobile.com> + + Unreviewed build fix. + + [MIPS] Fix compilation of the MIPS JIT + + Include the MIPSAssembler.h first to indirectly include + AssemblerBuffer.h before the AbstractMacroAssembler.h. This + order is used for the ARM and X86 MacroAssembler*.h + + * assembler/MacroAssemblerMIPS.h: + +2011-05-11 Adam Roben <aroben@apple.com> + + Turn on strict PassOwnPtr on Windows + + Fixes <http://webkit.org/b/60632> Windows should build with strict PassOwnPtr enabled + + Reviewed by Adam Barth. + + * wtf/PassOwnPtr.h: + +2011-05-10 Stephanie Lewis <slewis@apple.com> + + Unreviewed. + + Revert accidental JavaScriptCore change in http://trac.webkit.org/changeset/86130 + + * Configurations/JavaScriptCore.xcconfig: + +2011-05-10 Adam Barth <abarth@webkit.org> + + Reviewed by David Levin. + + Enable strict PassOwnPtr on Chromium + https://bugs.webkit.org/show_bug.cgi?id=60502 + + Other platforms to follow. + + * wtf/PassOwnPtr.h: + +2011-05-10 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Darin Adler. + + Fixed up some #include dependencies so the WriteBarrier class can actually call Heap::writeBarrier + https://bugs.webkit.org/show_bug.cgi?id=60532 + + * GNUmakefile.list.am: + * JavaScriptCore.gypi: + * JavaScriptCore.xcodeproj/project.pbxproj: Build! + + * heap/Handle.h: Moved HandleTypes to its own header because that's the + WebKit style, and it was necessary to resolve a circular dependency + between Handle.h and WriteBarrier.h. + + * heap/Heap.h: + (JSC::Heap::writeBarrier): Added an inline no-op writeBarrier(), to + verify that all the code is in the right place. + + * heap/MarkStack.h: Moved WriteBarrier operations to WriteBarrier.h to + resolve a circular dependency. + + * runtime/ArgList.h: + * runtime/JSCell.h: #include WriteBarrier.h since we don't get it for + free anymore. + + * runtime/PropertyMapHashTable.h: + (JSC::PropertyTable::PropertyTable): Call the real writeBarrier() + function, now that it exists. + + * runtime/SmallStrings.h: Removed a stray #include to resolve a circular + dependency. + + * runtime/WriteBarrier.h: + (JSC::WriteBarrierBase::set): + (JSC::MarkStack::append): + (JSC::MarkStack::appendValues): Updated to match the changes above. + +2011-05-10 Oliver Hunt <oliver@apple.com> + + Build fix. + + * heap/MarkStack.cpp: + (JSC::MarkStack::validateValue): + +2011-05-10 Oliver Hunt <oliver@apple.com> + + Reviewed by Gavin Barraclough. + + Add some aggressive GC validation to debug builds. + https://bugs.webkit.org/show_bug.cgi?id=60601 + + When assertions are enabled we now do some validity checking + of objects being added to the mark stack. + + * bytecode/Instruction.h: + (JSC::PolymorphicAccessStructureList::PolymorphicStubInfo::PolymorphicStubInfo): + (JSC::PolymorphicAccessStructureList::visitAggregate): + * heap/MarkStack.cpp: + (JSC::MarkStack::validateSet): + (JSC::MarkStack::validateValue): + * heap/MarkStack.h: + (JSC::MarkStack::appendValues): + (JSC::MarkStack::append): + (JSC::MarkStack::internalAppend): + +2011-05-09 Darin Adler <darin@apple.com> + + Reviewed by Oliver Hunt. + + http://bugs.webkit.org/show_bug.cgi?id=60509 + Wrong type used for return value from strlen + + * wtf/FastMalloc.cpp: + (WTF::fastStrDup): Use size_t. Also don't bother checking for failure since + fastMalloc won't return if it fails. + +2011-05-09 Adam Barth <abarth@webkit.org> + + Reviewed by Eric Seidel. + + CSP should block Function constructor + https://bugs.webkit.org/show_bug.cgi?id=60240 + + When eval is disabled, we need to block the use of the function + constructor. However, the WebCore JSC bindings call the function + constructor directly to create inline event listeners. To support that + use, this patch adds an entrypoint that bypasses the check for whether + eval is enabled. + + * JavaScriptCore.exp: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * runtime/FunctionConstructor.cpp: + (JSC::constructFunction): + (JSC::constructFunctionSkippingEvalEnabledCheck): + * runtime/FunctionConstructor.h: + +2011-05-09 Adam Roben <aroben@apple.com> + + Automatically touch WebKit.idl whenever any other WebKit1 IDL file changes + + Fixes <http://webkit.org/b/60468> WebKit.idl needs to be manually touched whenever any other + WebKit1 IDL file changes to avoid build errors + + Reviewed by Tim Hatcher. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.make: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.vcproj: + Updated for script rename. + + * JavaScriptCore.vcproj/JavaScriptCore/react-to-vsprops-changes.py: Removed. + * JavaScriptCore.vcproj/JavaScriptCore/work-around-vs-dependency-tracking-bugs.py: Renamed + from react-to-vsprops-changes.py. + (top level): Moved a constant here from main. + (main): Moved most code from here to react_to_vsprops_changes. Added a call to the new + react_to_webkit1_interface_changes function. + (react_to_vsprops_changes): Moved code here from main. Updated to use the + TOP_LEVEL_DIRECTORY global. Moved some code from here to mtime_of_newest_file_matching_globa + and touch_if_older_than. + (react_to_webkit1_interface_changes): Added. Touches WebKit.idl if any other WebKit1 IDL + file has changed. + (mtime_of_newest_file_matching_glob): Added. Code came from main. + (touch_if_older_than): Added. Code came from main. + +2011-05-08 Jessie Berlin <jberlin@apple.com> + + Reviewed by Dan Bernstein. + + Make JSRetainPtr work with JSGlobalContextRefs. + https://bugs.webkit.org/show_bug.cgi?id=60452 + + Add specialized functions for JSRetain and JSRelease when dealing with JSGlobalContextRefs. + + * API/JSRetainPtr.h: + (JSRetain): + (JSRelease): + +2011-05-07 Dawit Alemayehu <adawit@kde.org> + + Reviewed by Daniel Bates. + + Fix compile with GCC 4.6.0 + https://bugs.webkit.org/show_bug.cgi?id=60380 + + Remove unused local variable from code. + + * runtime/StringPrototype.cpp: + (JSC::stringProtoFuncMatch): + +2011-05-06 Alexis Menard <alexis.menard@openbossa.org> + + Unreviewed build fix with gcc 4.6.0 on linux and c++0x support. + + std::tr1::has_trivial_constructor is in <tr1/memory>. + + * wtf/TypeTraits.h: + +2011-05-05 Jay Civelli <jcivelli@chromium.org> + + Reviewed by Adam Barth. + + Added convenience methods to convert from a byte to hex ASCII digit + characters and vice-versa. + https://bugs.webkit.org/show_bug.cgi?id=59834 + + * wtf/ASCIICType.h: + (WTF::toASCIIHexValue): + (WTF::lowerNibbleToASCIIHexDigit): + (WTF::upperNibbleToASCIIHexDigit): + +2011-05-05 Alexis Menard <alexis.menard@openbossa.org> + + Reviewed by Benjamin Poulain. + + [Qt] Make QtWebKit build when using gcc 4.6.0 + https://bugs.webkit.org/show_bug.cgi?id=60265 + + If QtWebKit is compiled with gcc 4.6.0 or later we don't want to deactivate + the c++0x support because it works. + + * JavaScriptCore.pro: + +2011-05-04 Fridrich Strba <fridrich.strba@bluewin.ch> + + Reviewed by Geoffrey Garen. + + Port MachineStackMarker.cpp to Windows x64 + https://bugs.webkit.org/show_bug.cgi?id=60216 + + * heap/MachineStackMarker.cpp: + (JSC::getPlatformThreadRegisters): the CONTEXT struct is usable also + on 64-bit Windows. + (JSC::otherThreadStackPointer): return the Rsp register on Windows x64. + +2011-05-04 Fridrich Strba <fridrich.strba@bluewin.ch> + + Reviewed by Martin Robinson. + + Link libjavascriptcoregtk on Windows with winmm.dll + https://bugs.webkit.org/show_bug.cgi?id=60215 + + * GNUmakefile.am: + +2011-05-04 Tao Bai <michaelbai@chromium.org> + + Reviewed by David Kilzer. + + Populate touch-icon url to FrameLoaderClient + https://bugs.webkit.org/show_bug.cgi?id=59143 + + * Configurations/FeatureDefines.xcconfig: + +2011-05-03 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Darin Adler. + + <rdar://problem/9366557> Various crashes due to bad DFG codegen at canalplus.fr + + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::checkArgumentTypes): Removed a stray line of + code that accidentally survived the conversion to a switch statement, + causing a lot of important code not to run most of the time. + + Since this is not a trivial finger-picking mistake, I will not call it a + typo. + +2011-05-04 Adam Roben <aroben@apple.com> + + Another attempted build fix + + * wtf/OwnPtr.h: + (WTF::OwnPtr::operator==): + (WTF::OwnPtr::operator!=): + * wtf/PassOwnPtr.h: + (WTF::PassOwnPtr::operator==): + (WTF::PassOwnPtr::operator!=): + Added a return statement. And made a tweak based on a suggestion from Anders Carlsson. + +2011-05-04 Adam Roben <aroben@apple.com> + + Try to fix Leopard, Qt, and probably others + + * wtf/OwnPtr.h: + (WTF::OwnPtr::operator==): + (WTF::OwnPtr::operator!=): + * wtf/PassOwnPtr.h: + (WTF::PassOwnPtr::operator==): + (WTF::PassOwnPtr::operator!=): + Try to get the compiler not to instantiate these function templates unnecessarily. + +2011-05-03 Adam Roben <aroben@apple.com> + + Disallow equality comparisons between [Pass]OwnPtrs + + If you have two OwnPtrs that are equal, you've already lost. (Unless you're doing something + really sneaky, in which case you should stop!) + + Fixes <http://webkit.org/b/60053> Testing OwnPtrs for equality should cause a compiler error + + Reviewed by Anders Carlsson and Antti Koivisto. + + * wtf/OwnPtr.h: + (WTF::OwnPtr::operator==): + (WTF::OwnPtr::operator!=): + * wtf/PassOwnPtr.h: + (WTF::PassOwnPtr::operator==): + (WTF::PassOwnPtr::operator!=): + Added private equality operators that fail to compile when used. (When not used, the + compiler will skip over them because they are function templates.) + +2011-05-04 Alexis Menard <alexis.menard@openbossa.org> + + Reviewed by Gavin Barraclough. + + JITArithmetic.cpp produces a warning on a unused variable. + https://bugs.webkit.org/show_bug.cgi?id=60060 + + Just properly use what we already have converted. + + * jit/JITArithmetic.cpp: + (JSC::JIT::emitSlow_op_add): + (JSC::JIT::emitSlow_op_mul): + +2011-05-04 Alexis Menard <alexis.menard@openbossa.org> + + Reviewed by Geoffrey Garen. + + JITPropertyAccess produces a unused but set variable warning in gcc 4.6.0. + https://bugs.webkit.org/show_bug.cgi?id=60050 + + This patch fix a compilation warning. The new warning scenario -Wunused-but-set-variable + in gcc 4.6.0 is included in -Wall and therefore stops the compilation when warnings are treated + as errors. The patch introduces a new macro ASSERT_JIT_OFFSET_UNUSED and ASSERT_WITH_MESSAGE_UNUSED + which copy the idea of ASSERT_UNUSED. + + * jit/JIT.h: + * jit/JITPropertyAccess.cpp: + (JSC::JIT::emit_op_method_check): + (JSC::JIT::compileGetByIdHotPath): + (JSC::JIT::emit_op_put_by_id): + * wtf/Assertions.h: + (assertWithMessageUnused): + +2011-04-29 Jer Noble <jer.noble@apple.com> + + Reviewed by Eric Seidel. + + Implement FULLSCREEN_API on Windows, Part 4: Enable it + https://bugs.webkit.org/show_bug.cgi?id=59798 + + * wtf/Platform.h: Set ENABLE_FULLSCREEN_API on win. + +2011-05-03 Alexis Menard <alexis.menard@openbossa.org> + + Reviewed by Eric Seidel. + + Unused but set variable warning in MacroAssemberX86_64 + https://bugs.webkit.org/show_bug.cgi?id=59482 + + * assembler/MacroAssemblerX86_64.h: + (JSC::MacroAssemblerX86_64::call): + (JSC::MacroAssemblerX86_64::tailRecursiveCall): + (JSC::MacroAssemblerX86_64::makeTailRecursiveCall): + +2011-05-03 Oliver Hunt <oliver@apple.com> + + Reviewed by Geoffrey Garen. + + Make malloc validation useful + https://bugs.webkit.org/show_bug.cgi?id=57502 + + Reland this patch (rolled out in 82905) without + turning it on by default. + + * JavaScriptCore.exp: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * wtf/FastMalloc.cpp: + (WTF::tryFastMalloc): + (WTF::fastMalloc): + (WTF::tryFastCalloc): + (WTF::fastCalloc): + (WTF::fastFree): + (WTF::tryFastRealloc): + (WTF::fastRealloc): + (WTF::fastMallocSize): + (WTF::TCMalloc_PageHeap::isScavengerSuspended): + (WTF::TCMalloc_PageHeap::scheduleScavenger): + (WTF::TCMalloc_PageHeap::suspendScavenger): + (WTF::TCMalloc_PageHeap::signalScavenger): + (WTF::TCMallocStats::malloc): + (WTF::TCMallocStats::free): + (WTF::TCMallocStats::fastCalloc): + (WTF::TCMallocStats::tryFastCalloc): + (WTF::TCMallocStats::calloc): + (WTF::TCMallocStats::fastRealloc): + (WTF::TCMallocStats::tryFastRealloc): + (WTF::TCMallocStats::realloc): + (WTF::TCMallocStats::fastMallocSize): + * wtf/FastMalloc.h: + (WTF::Internal::fastMallocValidationHeader): + (WTF::Internal::fastMallocValidationSuffix): + (WTF::Internal::fastMallocMatchValidationType): + (WTF::Internal::setFastMallocMatchValidationType): + (WTF::fastMallocMatchValidateFree): + (WTF::fastMallocValidate): + +2011-05-03 Xan Lopez <xlopez@igalia.com> + + Reviewed by Anders Carlsson. + + Compile error with GCC 4.6.0, tries to assign unsigned& to bitfield + https://bugs.webkit.org/show_bug.cgi?id=59261 + + Use unary '+' to force proper type detection in template arguments + with GCC 4.6.0. See bug report for more details. + + * runtime/Structure.cpp: + (JSC::StructureTransitionTable::remove): Use '+' to force precise type detection. + (JSC::StructureTransitionTable::add): ditto. + * runtime/Structure.h: + (JSC::StructureTransitionTable::keyForWeakGCMapFinalizer): ditto. + +2011-05-03 Jessie Berlin <jberlin@apple.com> + + Rubber-stamped by Adam Roben. + + Revert r85550 and r85575. + + Variables cannot be exported via the .def file. Instead, they should be annotated with + JS_EXPORTDATA. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * runtime/Structure.cpp: + (JSC::Structure::materializePropertyMap): + * runtime/Structure.h: + (JSC::Structure::typeInfo): + (JSC::Structure::previousID): + (JSC::Structure::propertyStorageCapacity): + (JSC::Structure::propertyStorageSize): + (JSC::Structure::get): + (JSC::Structure::materializePropertyMapIfNecessary): + +2011-05-02 Adam Roben <aroben@apple.com> + + Allow implicit conversion from nullptr_t to PassOwnPtr + + This makes it a lot easier to write code that just wants a null PassOwnPtr, especially in + strict PassOwnPtr mode. + + Fixes <http://webkit.org/b/59964> Implicit conversion from std::nullptr_t to PassOwnPtr + doesn't work, but should + + Reviewed by Adam Barth. + + * wtf/PassOwnPtr.h: + (WTF::PassOwnPtr::PassOwnPtr): Added a non-explicit constructor that takes a nullptr_t. + + * wtf/MessageQueue.h: + (WTF::::waitForMessageFilteredWithTimeout): + (WTF::::tryGetMessage): + Use the new implicit conversion. + +2011-05-02 Jessie Berlin <jberlin@apple.com> + + Rubber-stamped by Oliver Hunt. + + Remove an assertion that Windows was hitting on launch. + + * runtime/Structure.cpp: + (JSC::Structure::materializePropertyMap): + * runtime/Structure.h: + (JSC::Structure::typeInfo): + (JSC::Structure::previousID): + (JSC::Structure::propertyStorageCapacity): + (JSC::Structure::propertyStorageSize): + (JSC::Structure::get): + (JSC::Structure::materializePropertyMapIfNecessary): + +2011-05-02 Mark Rowe <mrowe@apple.com> + + Reviewed by Geoff Garen. + + <rdar://problem/9371948> JavaScriptCore should build with GCC 4.2 + + * Configurations/CompilerVersion.xcconfig: + +2011-05-02 Gavin Barraclough <barraclough@apple.com> + + ARMv7 build fix. + + * assembler/AbstractMacroAssembler.h: + (JSC::AbstractMacroAssembler::Jump::link): + (JSC::AbstractMacroAssembler::Jump::linkTo): + +2011-05-02 Oliver Hunt <oliver@apple.com> + + Windows build fix. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + +2011-05-02 Michael Saboff <msaboff@apple.com> + + Reviewed by Geoffrey Garen. + + crash in JSC::RegExp::match + https://bugs.webkit.org/show_bug.cgi?id=58922 + + Cleared chained backtrack data label when linking label even if that + label doesn't chain itself. This is needed so that subsequent + backtrack data labels point to the next outer paren and not within + the current paren. + + * yarr/YarrJIT.cpp: + (JSC::Yarr::YarrGenerator::TermGenerationState::linkDataLabelToBacktrackIfExists): + +2011-05-02 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Oliver Hunt. + + Tiny bit of heap cleanup. + + * heap/MarkedBlock.h: + (JSC::MarkedBlock::contains): Tightened up an assertion and a comment. + + * heap/MarkedSpace.h: + (JSC::MarkedSpace::globalData): + (JSC::MarkedSpace::highWaterMark): + (JSC::MarkedSpace::setHighWaterMark): Moved inlines out of the class + definition, for better clarity. + +2011-05-02 Oliver Hunt <oliver@apple.com> + + Reviewed by Gavin Barraclough. + + Correct marking of interpreter data in mixed mode builds + https://bugs.webkit.org/show_bug.cgi?id=59962 + + We had a few places in mixed mode builds where we would not + track data used by the interpreter for marking. This patch + corrects the problem and adds a number of assertions to catch + live Structures being collected. + + * JavaScriptCore.exp: + * assembler/ARMv7Assembler.h: + (JSC::ARMv7Assembler::ARMInstructionFormatter::debugOffset): + * bytecode/CodeBlock.cpp: + (JSC::CodeBlock::dump): + * bytecode/CodeBlock.h: + (JSC::CodeBlock::addPropertyAccessInstruction): + (JSC::CodeBlock::addGlobalResolveInstruction): + (JSC::CodeBlock::addStructureStubInfo): + (JSC::CodeBlock::addGlobalResolveInfo): + * bytecompiler/BytecodeGenerator.cpp: + (JSC::BytecodeGenerator::emitResolve): + (JSC::BytecodeGenerator::emitResolveWithBase): + (JSC::BytecodeGenerator::emitGetById): + (JSC::BytecodeGenerator::emitPutById): + (JSC::BytecodeGenerator::emitDirectPutById): + * runtime/Structure.cpp: + (JSC::Structure::materializePropertyMap): + * runtime/Structure.h: + (JSC::Structure::typeInfo): + (JSC::Structure::previousID): + (JSC::Structure::propertyStorageCapacity): + (JSC::Structure::propertyStorageSize): + (JSC::Structure::get): + (JSC::Structure::materializePropertyMapIfNecessary): + +2011-05-02 Xan Lopez <xlopez@igalia.com> + + Reviewed by Alexey Proskuryakov. + + Use native NullPtr when using GCC 4.6.0 and C++0x + https://bugs.webkit.org/show_bug.cgi?id=59252 + + GCC 4.6.0 has nullptr support, use it when possible. + + * wtf/NullPtr.cpp: include config.h to pull in Platform.h before + NullPtr.h, since we need the GCC_VERSION_AT_LEAST definition. + * wtf/NullPtr.h: check for GCC >= 4.6.0 and C++0x in order to + use native nullptr. + +2011-05-02 Gavin Barraclough <barraclough@apple.com> + + Reviewed by Oliver Hunt. + + https://bugs.webkit.org/show_bug.cgi?id=59950 + Clean up AssemblerBuffer to use a Vector internally. + + AssemblerBuffer handles reallocing a byte array itself - stop that. + + * assembler/ARMAssembler.cpp: + (JSC::ARMAssembler::executableCopy): + * assembler/AssemblerBuffer.h: + (JSC::AssemblerLabel::AssemblerLabel): + (JSC::AssemblerLabel::labelAtOffset): + (JSC::AssemblerBuffer::AssemblerBuffer): + (JSC::AssemblerBuffer::~AssemblerBuffer): + (JSC::AssemblerBuffer::isAvailable): + (JSC::AssemblerBuffer::ensureSpace): + (JSC::AssemblerBuffer::isAligned): + (JSC::AssemblerBuffer::putIntegral): + (JSC::AssemblerBuffer::putIntegralUnchecked): + (JSC::AssemblerBuffer::putByteUnchecked): + (JSC::AssemblerBuffer::putByte): + (JSC::AssemblerBuffer::putShortUnchecked): + (JSC::AssemblerBuffer::putShort): + (JSC::AssemblerBuffer::putIntUnchecked): + (JSC::AssemblerBuffer::putInt): + (JSC::AssemblerBuffer::putInt64Unchecked): + (JSC::AssemblerBuffer::putInt64): + (JSC::AssemblerBuffer::codeSize): + (JSC::AssemblerBuffer::label): + (JSC::AssemblerBuffer::executableCopy): + (JSC::AssemblerBuffer::rewindToLabel): + (JSC::AssemblerBuffer::debugOffset): + (JSC::AssemblerBuffer::append): + (JSC::AssemblerBuffer::grow): + * assembler/AssemblerBufferWithConstantPool.h: + * assembler/MacroAssemblerX86_64.h: + (JSC::MacroAssemblerX86_64::linkCall): + * assembler/X86Assembler.h: + (JSC::X86Assembler::X86InstructionFormatter::rewindToLabel): + +2011-05-02 Jeff Miller <jeffm@apple.com> + + Reviewed by Alexy Proskuryakov. + + Avoid potential buffer overflow in WTFLog() and WTFLogVerbose() + https://bugs.webkit.org/show_bug.cgi?id=59949 + + * wtf/Assertions.cpp: Check for 0 or empty format string in WTFLog() and WTFLogVerbose(). + +2011-05-02 Adam Barth <abarth@webkit.org> + + Reviewed by Alexey Proskuryakov. + + StringImpl::endsWith has some insane code + https://bugs.webkit.org/show_bug.cgi?id=59900 + + * wtf/text/StringImpl.cpp: + (WTF::StringImpl::endsWith): + - m_data shadows a member variable of the same name. + +2011-05-02 Gabor Loki <loki@webkit.org> + + Buildfix for ARM after r85448 + + * assembler/ARMAssembler.h: + (JSC::ARMAssembler::loadBranchTarget): + +2011-05-01 Oliver Hunt <oliver@apple.com> + + Reviewed by Gavin Barraclough. + + Strict-mode only reserved words not reserved + https://bugs.webkit.org/show_bug.cgi?id=55342 + + Fix line number tracking when we rollback the lexer. + + * parser/JSParser.cpp: + (JSC::JSParser::parseSourceElements): + +2011-05-01 Oliver Hunt <oliver@apple.com> + + Reviewed by Gavin Barraclough. + + ES5 Strict mode does not allow getter and setter for same propId + https://bugs.webkit.org/show_bug.cgi?id=57295 + + Simplify and correct the logic for strict mode object literals. + + * parser/JSParser.cpp: + (JSC::JSParser::parseStrictObjectLiteral): + +2011-05-01 Oliver Hunt <oliver@apple.com> + + Reviewed by Gavin Barraclough. + + Assigning to function identifier under strict should throw + https://bugs.webkit.org/show_bug.cgi?id=59289 + + Add logic to StaticScopeObject to ensure we don't silently consume + writes to constant properties. + + * runtime/JSStaticScopeObject.cpp: + (JSC::JSStaticScopeObject::put): + +2011-05-01 Gavin Barraclough <barraclough@apple.com> + + Reviewed by Sam Weinig. + + https://bugs.webkit.org/show_bug.cgi?id=59903 + Use AssemblerLabel throughout Assembler classes, AssemblerBuffer + + Creating a lable() into the AssemblerBuffer should return an AssemblerLabel, + not an unsigned int. + + * assembler/ARMAssembler.cpp: + (JSC::ARMAssembler::executableCopy): + * assembler/ARMAssembler.h: + (JSC::ARMAssembler::blx): + (JSC::ARMAssembler::label): + (JSC::ARMAssembler::loadBranchTarget): + * assembler/ARMv7Assembler.h: + (JSC::ARMv7Assembler::b): + (JSC::ARMv7Assembler::blx): + (JSC::ARMv7Assembler::bx): + (JSC::ARMv7Assembler::label): + (JSC::ARMv7Assembler::ARMInstructionFormatter::label): + * assembler/AssemblerBuffer.h: + (JSC::AssemblerBuffer::label): + * assembler/AssemblerBufferWithConstantPool.h: + * assembler/MIPSAssembler.h: + (JSC::MIPSAssembler::label): + (JSC::MIPSAssembler::relocateJumps): + * assembler/SH4Assembler.h: + (JSC::SH4Assembler::loadConstant): + (JSC::SH4Assembler::loadConstantUnReusable): + (JSC::SH4Assembler::call): + (JSC::SH4Assembler::jmp): + (JSC::SH4Assembler::jne): + (JSC::SH4Assembler::je): + (JSC::SH4Assembler::label): + (JSC::SH4Assembler::oneShortOp): + * assembler/X86Assembler.h: + (JSC::X86Assembler::call): + (JSC::X86Assembler::jmp_r): + (JSC::X86Assembler::label): + (JSC::X86Assembler::X86InstructionFormatter::immediateRel32): + (JSC::X86Assembler::X86InstructionFormatter::label): + +2011-05-01 Adam Barth <abarth@webkit.org> + + Reviewed by David Levin. + + Enable strict mode for OwnPtr and PassOwnPtr + https://bugs.webkit.org/show_bug.cgi?id=59428 + + * wtf/OwnPtr.h: + +2011-05-01 Patrick Gansterer <paroga@webkit.org> + + Reviewed by Adam Barth. + + Enable strict OwnPtr for PLATFORM(WIN) + https://bugs.webkit.org/show_bug.cgi?id=59881 + + * wtf/OwnPtr.h: + +2011-05-01 Gavin Barraclough <barraclough@apple.com> + + Reviewed by Sam Weinig. + + https://bugs.webkit.org/show_bug.cgi?id=59896 + Remove JmpSrc/JmpDst types. + + The JmpSrc/JmpDst classes predate the MacroAssembler interface. Having these + object be per-assembler in unhelpful, causes unnecessary code duplication, + and prevents the AssemblerBuffer from providing a richer type for labels. + The limited semantic meaning that they did convey is undermined by the manner + in which their meanings have been overloaded (use of JmpSrc for Call, JmpDst + for data labels). + + Jumps on ARMv7 have had additional information added to the object via the + ARMv7 JmpSrc. This data should probably be in the instruction stream. This + patch does not fix the problem, and moves the data (ifdefed) to + AbstractMacroAssembler::Jump (which is effectively where it was before!). + This at least closes the hole such that no further data may be added to JmpSrc, + but this is unfortunate, and should be cleaned up. + + * assembler/ARMAssembler.h: + (JSC::ARMAssembler::blx): + (JSC::ARMAssembler::label): + (JSC::ARMAssembler::align): + (JSC::ARMAssembler::loadBranchTarget): + (JSC::ARMAssembler::jmp): + (JSC::ARMAssembler::linkPointer): + (JSC::ARMAssembler::linkJump): + (JSC::ARMAssembler::linkCall): + (JSC::ARMAssembler::getRelocatedAddress): + (JSC::ARMAssembler::getDifferenceBetweenLabels): + (JSC::ARMAssembler::getCallReturnOffset): + * assembler/ARMv7Assembler.h: + (JSC::ARMv7Assembler::b): + (JSC::ARMv7Assembler::blx): + (JSC::ARMv7Assembler::bx): + (JSC::ARMv7Assembler::label): + (JSC::ARMv7Assembler::align): + (JSC::ARMv7Assembler::getRelocatedAddress): + (JSC::ARMv7Assembler::getDifferenceBetweenLabels): + (JSC::ARMv7Assembler::getCallReturnOffset): + (JSC::ARMv7Assembler::linkJump): + (JSC::ARMv7Assembler::linkCall): + (JSC::ARMv7Assembler::linkPointer): + * assembler/AbstractMacroAssembler.h: + (JSC::AbstractMacroAssembler::Label::isSet): + (JSC::AbstractMacroAssembler::Call::Call): + (JSC::AbstractMacroAssembler::Jump::Jump): + (JSC::AbstractMacroAssembler::Jump::link): + (JSC::AbstractMacroAssembler::Jump::linkTo): + (JSC::AbstractMacroAssembler::linkPointer): + (JSC::AbstractMacroAssembler::getLinkerAddress): + * assembler/AssemblerBuffer.h: + (JSC::AssemblerLabel::AssemblerLabel): + (JSC::AssemblerLabel::isSet): + * assembler/LinkBuffer.h: + (JSC::LinkBuffer::patch): + * assembler/MIPSAssembler.h: + (JSC::MIPSAssembler::label): + (JSC::MIPSAssembler::align): + (JSC::MIPSAssembler::getRelocatedAddress): + (JSC::MIPSAssembler::getDifferenceBetweenLabels): + (JSC::MIPSAssembler::getCallReturnOffset): + (JSC::MIPSAssembler::linkJump): + (JSC::MIPSAssembler::linkCall): + (JSC::MIPSAssembler::linkPointer): + * assembler/MacroAssemblerARMv7.h: + (JSC::MacroAssemblerARMv7::branchDouble): + (JSC::MacroAssemblerARMv7::branchDoubleZeroOrNaN): + (JSC::MacroAssemblerARMv7::jump): + (JSC::MacroAssemblerARMv7::nearCall): + (JSC::MacroAssemblerARMv7::call): + (JSC::MacroAssemblerARMv7::ret): + (JSC::MacroAssemblerARMv7::tailRecursiveCall): + (JSC::MacroAssemblerARMv7::makeBranch): + * assembler/MacroAssemblerMIPS.h: + (JSC::MacroAssemblerMIPS::nearCall): + (JSC::MacroAssemblerMIPS::call): + (JSC::MacroAssemblerMIPS::tailRecursiveCall): + (JSC::MacroAssemblerMIPS::branchTrue): + (JSC::MacroAssemblerMIPS::branchFalse): + (JSC::MacroAssemblerMIPS::branchEqual): + (JSC::MacroAssemblerMIPS::branchNotEqual): + * assembler/SH4Assembler.h: + (JSC::SH4Assembler::call): + (JSC::SH4Assembler::jmp): + (JSC::SH4Assembler::jne): + (JSC::SH4Assembler::je): + (JSC::SH4Assembler::label): + (JSC::SH4Assembler::align): + (JSC::SH4Assembler::linkJump): + (JSC::SH4Assembler::linkCall): + (JSC::SH4Assembler::linkPointer): + (JSC::SH4Assembler::getCallReturnOffset): + (JSC::SH4Assembler::getRelocatedAddress): + (JSC::SH4Assembler::getDifferenceBetweenLabels): + (JSC::SH4Assembler::patchPointer): + * assembler/X86Assembler.h: + (JSC::X86Assembler::call): + (JSC::X86Assembler::jmp): + (JSC::X86Assembler::jmp_r): + (JSC::X86Assembler::jne): + (JSC::X86Assembler::jnz): + (JSC::X86Assembler::je): + (JSC::X86Assembler::jz): + (JSC::X86Assembler::jl): + (JSC::X86Assembler::jb): + (JSC::X86Assembler::jle): + (JSC::X86Assembler::jbe): + (JSC::X86Assembler::jge): + (JSC::X86Assembler::jg): + (JSC::X86Assembler::ja): + (JSC::X86Assembler::jae): + (JSC::X86Assembler::jo): + (JSC::X86Assembler::jp): + (JSC::X86Assembler::js): + (JSC::X86Assembler::jCC): + (JSC::X86Assembler::label): + (JSC::X86Assembler::labelFor): + (JSC::X86Assembler::align): + (JSC::X86Assembler::linkJump): + (JSC::X86Assembler::linkCall): + (JSC::X86Assembler::linkPointer): + (JSC::X86Assembler::getCallReturnOffset): + (JSC::X86Assembler::getRelocatedAddress): + (JSC::X86Assembler::getDifferenceBetweenLabels): + (JSC::X86Assembler::rewindToLabel): + (JSC::X86Assembler::X86InstructionFormatter::immediateRel32): + (JSC::X86Assembler::X86InstructionFormatter::rewindToLabel): + * jit/JIT.cpp: + (JSC::JIT::privateCompileMainPass): + * jit/JIT.h: + * jit/JITInlineMethods.h: + (JSC::JIT::atJumpTarget): + (JSC::JIT::emitGetVirtualRegister): + * jit/JITOpcodes.cpp: + (JSC::JIT::emit_op_jmp): + (JSC::JIT::emit_op_jfalse): + (JSC::JIT::emit_op_jeq_null): + (JSC::JIT::emit_op_jneq_null): + (JSC::JIT::emit_op_jneq_ptr): + (JSC::JIT::emit_op_jsr): + (JSC::JIT::emit_op_jtrue): + (JSC::JIT::emit_op_jmp_scopes): + +2011-05-01 Chao-ying Fu <fu@mips.com> + + Reviewed by Eric Seidel. + + Fix MIPS build due to the split of "Condition" enum + https://bugs.webkit.org/show_bug.cgi?id=59407 + + * assembler/MIPSAssembler.h: + (JSC::MIPSAssembler::debugOffset): + * assembler/MacroAssemblerMIPS.h: + (JSC::MacroAssemblerMIPS::branch32): + (JSC::MacroAssemblerMIPS::compare32): + +2011-04-30 Adam Barth <abarth@webkit.org> + + Reviewed by Adam Barth. + + Enable strict OwnPtr for GTK + https://bugs.webkit.org/show_bug.cgi?id=59861 + + * wtf/OwnPtr.h: + +2011-04-30 Gavin Barraclough <barraclough@apple.com> + + ARMv7 build fix. + + * assembler/AssemblerBufferWithConstantPool.h: + +2011-04-30 Gavin Barraclough <barraclough@apple.com> + + Reviewed by Oliver Hunt. + + Bug 59869 - AssemblerBuffer cleanup - disambiguate size() + + The method size() is called on the AssemblerBuffer both to acquire + the complete size of the code, and to get a position to use as a + label into the code. Instead, add an explicit 'label' method. + + * assembler/ARMAssembler.cpp: + (JSC::ARMAssembler::executableCopy): + * assembler/ARMAssembler.h: + (JSC::ARMAssembler::blx): + (JSC::ARMAssembler::codeSize): + (JSC::ARMAssembler::label): + (JSC::ARMAssembler::loadBranchTarget): + * assembler/ARMv7Assembler.h: + (JSC::ARMv7Assembler::b): + (JSC::ARMv7Assembler::blx): + (JSC::ARMv7Assembler::bx): + (JSC::ARMv7Assembler::label): + (JSC::ARMv7Assembler::codeSize): + (JSC::ARMv7Assembler::ARMInstructionFormatter::codeSize): + (JSC::ARMv7Assembler::ARMInstructionFormatter::data): + * assembler/AbstractMacroAssembler.h: + * assembler/AssemblerBuffer.h: + (JSC::AssemblerBuffer::codeSize): + (JSC::AssemblerBuffer::label): + * assembler/AssemblerBufferWithConstantPool.h: + * assembler/LinkBuffer.h: + (JSC::LinkBuffer::LinkBuffer): + (JSC::LinkBuffer::linkCode): + * assembler/MIPSAssembler.h: + (JSC::MIPSAssembler::newJmpSrc): + (JSC::MIPSAssembler::appendJump): + (JSC::MIPSAssembler::label): + (JSC::MIPSAssembler::codeSize): + (JSC::MIPSAssembler::relocateJumps): + * assembler/SH4Assembler.h: + (JSC::SH4Assembler::loadConstant): + (JSC::SH4Assembler::loadConstantUnReusable): + (JSC::SH4Assembler::call): + (JSC::SH4Assembler::jmp): + (JSC::SH4Assembler::jne): + (JSC::SH4Assembler::je): + (JSC::SH4Assembler::label): + (JSC::SH4Assembler::executableCopy): + (JSC::SH4Assembler::oneShortOp): + (JSC::SH4Assembler::codeSize): + * assembler/X86Assembler.h: + (JSC::X86Assembler::call): + (JSC::X86Assembler::jmp_r): + (JSC::X86Assembler::codeSize): + (JSC::X86Assembler::label): + (JSC::X86Assembler::executableCopy): + (JSC::X86Assembler::X86InstructionFormatter::immediateRel32): + (JSC::X86Assembler::X86InstructionFormatter::codeSize): + (JSC::X86Assembler::X86InstructionFormatter::label): + (JSC::X86Assembler::X86InstructionFormatter::executableCopy): + * dfg/DFGJITCompiler.cpp: + (JSC::DFG::JITCompiler::compileFunction): + * jit/JIT.cpp: + (JSC::JIT::privateCompile): + * jit/JITOpcodes.cpp: + (JSC::JIT::privateCompileCTIMachineTrampolines): + * jit/JITOpcodes32_64.cpp: + (JSC::JIT::privateCompileCTIMachineTrampolines): + * yarr/YarrJIT.cpp: + (JSC::Yarr::YarrGenerator::compile): + +2011-04-29 Adam Barth <abarth@webkit.org> + + Attempt to fix the Windows build. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + +2011-04-29 Adam Barth <abarth@webkit.org> + + Reviewed by Eric Seidel. + + CSP script-src should block eval + https://bugs.webkit.org/show_bug.cgi?id=59850 + + ggaren recommend a different approach to this patch, essentially + installing a new function for function-eval and changing the AST + representation of operator-eval to call function-eval. However, I'm + not sure that approach is workable because the ASTBuilder doesn't know + about global objects, and there is added complication due to the cache. + + This approach is more dynamic, adding a branch in EvalExecutable to + detect whether eval is current disabled in the lexical scope. The spec + is slightly unclear about whether we should return undefined or throw + an exception. I've asked Brandon to clarify the spec, but throwing an + exception seems natural. + + * JavaScriptCore.exp: + * runtime/Executable.cpp: + (JSC::EvalExecutable::compileInternal): + * runtime/JSGlobalObject.cpp: + (JSC::JSGlobalObject::disableEval): + * runtime/JSGlobalObject.h: + (JSC::JSGlobalObject::JSGlobalObject): + (JSC::JSGlobalObject::isEvalEnabled): + +2011-04-29 Gavin Barraclough <barraclough@apple.com> + + Reviewed by Oliver Hunt. + + https://bugs.webkit.org/show_bug.cgi?id=59847 + Remove linkOffset from LinkBuffer + + This is redundant since removal of recompilation for exception info. + + * assembler/LinkBuffer.h: + (JSC::LinkBuffer::LinkBuffer): + (JSC::LinkBuffer::linkCode): + * dfg/DFGJITCompiler.cpp: + (JSC::DFG::JITCompiler::compileFunction): + * jit/JIT.cpp: + (JSC::JIT::JIT): + (JSC::JIT::privateCompile): + * jit/JIT.h: + (JSC::JIT::compile): + (JSC::JIT::compileCTIMachineTrampolines): + (JSC::JIT::compileCTINativeCall): + * jit/JITOpcodes.cpp: + (JSC::JIT::privateCompileCTIMachineTrampolines): + * jit/JITOpcodes32_64.cpp: + (JSC::JIT::privateCompileCTIMachineTrampolines): + (JSC::JIT::privateCompileCTINativeCall): + * jit/JITPropertyAccess.cpp: + (JSC::JIT::stringGetByValStubGenerator): + (JSC::JIT::privateCompilePutByIdTransition): + (JSC::JIT::privateCompilePatchGetArrayLength): + (JSC::JIT::privateCompileGetByIdProto): + (JSC::JIT::privateCompileGetByIdSelfList): + (JSC::JIT::privateCompileGetByIdProtoList): + (JSC::JIT::privateCompileGetByIdChainList): + (JSC::JIT::privateCompileGetByIdChain): + * jit/JITPropertyAccess32_64.cpp: + (JSC::JIT::stringGetByValStubGenerator): + (JSC::JIT::privateCompilePutByIdTransition): + (JSC::JIT::privateCompilePatchGetArrayLength): + (JSC::JIT::privateCompileGetByIdProto): + (JSC::JIT::privateCompileGetByIdSelfList): + (JSC::JIT::privateCompileGetByIdProtoList): + (JSC::JIT::privateCompileGetByIdChainList): + (JSC::JIT::privateCompileGetByIdChain): + * jit/SpecializedThunkJIT.h: + (JSC::SpecializedThunkJIT::finalize): + * yarr/YarrJIT.cpp: + (JSC::Yarr::YarrGenerator::compile): + +2011-04-29 Gavin Barraclough <barraclough@apple.com> + + Reviewed by Oliver Hunt & Geoff Garen. + + https://bugs.webkit.org/show_bug.cgi?id=59221 + [RegexFuzz] Regression blocking testing + + Okay, so the bug here is that when, in the case of a TypeParentheticalAssertion + node, emitDisjunction recursively calls to itself to emit the nested disjunction + the value of parenthesesInputCountAlreadyChecked is bogus (doesn't take into + account the uncheck that has just taken place). + + Also, the special handling given to countToCheck in the case of parenthetical + assertions is nonsense, delete it, along with the isParentheticalAssertion argument. + + * yarr/YarrInterpreter.cpp: + (JSC::Yarr::ByteCompiler::emitDisjunction): + +2011-04-29 Csaba Osztrogonác <ossy@webkit.org> + + Reviewed by Adam Barth. + + Enable strict OwnPtr for Qt + https://bugs.webkit.org/show_bug.cgi?id=59667 + + * wtf/OwnPtr.h: + +2011-04-29 Dean Jackson <dino@apple.com> + + Reviewed by Simon Fraser. + + Add ENABLE macro for WebKitAnimation + https://bugs.webkit.org/show_bug.cgi?id=59729 + + Add new feature to toggle WebKit Animation API. + + * Configurations/FeatureDefines.xcconfig: + +2011-04-28 Sam Weinig <sam@webkit.org> + + Reviewed by Mark Rowe. + + Install testapi.js along side testapi + https://bugs.webkit.org/show_bug.cgi?id=59773 + + * JavaScriptCore.xcodeproj/project.pbxproj: + Add new build phase to copy testapi.js to install path of testapi + on install. + +2011-04-28 David Levin <levin@chromium.org> + + Reviewed by Adam Barth. + + Remove IMAGE_RESIZER related code. + https://bugs.webkit.org/show_bug.cgi?id=59735 + + * Configurations/FeatureDefines.xcconfig: + +2011-04-28 Gavin Barraclough <barraclough@apple.com> + + Reviewed by Oliver Hunt. + + https://bugs.webkit.org/show_bug.cgi?id=59763 + DFG JIT - Unify FPRReg & FPRegisterID + + (Following on from GPRReg/RegisterID unification). + + * dfg/DFGFPRInfo.h: + (JSC::DFG::FPRInfo::toRegister): + (JSC::DFG::FPRInfo::debugName): + * dfg/DFGGPRInfo.h: + * dfg/DFGJITCodeGenerator.cpp: + (JSC::DFG::JITCodeGenerator::fillDouble): + (JSC::DFG::JITCodeGenerator::checkConsistency): + * dfg/DFGJITCodeGenerator.h: + (JSC::DFG::JITCodeGenerator::boxDouble): + (JSC::DFG::JITCodeGenerator::unboxDouble): + (JSC::DFG::JITCodeGenerator::flushRegisters): + (JSC::DFG::JITCodeGenerator::isFlushed): + (JSC::DFG::JITCodeGenerator::setupTwoStubArgs): + (JSC::DFG::JITCodeGenerator::setupStubArguments): + (JSC::DFG::JITCodeGenerator::callOperation): + (JSC::DFG::GPRResult::lockedResult): + (JSC::DFG::FPRResult::lockedResult): + * dfg/DFGJITCompiler.cpp: + (JSC::DFG::JITCompiler::fillNumericToDouble): + (JSC::DFG::JITCompiler::jumpFromSpeculativeToNonSpeculative): + (JSC::DFG::JITCompiler::compileFunction): + * dfg/DFGJITCompiler.h: + * dfg/DFGNode.h: + * dfg/DFGNonSpeculativeJIT.cpp: + (JSC::DFG::EntryLocation::EntryLocation): + (JSC::DFG::NonSpeculativeJIT::valueToNumber): + (JSC::DFG::NonSpeculativeJIT::valueToInt32): + (JSC::DFG::NonSpeculativeJIT::numberToInt32): + (JSC::DFG::NonSpeculativeJIT::compile): + * dfg/DFGNonSpeculativeJIT.h: + (JSC::DFG::NonSpeculativeJIT::silentSpillAllRegisters): + (JSC::DFG::NonSpeculativeJIT::silentFillAllRegisters): + * dfg/DFGRegisterBank.h: + (JSC::DFG::RegisterBank::iterator::regID): + (JSC::DFG::RegisterBank::iterator::debugName): + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculationCheck::SpeculationCheck): + (JSC::DFG::SpeculativeJIT::compile): + * dfg/DFGSpeculativeJIT.h: + +2011-04-28 David Kilzer <ddkilzer@apple.com> + + Revert "<http://webkit.org/b/59705> WTF::postTimer() leaks a CFRunLoopTimerRef every time it's called" + + This reverts commit r85195. It was crashing DumpRenderTree on Lion. + + * wtf/mac/MainThreadMac.mm: + (WTF::postTimer): + +2011-04-28 Adam Barth <abarth@webkit.org> + + Reviewed by Eric Seidel. + + Remove WML + https://bugs.webkit.org/show_bug.cgi?id=59678 + + Remove the WML configuration option from the Mac build system. + + * Configurations/FeatureDefines.xcconfig: + +2011-04-28 Sheriff Bot <webkit.review.bot@gmail.com> + + Unreviewed, rolling out r85233 and r85235. + http://trac.webkit.org/changeset/85233 + http://trac.webkit.org/changeset/85235 + https://bugs.webkit.org/show_bug.cgi?id=59754 + + Causes issues with jsc. (Requested by dave_levin on #webkit). + + * GNUmakefile.list.am: + * JavaScriptCore.gypi: + * JavaScriptCore.vcproj/WTF/WTF.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * jit/ExecutableAllocator.h: + (JSC::ExecutablePool::ExecutablePool): + * parser/SourceProvider.h: + (JSC::SourceProvider::SourceProvider): + * runtime/RegExp.cpp: + (JSC::RegExp::RegExp): + * wtf/CMakeLists.txt: + * wtf/RefCounted.h: + (WTF::RefCountedBase::ref): + (WTF::RefCountedBase::hasOneRef): + (WTF::RefCountedBase::refCount): + (WTF::RefCountedBase::derefBase): + * wtf/SizeLimits.cpp: + * wtf/ThreadRestrictionVerifier.h: Removed. + * wtf/text/CString.h: + (WTF::CStringBuffer::CStringBuffer): + +2011-04-28 Gavin Barraclough <barraclough@apple.com> + + Reviewed by Oliver Hunt. + + Bug 59740 - DFG JIT - Unify GPRReg & RegisterID + + Currently we use a mix of enum values throughout the DFG JIT to represent + gpr registers - the RegisterID provided by the MacroAssembler, and the + GPRReg enum giving the sequential register set over which the RegisterBank + allocates. Unify the two. + + Patch to unify FPRReg in a similar fashion will follow. + + * JavaScriptCore.xcodeproj/project.pbxproj: + * dfg/DFGFPRInfo.h: Added. + (JSC::DFG::next): + (JSC::DFG::FPRBankInfo::toRegister): + (JSC::DFG::FPRBankInfo::toIndex): + * dfg/DFGGPRInfo.h: Added. + (JSC::DFG::GPRInfo::toRegister): + (JSC::DFG::GPRInfo::toIndex): + (JSC::DFG::GPRInfo::debugName): + * dfg/DFGJITCodeGenerator.cpp: + (JSC::DFG::JITCodeGenerator::fillInteger): + (JSC::DFG::JITCodeGenerator::fillDouble): + (JSC::DFG::JITCodeGenerator::fillJSValue): + (JSC::DFG::JITCodeGenerator::dump): + (JSC::DFG::JITCodeGenerator::checkConsistency): + (JSC::DFG::GPRTemporary::GPRTemporary): + (JSC::DFG::FPRTemporary::FPRTemporary): + * dfg/DFGJITCodeGenerator.h: + (JSC::DFG::JITCodeGenerator::boxDouble): + (JSC::DFG::JITCodeGenerator::unboxDouble): + (JSC::DFG::JITCodeGenerator::spill): + (JSC::DFG::JITCodeGenerator::flushRegisters): + (JSC::DFG::JITCodeGenerator::isFlushed): + (JSC::DFG::JITCodeGenerator::bitOp): + (JSC::DFG::JITCodeGenerator::shiftOp): + (JSC::DFG::JITCodeGenerator::setupTwoStubArgs): + (JSC::DFG::JITCodeGenerator::setupStubArguments): + (JSC::DFG::JITCodeGenerator::callOperation): + (JSC::DFG::IntegerOperand::gpr): + (JSC::DFG::DoubleOperand::gpr): + (JSC::DFG::GPRTemporary::gpr): + (JSC::DFG::FPRTemporary::gpr): + (JSC::DFG::GPRResult::lockedResult): + * dfg/DFGJITCompiler.cpp: + (JSC::DFG::JITCompiler::fillNumericToDouble): + (JSC::DFG::JITCompiler::fillInt32ToInteger): + (JSC::DFG::JITCompiler::fillToJS): + (JSC::DFG::JITCompiler::jumpFromSpeculativeToNonSpeculative): + (JSC::DFG::JITCompiler::compileFunction): + (JSC::DFG::JITCompiler::jitAssertIsInt32): + (JSC::DFG::JITCompiler::jitAssertIsJSInt32): + (JSC::DFG::JITCompiler::jitAssertIsJSNumber): + (JSC::DFG::JITCompiler::jitAssertIsJSDouble): + * dfg/DFGJITCompiler.h: + (JSC::DFG::JITCompiler::preserveReturnAddressAfterCall): + (JSC::DFG::JITCompiler::restoreReturnAddressBeforeReturn): + (JSC::DFG::JITCompiler::emitGetFromCallFrameHeaderPtr): + (JSC::DFG::JITCompiler::emitPutToCallFrameHeader): + (JSC::DFG::JITCompiler::emitPutImmediateToCallFrameHeader): + (JSC::DFG::JITCompiler::addressForGlobalVar): + (JSC::DFG::JITCompiler::addressFor): + (JSC::DFG::JITCompiler::tagFor): + (JSC::DFG::JITCompiler::payloadFor): + * dfg/DFGNonSpeculativeJIT.cpp: + (JSC::DFG::EntryLocation::EntryLocation): + (JSC::DFG::NonSpeculativeJIT::valueToNumber): + (JSC::DFG::NonSpeculativeJIT::valueToInt32): + (JSC::DFG::NonSpeculativeJIT::numberToInt32): + (JSC::DFG::NonSpeculativeJIT::compile): + * dfg/DFGNonSpeculativeJIT.h: + (JSC::DFG::NonSpeculativeJIT::silentSpillGPR): + (JSC::DFG::NonSpeculativeJIT::silentSpillFPR): + (JSC::DFG::NonSpeculativeJIT::silentFillGPR): + (JSC::DFG::NonSpeculativeJIT::silentFillFPR): + (JSC::DFG::NonSpeculativeJIT::silentSpillAllRegisters): + (JSC::DFG::NonSpeculativeJIT::silentFillAllRegisters): + * dfg/DFGRegisterBank.h: + (JSC::DFG::RegisterBank::allocate): + (JSC::DFG::RegisterBank::retain): + (JSC::DFG::RegisterBank::release): + (JSC::DFG::RegisterBank::lock): + (JSC::DFG::RegisterBank::unlock): + (JSC::DFG::RegisterBank::isLocked): + (JSC::DFG::RegisterBank::name): + (JSC::DFG::RegisterBank::iterator::name): + (JSC::DFG::RegisterBank::iterator::isLocked): + (JSC::DFG::RegisterBank::iterator::release): + (JSC::DFG::RegisterBank::iterator::gpr): + (JSC::DFG::RegisterBank::iterator::debugName): + (JSC::DFG::RegisterBank::iterator::operator++): + (JSC::DFG::RegisterBank::iterator::operator!=): + (JSC::DFG::RegisterBank::iterator::index): + (JSC::DFG::RegisterBank::iterator::iterator): + (JSC::DFG::RegisterBank::begin): + (JSC::DFG::RegisterBank::end): + (JSC::DFG::RegisterBank::isLockedAtIndex): + (JSC::DFG::RegisterBank::nameAtIndex): + (JSC::DFG::RegisterBank::releaseAtIndex): + (JSC::DFG::RegisterBank::allocateInternal): + (JSC::DFG::RegisterBank::MapEntry::MapEntry): + * dfg/DFGScoreBoard.h: + (JSC::DFG::ScoreBoard::~ScoreBoard): + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::fillSpeculateIntInternal): + (JSC::DFG::SpeculationCheck::SpeculationCheck): + (JSC::DFG::SpeculativeJIT::fillSpeculateCell): + (JSC::DFG::SpeculativeJIT::compilePeepHoleBranch): + (JSC::DFG::SpeculativeJIT::compile): + (JSC::DFG::SpeculativeJIT::checkArgumentTypes): + (JSC::DFG::SpeculativeJIT::initializeVariableTypes): + * dfg/DFGSpeculativeJIT.h: + (JSC::DFG::SpeculateIntegerOperand::gpr): + +2011-04-28 Oliver Hunt <oliver@apple.com> + + Reviewed by Gavin Barraclough. + + Remove evil addressOfStructure() function + https://bugs.webkit.org/show_bug.cgi?id=59739 + + Remove the addressOfStructure function from JSCell, and update + callsites to use the same logic as testPrototype() + + * jit/JITPropertyAccess.cpp: + (JSC::JIT::privateCompileGetByIdProto): + (JSC::JIT::privateCompileGetByIdProtoList): + * jit/JITPropertyAccess32_64.cpp: + (JSC::JIT::privateCompileGetByIdProto): + (JSC::JIT::privateCompileGetByIdProtoList): + * runtime/JSCell.h: + +2011-04-28 Oliver Hunt <oliver@apple.com> + + Reviewed by Gavin Barraclough. + + Clean up testPrototype() + https://bugs.webkit.org/show_bug.cgi?id=59734 + + Remove direct pointer to the inside of a GC object and just do + the indirect load manually. Doesn't effect sunspider but does + clean up the code quite a bit, and simplifies the handling of + GC values. + + * jit/JITPropertyAccess.cpp: + (JSC::JIT::testPrototype): + +2011-04-28 David Levin <levin@chromium.org> + + Build fix. + + * wtf/RefCounted.h: Fix inverted ifdef. + +2011-04-07 David Levin <levin@chromium.org> + + Reviewed by Darin Adler. + + Add asserts to RefCounted to make sure ref/deref happens on the right thread. + https://bugs.webkit.org/show_bug.cgi?id=31639 + + * GNUmakefile.list.am: Added new files to the build. + * JavaScriptCore.gypi: Ditto. + * JavaScriptCore.vcproj/WTF/WTF.vcproj: Ditto. + * JavaScriptCore.xcodeproj/project.pbxproj: Ditto. + * jit/ExecutableAllocator.h: + (JSC::ExecutablePool::ExecutablePool): Turned off checks for this + due to not being able to figure out what was guarding it (bug 58091). + * parser/SourceProvider.h: + (JSC::SourceProvider::SourceProvider): Ditto. + * runtime/RegExp.cpp: + (JSC::RegExp::RegExp): Ditto. + * wtf/CMakeLists.txt: Added new files to the build. + * wtf/ThreadRestrictionVerifier.h: Added. + Everything is done in the header to avoid the issue with exports + that are only useful in debug but still needing to export them. + * wtf/RefCounted.h: + (WTF::RefCountedBase::ref): Added checks using the non thread safe verifier. + and filed bug 58171 about making it stricter. + (WTF::RefCountedBase::hasOneRef): Ditto. + (WTF::RefCountedBase::refCount): Ditto. + (WTF::RefCountedBase::setMutexForVerifier): Expose a way to change the checks to be based + on a mutex. This is in the header to avoid adding more exports from JavaScriptCore. + (WTF::RefCountedBase::deprecatedTurnOffVerifier): Temporary way to turn off verification. + Filed bug 58174 to remove this method. + (WTF::RefCountedBase::derefBase): + * wtf/SizeLimits.cpp: Adjusted the debug size check for RefCounted. + * wtf/text/CString.h: + (WTF::CStringBuffer::CStringBuffer): Turned off checks for this while a fix is being + done in Chromium's test_shell (bug 58093). + +2011-04-28 Xan Lopez <xlopez@igalia.com> + + Unreviewed attempt to fix the build. + + * GNUmakefile.am: add -lpthread. + +2011-04-28 Oliver Hunt <oliver@apple.com> + + Reviewed by Gavin Barraclough. + + Only need a single implementation of testPrototype + https://bugs.webkit.org/show_bug.cgi?id=59724 + + Remove excess copy of identical testPrototype() code + + * jit/JITPropertyAccess.cpp: + (JSC::JIT::testPrototype): + * jit/JITPropertyAccess32_64.cpp: + +2011-04-28 Xan Lopez <xlopez@igalia.com> + + Reviewed by Martin Robinson. + + [Gtk] Split JSC and WebCore builds + https://bugs.webkit.org/show_bug.cgi?id=19428 + + Build JavaScriptCore as a libtool shared library instead of a + private convenience library. + + * GNUmakefile.am: define new jsc library and adapt to new name for + javascriptcore target. + * GNUmakefile.list.am: ditto. + +2011-04-28 David Kilzer <ddkilzer@apple.com> + + <http://webkit.org/b/59705> WTF::postTimer() leaks a CFRunLoopTimerRef every time it's called + + Reviewed by Simon Fraser. + + * wtf/mac/MainThreadMac.mm: + (WTF::postTimer): Use RetainPtr to plug the leak. + +2011-04-27 Sam Weinig <sam@webkit.org> + + Reviewed by David Kilzer. + + Add way to install testapi in production builds + https://bugs.webkit.org/show_bug.cgi?id=59674 + + * Configurations/TestAPI.xcconfig: Copied from Configurations/JavaScriptCore.xcconfig. + Add configuration file for TestAPI. In addition to name, we now specify an install path + and allow SKIP_INSTALL to be overridden by setting FORCE_TOOL_INSTALL. + + * JavaScriptCore.xcodeproj/project.pbxproj: + Remove in-project build settings and add missing configuration files. Added missing CompilerVersion.xcconfig + file. + +2011-04-27 Adam Barth <abarth@webkit.org> + + Reviewed by David Levin. + + Enable strict OwnPtrs for Chromium + https://bugs.webkit.org/show_bug.cgi?id=59666 + + * wtf/OwnPtr.h: + +2011-04-27 Oliver Hunt <oliver@apple.com> + + Reviewed by Geoffrey Garen. + + Add ability to remove keys from weakmap API + https://bugs.webkit.org/show_bug.cgi?id=59645 + + Add JSWeakObjectMapRemove API + + * API/JSWeakObjectMapRefPrivate.cpp: + * API/JSWeakObjectMapRefPrivate.h: + * JavaScriptCore.exp: + +2011-04-27 Adam Barth <abarth@webkit.org> + + Reviewed by David Levin. + + Enable strict mode for OwnPtr + https://bugs.webkit.org/show_bug.cgi?id=59428 + + This patch enables strict mode for OwnPtr on PLATFORM(MAC) only. + + * wtf/OwnPtr.h: + +2011-04-27 Steve Block <steveblock@google.com> + + Reviewed by David Levin. + + Remove Android build system + https://bugs.webkit.org/show_bug.cgi?id=48111 + + This is to avoid the maintenance burden until the Android port is + fully upstreamed. + + * Android.mk: Removed. + * Android.v8.wtf.mk: Removed. + +2011-04-27 Mark Rowe <mrowe@apple.com> + + Fix 32-bit build after r85036. + + * wtf/Platform.h: USE(PLUGIN_HOST_PROCESS) is only true for 64-bit. + +2011-04-27 Csaba Osztrogonác <ossy@webkit.org> + + Unreviewed buildfix after r85036. + + Readd non-dead code. + + * wtf/OSAllocatorPosix.cpp: + (WTF::OSAllocator::reserveAndCommit): + +2011-04-27 Adam Barth <abarth@webkit.org> + + Reviewed by Kenneth Russell. + + OwnPtr assignment operator should be private + https://bugs.webkit.org/show_bug.cgi?id=59487 + + Unfortunately we can't remove the copy constructor because of some + detail about gcc. (The issue is documented in a comment already.) + + * wtf/OwnPtr.h: + +2011-04-26 Sheriff Bot <webkit.review.bot@gmail.com> + + Unreviewed, rolling out r84977. + http://trac.webkit.org/changeset/84977 + https://bugs.webkit.org/show_bug.cgi?id=59568 + + caused crashes on the SL WK2 bots (Requested by jessieberlin + on #webkit). + + * assembler/MacroAssemblerX86_64.h: + (JSC::MacroAssemblerX86_64::call): + (JSC::MacroAssemblerX86_64::tailRecursiveCall): + (JSC::MacroAssemblerX86_64::makeTailRecursiveCall): + +2011-04-26 Kevin Ollivier <kevino@theolliviers.com> + + Rubberstamped by Eric Seidel. + + Enable waf to be used to build other ports + https://bugs.webkit.org/show_bug.cgi?id=58213 + + * wscript: + +2011-04-26 Sam Weinig <sam@webkit.org> + + Reviewed by David Hyatt. + + Remove Datagrid from the tree + https://bugs.webkit.org/show_bug.cgi?id=59543 + + * Configurations/FeatureDefines.xcconfig: + Remove feature. + +2011-04-26 Adrienne Walker <enne@google.com> + + Reviewed by Geoffrey Garen. + + Fix incorrect use of OwnPtr<T*> in GCActivityCallback + https://bugs.webkit.org/show_bug.cgi?id=59559 + + * runtime/GCActivityCallback.h: + +2011-04-26 Xan Lopez <xlopez@igalia.com> + + Reviewed by Daniel Bates. + + Unused but set variable warning in MacroAssembelX86_64 + https://bugs.webkit.org/show_bug.cgi?id=59482 + + * assembler/MacroAssemblerX86_64.h: + (JSC::MacroAssemblerX86_64::call): do not declare the label + variable if we are not going to use it. + (JSC::MacroAssemblerX86_64::tailRecursiveCall): ditto. + (JSC::MacroAssemblerX86_64::makeTailRecursiveCall): ditto. + +2011-04-26 Dan Bernstein <mitz@apple.com> + + Reviewed by Mark Rowe. + + Choose the compiler based on the Xcode version for Snow Leopard debug builds. + + * Configurations/Base.xcconfig: + * Configurations/CompilerVersion.xcconfig: Added. + +2011-04-25 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Oliver Hunt. + + Nixed special finalizer handling for WebCore strings + https://bugs.webkit.org/show_bug.cgi?id=59425 + + SunSpider reports no change. + + Not needed anymore, since weak handles have finalizers. + + * runtime/JSString.cpp: + (JSC::JSString::resolveRope): + (JSC::JSString::resolveRopeSlowCase): + (JSC::JSString::outOfMemory): + (JSC::JSString::substringFromRope): + (JSC::JSString::replaceCharacter): Updated for removal of union. + + * runtime/JSString.h: + (JSC::RopeBuilder::JSString): + (JSC::RopeBuilder::~JSString): + (JSC::RopeBuilder::appendStringInConstruct): + (JSC::RopeBuilder::appendValueInConstructAndIncrementLength): No need for + union or special constructor anymore. + +2011-04-26 Gabor Loki <loki@webkit.org> + + Reviewed by Csaba Osztrogonác. + + Speeding up SVG filters with multicore (SMP) support + https://bugs.webkit.org/show_bug.cgi?id=43903 + + Some SVG filters execute a huge number of pixel manipulations, which + cannot be sped up by graphics accelerators, since their algorithm is + too complex. Using the power of Symmetric Multi Processing (SMP) we + can split up a task to smaller (data independent) tasks, which can be + executed independently. + + The ParallelJobs framework provides a simple way for distributed + programming. The framework is based on WebKit's threading infrastructure, + Open Multi-Processing's (OpenMP) API, and libdispatch API. + + * GNUmakefile.list.am: + * JavaScriptCore.vcproj/WTF/WTF.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * wtf/CMakeLists.txt: + * wtf/ParallelJobs.h: Added. + (WTF::ParallelJobs::ParallelJobs): + (WTF::ParallelJobs::numberOfJobs): + (WTF::ParallelJobs::parameterForJob): + (WTF::ParallelJobs::executeJobs): + * wtf/ParallelJobsGeneric.cpp: Added. + (WTF::ParallelEnvironment::ThreadPrivate::tryLockFor): + (WTF::ParallelEnvironment::ThreadPrivate::executeJob): + (WTF::ParallelEnvironment::ThreadPrivate::waitForFinish): + (WTF::ParallelEnvironment::ThreadPrivate::workerThread): + * wtf/ParallelJobsGeneric.h: Added. + (WTF::ParallelEnvironment::ParallelEnvironment): + (WTF::ParallelEnvironment::numberOfJobs): + (WTF::ParallelEnvironment::parameterForJob): + (WTF::ParallelEnvironment::executeJobs): + (WTF::ParallelEnvironment::ThreadPrivate::ThreadPrivate): + (WTF::ParallelEnvironment::ThreadPrivate::create): + * wtf/ParallelJobsLibdispatch.h: Added. + (WTF::ParallelEnvironment::ParallelEnvironment): + (WTF::ParallelEnvironment::numberOfJobs): + (WTF::ParallelEnvironment::parameterForJob): + (WTF::ParallelEnvironment::executeJobs): + * wtf/ParallelJobsOpenMP.h: Added. + (WTF::ParallelEnvironment::ParallelEnvironment): + (WTF::ParallelEnvironment::numberOfJobs): + (WTF::ParallelEnvironment::parameterForJob): + (WTF::ParallelEnvironment::executeJobs): + * wtf/Platform.h: + * wtf/wtf.pri: + +2011-04-26 Mihai Parparita <mihaip@chromium.org> + + Reviewed by Adam Barth. + + Turn off make built-in implicit rules for derived sources makefile + https://bugs.webkit.org/show_bug.cgi?id=59418 + + We don't use any of make's built-in implicit rules, turning them off + speeds up parsing of the makefile. + + * JavaScriptCore.xcodeproj/project.pbxproj: + * gyp/generate-derived-sources.sh: + +2011-04-25 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Oliver Hunt. + + Custom prototypes on DOM objects don't persist after garbage collection + https://bugs.webkit.org/show_bug.cgi?id=59412 + + SunSpider reports no change. + + The hasCustomProperties() check didn't check for a custom prototype. + + * runtime/JSObject.h: + (JSC::JSObject::hasCustomProperties): Changed to delegate to Structure + because it is the "truth" about an object's pedigree. + + * runtime/Structure.cpp: + (JSC::Structure::Structure): + * runtime/Structure.h: + (JSC::Structure::didTransition): Track whether a Structure has ever + transitioned for any reason. If so, we have to assume that the object + holding it is custom in some way. + +2011-04-25 Gavin Barraclough <barraclough@apple.com> + + Reviewed by Geoff Garen. + + https://bugs.webkit.org/show_bug.cgi?id=59405 + DFG JIT - add type speculation for integer & array types, for vars & args. + + If a var or argument is used as the base for a GetByVal or PutByVal access + we are speculating that it is of type Array (we only generate code on the + speculative path to perform array accesses). By typing the var or args slot + as Array, and checking on entry to the function (in the case of args), and + each time the local is written to, we can avoid a type check at each point + the array is accessed. This will typically hoist type checks out of loops. + + Similarly, any local that is incremented or decremented, or is the input or + output or a bitwise operator, is likely to be an integer. By typing the + local as int32 we can avoid speculation checks on access, and tagging when + writing to the slot. All accesses can become 32bit instead of 64. + + * dfg/DFGByteCodeParser.cpp: + (JSC::DFG::ByteCodeParser::set): + (JSC::DFG::ByteCodeParser::predictArray): + (JSC::DFG::ByteCodeParser::predictInt32): + (JSC::DFG::ByteCodeParser::parseBlock): + * dfg/DFGGraph.h: + (JSC::DFG::PredictionSlot::PredictionSlot): + (JSC::DFG::Graph::Graph): + (JSC::DFG::Graph::predict): + (JSC::DFG::Graph::getPrediction): + * dfg/DFGJITCompiler.cpp: + (JSC::DFG::JITCompiler::compileFunction): + * dfg/DFGJITCompiler.h: + (JSC::DFG::JITCompiler::tagFor): + (JSC::DFG::JITCompiler::payloadFor): + * dfg/DFGNode.h: + * dfg/DFGNonSpeculativeJIT.cpp: + (JSC::DFG::NonSpeculativeJIT::compile): + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::compile): + (JSC::DFG::SpeculativeJIT::checkArgumentTypes): + (JSC::DFG::SpeculativeJIT::initializeVariableTypes): + * dfg/DFGSpeculativeJIT.h: + * runtime/Executable.cpp: + (JSC::tryDFGCompile): + +2011-04-25 David Levin <levin@chromium.org> + + Reviewed by James Robinson. + + Fix OwnPtr strict mode violation in MessageQueue.h + https://bugs.webkit.org/show_bug.cgi?id=59400 + + * wtf/MessageQueue.h: + (WTF::::waitForMessage): + (WTF::::waitForMessageFilteredWithTimeout): + (WTF::::tryGetMessage): + +2011-04-25 Adam Barth <abarth@webkit.org> + + Reviewed by Darin Adler. + + JavaScriptCore should play nice strict OwnPtrs + https://bugs.webkit.org/show_bug.cgi?id=59401 + + * dfg/DFGByteCodeParser.cpp: + (JSC::DFG::ByteCodeParser::parse): + * heap/Heap.cpp: + (JSC::TypeCounter::TypeCounter): + * jit/JITStubs.cpp: + (JSC::JITThunks::JITThunks): + * parser/JSParser.cpp: + (JSC::JSParser::Scope::Scope): + * yarr/YarrJIT.cpp: + (JSC::Yarr::YarrGenerator::GenerationState::addParenthesesTail): + +2011-04-25 Mark Rowe <mrowe@apple.com> + + Build fix. + + * wtf/ListHashSet.h: + +2011-04-25 Gavin Barraclough <barraclough@apple.com> + + Reviewed by Oliver Hunt. + + Bug 59370 - DFG JIT - fix leak of BlocksBlocks + (put the blocks immediately into an OwnPtr). + + * dfg/DFGByteCodeParser.cpp: + (JSC::DFG::ByteCodeParser::parse): + +2011-04-25 James Robinson <jamesr@chromium.org> + + Reviewed by David Levin. + + Fix strict OwnPtr violations in ListHashSet and RenderLayerCompositor + https://bugs.webkit.org/show_bug.cgi?id=59353 + + * wtf/ListHashSet.h: + (WTF::::ListHashSet): + +2011-04-25 David Levin <levin@chromium.org> + + Reviewed by Adam Barth. + + Fix PassOwnPtr issues in Structure and JSGlobalData.cpp + https://bugs.webkit.org/show_bug.cgi?id=59347 + + * runtime/JSGlobalData.cpp: + (JSC::JSGlobalData::JSGlobalData): + * runtime/Structure.cpp: + (JSC::Structure::copyPropertyTable): + (JSC::Structure::createPropertyMap): + * runtime/Structure.h: + +2011-04-25 Oliver Hunt <oliver@apple.com> + + Reviewed by Geoffrey Garen. + + Make ClassInfo required when creating a Structure + https://bugs.webkit.org/show_bug.cgi?id=59340 + + Add ClassInfo to all those types which currently don't + have it, and add an assertion to Structure::create to + ensure that the provided classInfo is not null. + + * runtime/Executable.h: + (JSC::EvalExecutable::createStructure): + (JSC::ProgramExecutable::createStructure): + (JSC::FunctionExecutable::createStructure): + * runtime/GetterSetter.cpp: + * runtime/GetterSetter.h: + (JSC::GetterSetter::createStructure): + * runtime/JSAPIValueWrapper.cpp: + * runtime/JSAPIValueWrapper.h: + (JSC::JSAPIValueWrapper::createStructure): + * runtime/JSCell.cpp: + * runtime/JSCell.h: + * runtime/JSString.cpp: + * runtime/JSString.h: + (JSC::RopeBuilder::createStructure): + * runtime/Structure.h: + (JSC::Structure::create): + (JSC::JSCell::createDummyStructure): + +2011-04-25 David Levin <levin@chromium.org> + + Reviewed by Adam Barth. + + PropertyMapHashTable.h should use adoptPtr instead of implicit conversions to PassRefPtr. + https://bugs.webkit.org/show_bug.cgi?id=59342 + + This patch is to prepare for the strict OwnPtr hack-a-thon. + + * runtime/PropertyMapHashTable.h: + (JSC::PropertyTable::copy): + +2011-04-25 Thouraya ANDOLSI <thouraya.andolsi@st.com> + + Reviewed by Gavin Barraclough. + + Rationalize MacroAssembler branch methods + https://bugs.webkit.org/show_bug.cgi?id=58950 + + split out the 'Condition' enum into 'RelationalCondition' and 'ResultCondition' + and apply related changes (only for SH4 platforms). + + * assembler/MacroAssemblerSH4.cpp: + * assembler/MacroAssemblerSH4.h: + (JSC::MacroAssemblerSH4::compare32): + (JSC::MacroAssemblerSH4::branch32WithUnalignedHalfWords): + (JSC::MacroAssemblerSH4::branchDouble): + (JSC::MacroAssemblerSH4::branch32): + (JSC::MacroAssemblerSH4::branchTest8): + (JSC::MacroAssemblerSH4::branch8): + (JSC::MacroAssemblerSH4::branchTruncateDoubleToInt32): + (JSC::MacroAssemblerSH4::test8): + (JSC::MacroAssemblerSH4::branch16): + (JSC::MacroAssemblerSH4::branchTest32): + (JSC::MacroAssemblerSH4::branchAdd32): + (JSC::MacroAssemblerSH4::branchMul32): + (JSC::MacroAssemblerSH4::branchSub32): + (JSC::MacroAssemblerSH4::branchOr32): + (JSC::MacroAssemblerSH4::branchConvertDoubleToInt32): + (JSC::MacroAssemblerSH4::branchPtrWithPatch): + (JSC::MacroAssemblerSH4::SH4Condition): + * assembler/SH4Assembler.h: + (JSC::SH4Assembler::cmpEqImmR0): + +2011-04-25 Adam Barth <abarth@webkit.org> + + Reviewed by Eric Seidel. + + PropertyMapHashTable should work with strict OwnPtr + https://bugs.webkit.org/show_bug.cgi?id=59337 + + This patch is in preparation for the strict OwnPtr hack-a-thon. + + * runtime/PropertyMapHashTable.h: + (JSC::PropertyTable::PropertyTable): + (JSC::PropertyTable::addDeletedOffset): + +2011-04-25 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Sam Weinig. + + Nixed MarkStack::deprecatedAppend, since it has no clients left. + + * heap/MarkStack.h: + +2011-04-23 Gavin Barraclough <barraclough@apple.com> + + Reviewed by Oliver Hunt. + + Bug 59287 - DFG JIT - Handle temporaries as vars, allowing support for ?: + + SetLocals to temporaries will only be generated if they are used within other + blocks, due to the SSA based DCE. + + * dfg/DFGByteCodeParser.cpp: + (JSC::DFG::ByteCodeParser::ByteCodeParser): + (JSC::DFG::ByteCodeParser::get): + (JSC::DFG::ByteCodeParser::set): + (JSC::DFG::ByteCodeParser::getLocal): + (JSC::DFG::ByteCodeParser::setLocal): + (JSC::DFG::ByteCodeParser::parseBlock): + (JSC::DFG::ByteCodeParser::processPhiStack): + (JSC::DFG::ByteCodeParser::allocateVirtualRegisters): + (JSC::DFG::ByteCodeParser::parse): + * dfg/DFGGraph.h: + (JSC::DFG::BasicBlock::BasicBlock): + +2011-04-22 Gavin Barraclough <barraclough@apple.com> + + Reviewed by Sam Weinig & Geoff Garen. + + Bug 59266 - DFG JIT - Add SSA style DCE + + This works by making GetLocal nodes reference SetLocal nodes from prior blocks, + via intermediate Phi nodes. Whenever we add a GetLocal to the graph, also add a + matching child Phi, and add the Phi to a work queue to add references to prior + definitions once we have the full CFG & can determine predecessors. This process + is iterative, inserting new phis into predecessors as necessary. + + * dfg/DFGByteCodeParser.cpp: + (JSC::DFG::ByteCodeParser::getVariable): + (JSC::DFG::ByteCodeParser::setVariable): + (JSC::DFG::ByteCodeParser::getArgument): + (JSC::DFG::ByteCodeParser::setArgument): + (JSC::DFG::ByteCodeParser::parseBlock): + (JSC::DFG::ByteCodeParser::processWorkQueue): + (JSC::DFG::ByteCodeParser::allocateVirtualRegisters): + (JSC::DFG::ByteCodeParser::parse): + * dfg/DFGGraph.cpp: + (JSC::DFG::Graph::dump): + (JSC::DFG::Graph::refChildren): + * dfg/DFGGraph.h: + (JSC::DFG::Graph::ref): + * dfg/DFGNode.h: + (JSC::DFG::Node::ref): + * dfg/DFGNonSpeculativeJIT.cpp: + (JSC::DFG::NonSpeculativeJIT::compile): + * dfg/DFGScoreBoard.h: + (JSC::DFG::ScoreBoard::~ScoreBoard): + (JSC::DFG::ScoreBoard::dump): + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::compile): + +2011-04-22 Vitaly Repeshko <vitalyr@chromium.org> + + Reviewed by Adam Barth. + + Add missing default constructors for HashMap iterator specializations. + https://bugs.webkit.org/show_bug.cgi?id=59250 + + * wtf/HashIterators.h: + * wtf/HashTable.h: + (WTF::HashTableConstIterator::HashTableConstIterator): Added cast + to help compiler find the function template. + +2011-04-22 Gavin Barraclough <barraclough@apple.com> + + Reviewed by Sam Weinig. + + Bug 59262 - DFG JIT - reduce size of VariableRecord + + We never need both the get & set node, only the most recent + (which is always a set, if both exist). + + * dfg/DFGByteCodeParser.cpp: + (JSC::DFG::ByteCodeParser::getVariable): + (JSC::DFG::ByteCodeParser::setVariable): + (JSC::DFG::ByteCodeParser::getArgument): + (JSC::DFG::ByteCodeParser::setArgument): + (JSC::DFG::ByteCodeParser::parseBlock): + * dfg/DFGGraph.h: + (JSC::DFG::VariableRecord::VariableRecord): + +2011-04-22 Gavin Barraclough <barraclough@apple.com> + + Reviewed by Geoffrey Garen. + + Bug 59254 - DFG JIT - retain VariableRecords for args/var in all basic blocks, + such that this information is available for DCE. Also, since this enlarges the + size of BasicBlock, make Graph hold a vector of pointers to basic blocks, not a + vector of blocks. + + * dfg/DFGByteCodeParser.cpp: + (JSC::DFG::ByteCodeParser::ByteCodeParser): + (JSC::DFG::ByteCodeParser::get): + (JSC::DFG::ByteCodeParser::set): + (JSC::DFG::ByteCodeParser::getVariable): + (JSC::DFG::ByteCodeParser::setVariable): + (JSC::DFG::ByteCodeParser::getArgument): + (JSC::DFG::ByteCodeParser::setArgument): + (JSC::DFG::ByteCodeParser::parseBlock): + (JSC::DFG::ByteCodeParser::setupPredecessors): + (JSC::DFG::ByteCodeParser::allocateVirtualRegisters): + (JSC::DFG::ByteCodeParser::parse): + * dfg/DFGGraph.cpp: + (JSC::DFG::Graph::dump): + * dfg/DFGGraph.h: + (JSC::DFG::VariableRecord::VariableRecord): + (JSC::DFG::BasicBlock::BasicBlock): + (JSC::DFG::BasicBlock::getBytecodeBegin): + (JSC::DFG::Graph::blockIndexForBytecodeOffset): + (JSC::DFG::Graph::blockForBytecodeOffset): + * dfg/DFGNonSpeculativeJIT.cpp: + (JSC::DFG::NonSpeculativeJIT::compile): + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::compile): + * dfg/DFGSpeculativeJIT.h: + (JSC::DFG::SpeculativeJIT::detectPeepHoleBranch): + +2011-04-22 Gavin Barraclough <barraclough@apple.com> + + Errk, build fix. + + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::compile): + +2011-04-22 Gavin Barraclough <barraclough@apple.com> + + Reviewed by Sam Weinig. + + Quick cleanup to SpeculativeJIT/NonSpeculativeJIT compile loop, + move out the call to checkConsistency(). + + * dfg/DFGNonSpeculativeJIT.cpp: + (JSC::DFG::NonSpeculativeJIT::compile): + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::compile): + * dfg/DFGSpeculativeJIT.h: + (JSC::DFG::SpeculativeJIT::SpeculativeJIT): + (JSC::DFG::SpeculativeJIT::terminateSpeculativeExecution): + +2011-04-21 Vitaly Repeshko <vitalyr@chromium.org> + + Reviewed by Adam Barth. + + Provide default constructors for HashMap iterators. + https://bugs.webkit.org/show_bug.cgi?id=59151 + + These will be used to implement an iterator over EventTarget's + listeners. + + * wtf/HashTable.h: + (WTF::HashTableConstIteratorAdapter::HashTableConstIteratorAdapter): + (WTF::HashTableIteratorAdapter::HashTableIteratorAdapter): + +2011-04-22 Gavin Barraclough <barraclough@apple.com> + + Reviewed by Geoff Garen. + + Bug 59232 - DFG JIT - Add predecessor links to BasicBlocks + + These will be necessary for DCE support. + Also factor allocateVirtualRegisters out into its own method. + + * dfg/DFGByteCodeParser.cpp: + (JSC::DFG::ByteCodeParser::setupPredecessors): + (JSC::DFG::ByteCodeParser::allocateVirtualRegisters): + (JSC::DFG::ByteCodeParser::parse): + * dfg/DFGGraph.h: + (JSC::DFG::Graph::blockForBytecodeOffset): + * dfg/DFGNode.h: + (JSC::DFG::Node::isTerminal): + +2011-04-22 Oliver Hunt <oliver@apple.com> + + Reviewed by Geoffrey Garen. + + Object.create creates uncachable objects + https://bugs.webkit.org/show_bug.cgi?id=59164 + + Use the prototype object's inheritorID, as we + should always have done + + * runtime/JSGlobalObject.cpp: + (JSC::JSGlobalObject::reset): + (JSC::JSGlobalObject::visitChildren): + * runtime/JSGlobalObject.h: + (JSC::JSGlobalObject::nullPrototypeObjectStructure): + * runtime/ObjectConstructor.cpp: + (JSC::objectConstructorCreate): + +2011-04-22 Gavin Barraclough <barraclough@apple.com> + + Reviewed by Sam Weinig. + + Bug 59222 - DFG JIT - don't allocate virtual registers to nodes with no result + + We currently allocate virtual registers to nodes which have no result - these are + clearly unused, and may result in us allocating a larger than necessary stack frame. + + Encapsulate Node::virtualRegister such that we can ASSERT this is only called on + nodes that have results, and improve the quality of output from the consistency check. + + * dfg/DFGByteCodeParser.cpp: + (JSC::DFG::ByteCodeParser::parse): + * dfg/DFGGraph.cpp: + (JSC::DFG::Graph::dump): + * dfg/DFGGraph.h: + (JSC::DFG::Graph::ref): + (JSC::DFG::Graph::deref): + * dfg/DFGJITCodeGenerator.cpp: + (JSC::DFG::JITCodeGenerator::fillInteger): + (JSC::DFG::JITCodeGenerator::fillDouble): + (JSC::DFG::JITCodeGenerator::fillJSValue): + (JSC::DFG::JITCodeGenerator::dump): + (JSC::DFG::JITCodeGenerator::checkConsistency): + * dfg/DFGJITCodeGenerator.h: + (JSC::DFG::JITCodeGenerator::canReuse): + (JSC::DFG::JITCodeGenerator::isFilled): + (JSC::DFG::JITCodeGenerator::isFilledDouble): + (JSC::DFG::JITCodeGenerator::use): + (JSC::DFG::JITCodeGenerator::integerResult): + (JSC::DFG::JITCodeGenerator::noResult): + (JSC::DFG::JITCodeGenerator::cellResult): + (JSC::DFG::JITCodeGenerator::jsValueResult): + (JSC::DFG::JITCodeGenerator::doubleResult): + (JSC::DFG::JITCodeGenerator::initConstantInfo): + * dfg/DFGJITCompiler.cpp: + (JSC::DFG::JITCompiler::fillNumericToDouble): + (JSC::DFG::JITCompiler::fillInt32ToInteger): + (JSC::DFG::JITCompiler::fillToJS): + (JSC::DFG::JITCompiler::jumpFromSpeculativeToNonSpeculative): + * dfg/DFGNode.h: + (JSC::DFG::Node::Node): + (JSC::DFG::Node::hasResult): + (JSC::DFG::Node::virtualRegister): + (JSC::DFG::Node::setVirtualRegister): + (JSC::DFG::Node::refCount): + (JSC::DFG::Node::ref): + (JSC::DFG::Node::deref): + (JSC::DFG::Node::adjustedRefCount): + * dfg/DFGNonSpeculativeJIT.cpp: + (JSC::DFG::NonSpeculativeJIT::isKnownInteger): + (JSC::DFG::NonSpeculativeJIT::isKnownNumeric): + (JSC::DFG::NonSpeculativeJIT::compile): + * dfg/DFGScoreBoard.h: + (JSC::DFG::ScoreBoard::use): + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::fillSpeculateIntInternal): + (JSC::DFG::SpeculativeJIT::fillSpeculateCell): + (JSC::DFG::SpeculativeJIT::compile): + +2011-04-22 Sam Weinig <sam@webkit.org> + + Reviewed by Gavin Barraclough and Oliver Hunt. + + Arrays should participate in global object forwarding fun + https://bugs.webkit.org/show_bug.cgi?id=59215 + + * runtime/JSGlobalObject.h: + (JSC::constructEmptyArray): + (JSC::constructArray): + Add variants of constructArray that take a global object. + +2011-04-22 Sheriff Bot <webkit.review.bot@gmail.com> + + Unreviewed, rolling out r84650 and r84654. + http://trac.webkit.org/changeset/84650 + http://trac.webkit.org/changeset/84654 + https://bugs.webkit.org/show_bug.cgi?id=59218 + + Broke Windows build (Requested by bweinstein on #webkit). + + * API/JSCallbackObjectFunctions.h: + (JSC::::init): + * JavaScriptCore.exp: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * heap/Handle.h: + (JSC::HandleBase::operator!): + (JSC::HandleBase::operator UnspecifiedBoolType*): + (JSC::HandleTypes::getFromSlot): + * heap/HandleHeap.cpp: + (JSC::HandleHeap::markStrongHandles): + (JSC::HandleHeap::markWeakHandles): + (JSC::HandleHeap::finalizeWeakHandles): + (JSC::HandleHeap::writeBarrier): + (JSC::HandleHeap::protectedGlobalObjectCount): + (JSC::HandleHeap::isValidWeakNode): + * heap/HandleHeap.h: + (JSC::HandleHeap::copyWeak): + (JSC::HandleHeap::makeWeak): + (JSC::HandleHeap::Node::slot): + * heap/HandleStack.cpp: + (JSC::HandleStack::mark): + (JSC::HandleStack::grow): + * heap/HandleStack.h: + (JSC::HandleStack::zapTo): + (JSC::HandleStack::push): + * heap/Heap.cpp: + (JSC::HandleHeap::protectedObjectTypeCounts): + * heap/Local.h: + (JSC::::set): + * heap/Strong.h: + (JSC::Strong::set): + * heap/Weak.h: + (JSC::Weak::set): + * runtime/StructureTransitionTable.h: + (JSC::StructureTransitionTable::singleTransition): + (JSC::StructureTransitionTable::setSingleTransition): + * runtime/WeakGCMap.h: + (JSC::WeakGCMap::add): + (JSC::WeakGCMap::set): + * runtime/WriteBarrier.h: + +2011-04-22 Brian Weinstein <bweinstein@apple.com> + + Part of Windows build fix from r84650. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + +2011-04-22 Oliver Hunt <oliver@apple.com> + + Reviewed by Geoffrey Garen. + + Make it harder to use HandleSlot incorrectly + https://bugs.webkit.org/show_bug.cgi?id=59205 + + Just add a little type fudging to make it harder to + incorrectly assign through a HandleSlot. + + * API/JSCallbackObjectFunctions.h: + (JSC::::init): + * JavaScriptCore.exp: + * heap/Handle.h: + (JSC::HandleBase::operator!): + (JSC::HandleBase::operator UnspecifiedBoolType*): + (JSC::HandleTypes::getFromSlot): + * heap/HandleHeap.cpp: + (JSC::HandleHeap::markStrongHandles): + (JSC::HandleHeap::markWeakHandles): + (JSC::HandleHeap::finalizeWeakHandles): + (JSC::HandleHeap::writeBarrier): + (JSC::HandleHeap::protectedGlobalObjectCount): + (JSC::HandleHeap::isValidWeakNode): + * heap/HandleHeap.h: + (JSC::HandleHeap::copyWeak): + (JSC::HandleHeap::makeWeak): + (JSC::HandleHeap::Node::slot): + * heap/HandleStack.cpp: + (JSC::HandleStack::mark): + (JSC::HandleStack::grow): + * heap/HandleStack.h: + (JSC::HandleStack::zapTo): + (JSC::HandleStack::push): + * heap/Heap.cpp: + (JSC::HandleHeap::protectedObjectTypeCounts): + * heap/Local.h: + (JSC::::set): + * heap/Strong.h: + (JSC::Strong::set): + * heap/Weak.h: + (JSC::Weak::set): + * runtime/StructureTransitionTable.h: + (JSC::StructureTransitionTable::singleTransition): + (JSC::StructureTransitionTable::setSingleTransition): + * runtime/WeakGCMap.h: + (JSC::WeakGCMap::add): + (JSC::WeakGCMap::set): + * runtime/WriteBarrier.h: + (JSC::OpaqueJSValue::toJSValue): + (JSC::OpaqueJSValue::toJSValueRef): + (JSC::OpaqueJSValue::fromJSValue): + +2011-04-22 Patrick Gansterer <paroga@webkit.org> + + Unreviewed. Build fix for ENABLE(INTERPRETER) after r84556. + + * bytecode/CodeBlock.cpp: + (JSC::CodeBlock::visitAggregate): + +2011-04-21 Sheriff Bot <webkit.review.bot@gmail.com> + + Unreviewed, rolling out r84583. + http://trac.webkit.org/changeset/84583 + https://bugs.webkit.org/show_bug.cgi?id=59173 + + "broke + http://trac.webkit.org/export/84593/trunk/LayoutTests/fast/js + /Object-create.html" (Requested by ggaren on #webkit). + + * runtime/ObjectConstructor.cpp: + (JSC::objectConstructorCreate): + +2011-04-21 Maciej Stachowiak <mjs@apple.com> + + Reviewed by Adam Roben. + + Add a feature define to allow <details> and <summary> to be disabled + https://bugs.webkit.org/show_bug.cgi?id=59118 + <rdar://problem/9257045> + + * Configurations/FeatureDefines.xcconfig: + +2011-04-21 Oliver Hunt <oliver@apple.com> + + Reviewed by Geoffrey Garen. + + Object.create creates uncachable objects + https://bugs.webkit.org/show_bug.cgi?id=59164 + + Use the prototype object's inheritorID, as we + should always have done + + * runtime/ObjectConstructor.cpp: + (JSC::objectConstructorCreate): + +2011-04-21 Oliver Hunt <oliver@apple.com> + + Reviewed by Geoffrey Garen. + + Start moving to a general visitor pattern for GC traversal + https://bugs.webkit.org/show_bug.cgi?id=59141 + + This is just a rename: + markChildren -> visitChildren + markAggregate -> visitAggregate + markStack -> visitor + MarkStack -> typedef'd to SlotVisitor + + * API/JSCallbackObject.h: + (JSC::JSCallbackObjectData::visitChildren): + (JSC::JSCallbackObjectData::JSPrivatePropertyMap::visitChildren): + (JSC::JSCallbackObject::visitChildren): + * JavaScriptCore.exp: + * bytecode/CodeBlock.cpp: + (JSC::CodeBlock::visitStructures): + (JSC::EvalCodeCache::visitAggregate): + (JSC::CodeBlock::visitAggregate): + * bytecode/CodeBlock.h: + * bytecode/EvalCodeCache.h: + * bytecode/Instruction.h: + (JSC::PolymorphicAccessStructureList::visitAggregate): + * bytecode/StructureStubInfo.cpp: + (JSC::StructureStubInfo::visitAggregate): + * bytecode/StructureStubInfo.h: + * debugger/DebuggerActivation.cpp: + (JSC::DebuggerActivation::visitChildren): + * debugger/DebuggerActivation.h: + * heap/HandleHeap.cpp: + (JSC::WeakHandleOwner::isReachableFromOpaqueRoots): + (JSC::HandleHeap::markStrongHandles): + (JSC::HandleHeap::markWeakHandles): + * heap/HandleHeap.h: + * heap/HandleStack.cpp: + (JSC::HandleStack::mark): + * heap/HandleStack.h: + * heap/Heap.cpp: + (JSC::Heap::markProtectedObjects): + (JSC::Heap::markTempSortVectors): + (JSC::Heap::markRoots): + * heap/Heap.h: + * heap/MarkStack.cpp: + (JSC::MarkStack::visitChildren): + (JSC::MarkStack::drain): + * heap/MarkStack.h: + (JSC::HeapRootVisitor::HeapRootVisitor): + (JSC::HeapRootVisitor::mark): + (JSC::HeapRootVisitor::visitor): + * heap/MarkedSpace.h: + * runtime/ArgList.cpp: + (JSC::MarkedArgumentBuffer::markLists): + * runtime/ArgList.h: + * runtime/Arguments.cpp: + (JSC::Arguments::visitChildren): + * runtime/Arguments.h: + * runtime/Executable.cpp: + (JSC::EvalExecutable::visitChildren): + (JSC::ProgramExecutable::visitChildren): + (JSC::FunctionExecutable::visitChildren): + * runtime/Executable.h: + * runtime/GetterSetter.cpp: + (JSC::GetterSetter::visitChildren): + * runtime/GetterSetter.h: + (JSC::GetterSetter::createStructure): + * runtime/JSAPIValueWrapper.h: + (JSC::JSAPIValueWrapper::createStructure): + * runtime/JSActivation.cpp: + (JSC::JSActivation::visitChildren): + * runtime/JSActivation.h: + * runtime/JSArray.cpp: + (JSC::JSArray::visitChildren): + * runtime/JSArray.h: + (JSC::JSArray::visitDirect): + * runtime/JSCell.h: + (JSC::JSCell::JSCell::visitChildren): + * runtime/JSFunction.cpp: + (JSC::JSFunction::visitChildren): + * runtime/JSFunction.h: + * runtime/JSGlobalObject.cpp: + (JSC::visitIfNeeded): + (JSC::JSGlobalObject::visitChildren): + * runtime/JSGlobalObject.h: + * runtime/JSONObject.cpp: + * runtime/JSObject.cpp: + (JSC::JSObject::visitChildren): + * runtime/JSObject.h: + (JSC::JSObject::visitDirect): + * runtime/JSPropertyNameIterator.cpp: + (JSC::JSPropertyNameIterator::visitChildren): + * runtime/JSPropertyNameIterator.h: + (JSC::JSPropertyNameIterator::createStructure): + * runtime/JSStaticScopeObject.cpp: + (JSC::JSStaticScopeObject::visitChildren): + * runtime/JSStaticScopeObject.h: + * runtime/JSTypeInfo.h: + (JSC::TypeInfo::TypeInfo): + (JSC::TypeInfo::overridesVisitChildren): + * runtime/JSWrapperObject.cpp: + (JSC::JSWrapperObject::visitChildren): + * runtime/JSWrapperObject.h: + * runtime/JSZombie.h: + (JSC::JSZombie::visitChildren): + * runtime/NativeErrorConstructor.cpp: + (JSC::NativeErrorConstructor::visitChildren): + * runtime/NativeErrorConstructor.h: + * runtime/RegExpObject.cpp: + (JSC::RegExpObject::visitChildren): + * runtime/RegExpObject.h: + * runtime/ScopeChain.cpp: + (JSC::ScopeChainNode::visitChildren): + * runtime/ScopeChain.h: + * runtime/SmallStrings.cpp: + (JSC::SmallStrings::visitChildren): + * runtime/SmallStrings.h: + * runtime/Structure.cpp: + (JSC::Structure::Structure): + (JSC::Structure::visitChildren): + * runtime/Structure.h: + * runtime/StructureChain.cpp: + (JSC::StructureChain::visitChildren): + * runtime/StructureChain.h: + (JSC::StructureChain::createStructure): + +2011-04-21 Sheriff Bot <webkit.review.bot@gmail.com> + + Unreviewed, rolling out r84548. + http://trac.webkit.org/changeset/84548 + https://bugs.webkit.org/show_bug.cgi?id=59144 + + Broke chromium-win build (Requested by aklein on #webkit). + + * wtf/Platform.h: + +2011-04-21 Adam Klein <adamk@chromium.org> + + Reviewed by David Levin. + + [fileapi] Worker File API calls that create Blobs fail in debug builds due to random number generator thread assertion + https://bugs.webkit.org/show_bug.cgi?id=55728 + + Enable WTF_MULTIPLE_THREADS for Chromium. + + * wtf/Platform.h: + +2011-04-20 Michael Saboff <msaboff@apple.com> + + Reviewed by Geoff Garen. + + JSString::resolveRope inefficient for common 2 fiber case + https://bugs.webkit.org/show_bug.cgi?id=58994 + + Split JSString::resolveRope into three routines. + resolveRope allocates the new buffer and handles the 1 or 2 + fiber case with single level fibers. + resolveRopeSlowCase handles the general case. + outOfMemory handles the rare out of memory exception case. + + * runtime/JSString.cpp: + (JSC::JSString::resolveRope): + (JSC::JSString::resolveRopeSlowCase): + (JSC::JSString::outOfMemory): + * runtime/JSString.h: + +2011-04-20 Adam Klein <adamk@chromium.org> + + Reviewed by David Levin. + + Rename all uses of JSC_MULTIPLE_THREADS under wtf/... to WTF_MULTIPLE_THREADS + https://bugs.webkit.org/show_bug.cgi?id=59040 + + This will be used to fix https://bugs.webkit.org/show_bug.cgi?id=55728 + by enabling WTF_MULTIPLE_THREADS for Chromium. + + * wtf/CryptographicallyRandomNumber.cpp: + (WTF::ARC4Stream::ARC4RandomNumberGenerator::randomNumber): + (WTF::ARC4Stream::ARC4RandomNumberGenerator::randomValues): + * wtf/FastMalloc.cpp: + * wtf/Platform.h: + Enable WTF_MULTIPLE_THREADS whenever JSC_MULTIPLE_THREADS is enabled. + * wtf/RandomNumber.cpp: + (WTF::randomNumber): + * wtf/RefCountedLeakCounter.cpp: + (WTF::RefCountedLeakCounter::increment): + (WTF::RefCountedLeakCounter::decrement): + * wtf/dtoa.cpp: + (WTF::pow5mult): + +2011-04-20 Gavin Barraclough <barraclough@apple.com> + + Rubber stamped by Geoff Garen + + Bug 59069 - DFG JIT - register allocate r8, r9, r10 + + * dfg/DFGJITCompiler.h: + (JSC::DFG::JITCompiler::gprToRegisterID): + +2011-04-20 Gavin Barraclough <barraclough@apple.com> + + Build fix - revert accidental change. + + * wtf/Platform.h: + +2011-04-20 Gavin Barraclough <barraclough@apple.com> + + Reviewed by Sam Weinig. + + Add SAMPLING_FLAGS tool to DFG JIT. + + * bytecode/SamplingTool.h: + (JSC::SamplingFlags::addressOfFlags): + * dfg/DFGJITCompiler.cpp: + (JSC::DFG::JITCompiler::setSamplingFlag): + (JSC::DFG::JITCompiler::clearSamplingFlag): + * dfg/DFGJITCompiler.h: + * jit/JITInlineMethods.h: + (JSC::JIT::setSamplingFlag): + (JSC::JIT::clearSamplingFlag): + * wtf/Platform.h: + +2011-04-20 Gavin Barraclough <barraclough@apple.com> + + Reviewed by Oliver Hunt. + + Bug 59022 - DFG JIT - Optimize branch-on-relational-compare + + If a relational compare (< or <=) is immediately followed by a branch, + we can combine the two, avoiding generation of a boolean into a register. + + * assembler/MacroAssemblerX86Common.h: + (JSC::MacroAssemblerX86Common::branch32): + (JSC::MacroAssemblerX86Common::invert): + (JSC::MacroAssemblerX86Common::commute): + * dfg/DFGNode.h: + (JSC::DFG::Node::adjustedRefCount): + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::compilePeepHoleBranch): + (JSC::DFG::SpeculativeJIT::compile): + * dfg/DFGSpeculativeJIT.h: + (JSC::DFG::SpeculativeJIT::isJSConstantWithInt32Value): + (JSC::DFG::SpeculativeJIT::detectPeepHoleBranch): + +2011-04-20 Gavin Barraclough <barraclough@apple.com> + + ARMv7 build fix II. + + * jit/JITOpcodes32_64.cpp: + (JSC::JIT::softModulo): + +2011-04-20 Gavin Barraclough <barraclough@apple.com> + + ARMv7 build fix. + + * assembler/MacroAssemblerARM.h: + (JSC::MacroAssemblerARM::test8): + +2011-04-19 Gavin Barraclough <barraclough@apple.com> + + Reviewed by Oliver Hunt. + + Rationalize MacroAssembler branch methods + https://bugs.webkit.org/show_bug.cgi?id=58950 + + The MacroAssembler currently exposes x86's weird behaviour that the 'setcc' + instruction only sets the low 8 bits of a register. Stop that. + + Having done so, to clarify remove the 'set32' prefix from test & compare + instructions - these methods all now set a full 32/64 bit register (Ptr size). + The size in the function name should indicate the amount of data being compared. + + Also split out the 'Condition' enum into 'RelationalCondition' and + 'ResultCondition'. The former is used in binary comparison, the latter is a unary + condition check on the result of an operation. + + * JavaScriptCore.xcodeproj/project.pbxproj: + * assembler/MacroAssembler.h: + (JSC::MacroAssembler::branchPtr): + (JSC::MacroAssembler::branch32): + (JSC::MacroAssembler::branch16): + (JSC::MacroAssembler::branchTestPtr): + (JSC::MacroAssembler::comparePtr): + (JSC::MacroAssembler::branchAddPtr): + (JSC::MacroAssembler::branchSubPtr): + (JSC::MacroAssembler::branchTest8): + * assembler/MacroAssemblerARM.h: + (JSC::MacroAssemblerARM::branch8): + (JSC::MacroAssemblerARM::branch32): + (JSC::MacroAssemblerARM::branch32WithUnalignedHalfWords): + (JSC::MacroAssemblerARM::branch16): + (JSC::MacroAssemblerARM::branchTest8): + (JSC::MacroAssemblerARM::branchTest32): + (JSC::MacroAssemblerARM::branchAdd32): + (JSC::MacroAssemblerARM::branchMul32): + (JSC::MacroAssemblerARM::branchSub32): + (JSC::MacroAssemblerARM::branchNeg32): + (JSC::MacroAssemblerARM::branchOr32): + (JSC::MacroAssemblerARM::compare32): + (JSC::MacroAssemblerARM::test32): + (JSC::MacroAssemblerARM::test8): + (JSC::MacroAssemblerARM::branchPtrWithPatch): + (JSC::MacroAssemblerARM::ARMCondition): + * assembler/MacroAssemblerARMv7.h: + (JSC::MacroAssemblerARMv7::branch32): + (JSC::MacroAssemblerARMv7::branch32WithUnalignedHalfWords): + (JSC::MacroAssemblerARMv7::branch16): + (JSC::MacroAssemblerARMv7::branch8): + (JSC::MacroAssemblerARMv7::branchTest32): + (JSC::MacroAssemblerARMv7::branchTest8): + (JSC::MacroAssemblerARMv7::branchAdd32): + (JSC::MacroAssemblerARMv7::branchMul32): + (JSC::MacroAssemblerARMv7::branchOr32): + (JSC::MacroAssemblerARMv7::branchSub32): + (JSC::MacroAssemblerARMv7::compare32): + (JSC::MacroAssemblerARMv7::test32): + (JSC::MacroAssemblerARMv7::test8): + (JSC::MacroAssemblerARMv7::branchPtrWithPatch): + (JSC::MacroAssemblerARMv7::makeBranch): + (JSC::MacroAssemblerARMv7::armV7Condition): + * assembler/MacroAssemblerMIPS.h: + (JSC::MacroAssemblerMIPS::branch8): + (JSC::MacroAssemblerMIPS::branch32): + (JSC::MacroAssemblerMIPS::branch32WithUnalignedHalfWords): + (JSC::MacroAssemblerMIPS::branch16): + (JSC::MacroAssemblerMIPS::branchTest32): + (JSC::MacroAssemblerMIPS::branchTest8): + (JSC::MacroAssemblerMIPS::branchAdd32): + (JSC::MacroAssemblerMIPS::branchMul32): + (JSC::MacroAssemblerMIPS::branchSub32): + (JSC::MacroAssemblerMIPS::branchOr32): + (JSC::MacroAssemblerMIPS::compare32): + (JSC::MacroAssemblerMIPS::test8): + (JSC::MacroAssemblerMIPS::test32): + (JSC::MacroAssemblerMIPS::branchPtrWithPatch): + * assembler/MacroAssemblerX86.h: + (JSC::MacroAssemblerX86::branch32): + (JSC::MacroAssemblerX86::branchPtrWithPatch): + * assembler/MacroAssemblerX86Common.h: + (JSC::MacroAssemblerX86Common::branch8): + (JSC::MacroAssemblerX86Common::branch32): + (JSC::MacroAssemblerX86Common::branch32WithUnalignedHalfWords): + (JSC::MacroAssemblerX86Common::branch16): + (JSC::MacroAssemblerX86Common::branchTest32): + (JSC::MacroAssemblerX86Common::branchTest8): + (JSC::MacroAssemblerX86Common::branchAdd32): + (JSC::MacroAssemblerX86Common::branchMul32): + (JSC::MacroAssemblerX86Common::branchSub32): + (JSC::MacroAssemblerX86Common::branchNeg32): + (JSC::MacroAssemblerX86Common::branchOr32): + (JSC::MacroAssemblerX86Common::compare32): + (JSC::MacroAssemblerX86Common::test8): + (JSC::MacroAssemblerX86Common::test32): + (JSC::MacroAssemblerX86Common::x86Condition): + * assembler/MacroAssemblerX86_64.h: + (JSC::MacroAssemblerX86_64::comparePtr): + (JSC::MacroAssemblerX86_64::branchPtr): + (JSC::MacroAssemblerX86_64::branchTestPtr): + (JSC::MacroAssemblerX86_64::branchAddPtr): + (JSC::MacroAssemblerX86_64::branchSubPtr): + (JSC::MacroAssemblerX86_64::branchPtrWithPatch): + (JSC::MacroAssemblerX86_64::branchTest8): + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::compile): + * 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): + +2011-04-20 Balazs Kelemen <kbalazs@webkit.org> + + Reviewed by Csaba Osztrogonác. + + [Qt] Cleanup includepath adjustment for generated files + https://bugs.webkit.org/show_bug.cgi?id=58869 + + * JavaScriptCore.pri: Add the directory of generated files to the include + path with absolute path to make it valid in the final build step. + +2011-04-19 Oliver Hunt <oliver@apple.com> + + Reviewed by Gavin Barraclough. + + Remove unneeded deprecated methods from MarkStack + https://bugs.webkit.org/show_bug.cgi?id=58853 + + Remove deprecated methods + + * heap/MarkStack.h: + +2011-04-19 Mark Rowe <mrowe@apple.com> + + Things work best when the Xcode project refers to the file at a path that exists. + + * JavaScriptCore.xcodeproj/project.pbxproj: + +2011-04-19 Renata Hodovan <reni@webkit.org> + + Reviewed by Eric Seidel. + + Move the alignment related macros in Vector.h to new Alignment.h. + https://bugs.webkit.org/show_bug.cgi?id=56000 + + * JavaScriptCore.gypi: + * JavaScriptCore.vcproj/WTF/WTF.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * wtf/Alignment.h: Added. + * wtf/CMakeLists.txt: + * wtf/Vector.h: + +2011-04-19 Oliver Hunt <oliver@apple.com> + + Reviewed by Gavin Barraclough. + + Remove DeprecatedPtr + https://bugs.webkit.org/show_bug.cgi?id=58718 + + Remove the class an all functions that still exist to support it. + + * heap/MarkStack.h: + (JSC::MarkStack::append): + * runtime/JSValue.h: + * runtime/WriteBarrier.h: + +2011-04-19 Jungshik Shin <jshin@chromium.org> + + Reviewed by David Levin + + Add U+FEFF (Zero width no-break space) to CharacterNames.h. + It's added to the list of characters to treat as zero-width + in WebCore. + + https://bugs.webkit.org/show_bug.cgi?id=48860 + + * wtf/unicode/CharacterNames.h: + +2011-04-19 Csaba Osztrogonác <ossy@webkit.org> + + [Qt] REGRESSION(84176): http/tests/xmlhttprequest/event-listener-gc.html fails + https://bugs.webkit.org/show_bug.cgi?id=58871 + + Unreviewed, rolling out r84176, r84178, r84186, r84212 and r84231. + http://trac.webkit.org/changeset/84176 (original patch) + http://trac.webkit.org/changeset/84178 (original patch - part 2) + http://trac.webkit.org/changeset/84186 (build fix) + http://trac.webkit.org/changeset/84212 + http://trac.webkit.org/changeset/84231 (skip failing test) + + original bugs: + - https://bugs.webkit.org/show_bug.cgi?id=58718 + - https://bugs.webkit.org/show_bug.cgi?id=58853 + + * heap/MarkStack.h: + (JSC::MarkStack::deprecatedAppendValues): + (JSC::MarkStack::append): + (JSC::MarkStack::deprecatedAppend): + * runtime/JSValue.h: + * runtime/WriteBarrier.h: + (JSC::DeprecatedPtr::DeprecatedPtr): + (JSC::DeprecatedPtr::get): + (JSC::DeprecatedPtr::operator*): + (JSC::DeprecatedPtr::operator->): + (JSC::DeprecatedPtr::slot): + (JSC::DeprecatedPtr::operator UnspecifiedBoolType*): + (JSC::DeprecatedPtr::operator!): + (JSC::operator==): + +2011-04-18 Oliver Hunt <oliver@apple.com> + + Reviewed by Gavin Barraclough. + + Remove unneeded deprecated methods from MarkStack + https://bugs.webkit.org/show_bug.cgi?id=58853 + + Remove deprecated methods + + * heap/MarkStack.h: + +2011-04-18 Oliver Hunt <oliver@apple.com> + + Reviewed by Adam Roben. + + Off by one initialising repeat callframe + https://bugs.webkit.org/show_bug.cgi?id=58838 + <rdar://problem/8756810> + + If the end of a callframe made for a repeat call landed on + a page boundary the following page may not have been committed + which means that the off by one could lead to a crash. However + it could only happen in this case and only on windows which is + why it was so hard to repro. Alas given the steps needed to + reproduce are such that it's not really possible to make a + testcase. + + This fix makes the code a little less squirrely by not trying + to avoid the unnecessary initialisation of |this|. + + * interpreter/Interpreter.cpp: + (JSC::Interpreter::prepareForRepeatCall): + +2011-04-18 Gavin Barraclough <barraclough@apple.com> + + Reviewed by Geoff Garen. + + Bug 58829 - DFG JIT - Optimize add/sub immediate, multiply. + + Add code generation for add/subtract instruction with immediate operands + (where a child is a constant), and don't bail to non-speculative if an + integer multiple results in a +0 result (only if it should be generating -0). + + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::compile): + * dfg/DFGSpeculativeJIT.h: + (JSC::DFG::SpeculativeJIT::isDoubleConstantWithInt32Value): + +2011-04-18 Gavin Barraclough <barraclough@apple.com> + + Reviewed by Geoff Garen. + + Bug 58817 - DFG JIT - if speculative compilation fails, throw away code. + + If we detect a logical conflict, throw away generated code, + and only compile through the NonSpeculativeJIT. + + * assembler/AbstractMacroAssembler.h: + (JSC::AbstractMacroAssembler::rewindToLabel): + * assembler/AssemblerBuffer.h: + (JSC::AssemblerBuffer::rewindToOffset): + * assembler/MacroAssemblerX86Common.h: + (JSC::MacroAssemblerX86Common::branchAdd32): + (JSC::MacroAssemblerX86Common::branchSub32): + * assembler/X86Assembler.h: + (JSC::X86Assembler::rewindToLabel): + (JSC::X86Assembler::X86InstructionFormatter::rewindToLabel): + * dfg/DFGJITCompiler.cpp: + (JSC::DFG::JITCompiler::linkSpeculationChecks): + (JSC::DFG::JITCompiler::compileFunction): + * dfg/DFGNode.h: + * dfg/DFGNonSpeculativeJIT.cpp: + (JSC::DFG::NonSpeculativeJIT::compile): + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::compile): + * dfg/DFGSpeculativeJIT.h: + (JSC::DFG::SpeculationCheckIndexIterator::SpeculationCheckIndexIterator): + +2011-04-18 Oliver Hunt <oliver@apple.com> + + Reviewed by Gavin Barraclough. + + Remove DeprecatedPtr + https://bugs.webkit.org/show_bug.cgi?id=58718 + + As simple as it sounds. + + * runtime/JSValue.h: + * runtime/WriteBarrier.h: + +2011-04-17 Cameron Zwarich <zwarich@apple.com> + + Reviewed by Dan Bernstein. + + JSC no longer builds with Clang due to -Woverloaded-virtual warning + https://bugs.webkit.org/show_bug.cgi?id=58760 + + Rename Structure's specificValue overload of put to putSpecificValue to avoid + Clang's warning for overloading a virtual function. + + * runtime/Structure.cpp: + (JSC::Structure::addPropertyTransition): + (JSC::Structure::addPropertyWithoutTransition): + (JSC::Structure::putSpecificValue): + * runtime/Structure.h: + +2011-04-17 Patrick Gansterer <paroga@webkit.org> + + Reviewed by Adam Barth. + + Remove WTF_PLATFORM_SGL + https://bugs.webkit.org/show_bug.cgi?id=58743 + + WTF_PLATFORM_SGL and PLATFORM(SGL) are not used in the code anywhere. + + * wtf/Platform.h: + +2011-04-17 Patrick Gansterer <paroga@webkit.org> + + Reviewed by Adam Barth. + + Rename PLATFORM(CA) to USE(CA) + https://bugs.webkit.org/show_bug.cgi?id=58742 + + * wtf/Platform.h: + +2011-04-17 Patrick Gansterer <paroga@webkit.org> + + Reviewed by Adam Barth. + + Rename PLATFORM(CG) to USE(CG) + https://bugs.webkit.org/show_bug.cgi?id=58729 + + * wtf/Platform.h: + +2011-04-16 Patrick Gansterer <paroga@webkit.org> + + Reviewed by Eric Seidel. + + Rename PLATFORM(CAIRO) to USE(CAIRO) + https://bugs.webkit.org/show_bug.cgi?id=55192 + + * wtf/Platform.h: + * wtf/gobject/GTypedefs.h: + +2011-04-15 Sheriff Bot <webkit.review.bot@gmail.com> + + Unreviewed, rolling out r84067. + http://trac.webkit.org/changeset/84067 + https://bugs.webkit.org/show_bug.cgi?id=58724 + + qt build are failing. (Requested by loislo2 on #webkit). + + * heap/MarkStack.h: + (JSC::MarkStack::append): + * runtime/JSValue.h: + * runtime/WriteBarrier.h: + (JSC::DeprecatedPtr::DeprecatedPtr): + (JSC::DeprecatedPtr::get): + (JSC::DeprecatedPtr::operator*): + (JSC::DeprecatedPtr::operator->): + (JSC::DeprecatedPtr::slot): + (JSC::DeprecatedPtr::operator UnspecifiedBoolType*): + (JSC::DeprecatedPtr::operator!): + (JSC::operator==): + +2011-04-15 Shishir Agrawal <shishir@chromium.org> + + Reviewed by James Robinson. + + Add a flag to guard Page Visibility API changes. + https://bugs.webkit.org/show_bug.cgi?id=58464 + + * Configurations/FeatureDefines.xcconfig: + +2011-04-15 Gavin Barraclough <barraclough@apple.com> + + Errrk! - build fix from !x86-64. + + * dfg/DFGNode.h: + +2011-04-15 David Levin <levin@chromium.org> + + Revert of r83974. + + JavaScriptCore shouldn't depend on ../ThirdParty/gtest/xcode/gtest.xcodeproj + https://bugs.webkit.org/show_bug.cgi?id=58716 + + * JavaScriptCore.xcodeproj/project.pbxproj: + * wtf/tests/RunAllWtfTests.cpp: Removed. + * wtf/tests/StringTests.cpp: Removed. + +2011-04-15 Oliver Hunt <oliver@apple.com> + + Reviewed by Gavin Barraclough. + + Remove DeprecatedPtr + https://bugs.webkit.org/show_bug.cgi?id=58718 + + As simple as it sounds. + + * heap/MarkStack.h: + (JSC::MarkStack::append): + * runtime/JSValue.h: + * runtime/WriteBarrier.h: + +2011-04-15 Gavin Barraclough <barraclough@apple.com> + + Reviewed by Oliver Hunt. + + Add a simple tool to gather statistics on whether functions + are completed through the new or old JIT. + + * dfg/DFGNode.h: + * dfg/DFGNonSpeculativeJIT.cpp: + (JSC::DFG::NonSpeculativeJIT::compile): + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::compile): + * jit/JIT.cpp: + (JSC::JIT::privateCompile): + +2011-04-15 Oliver Hunt <oliver@apple.com> + + GC allocate Structure + https://bugs.webkit.org/show_bug.cgi?id=58483 + + Rolling r83894 r83827 r83810 r83809 r83808 back in with + a workaround for the gcc bug seen by the gtk bots + + * API/JSCallbackConstructor.cpp: + (JSC::JSCallbackConstructor::JSCallbackConstructor): + * API/JSCallbackConstructor.h: + (JSC::JSCallbackConstructor::createStructure): + * API/JSCallbackFunction.h: + (JSC::JSCallbackFunction::createStructure): + * API/JSCallbackObject.h: + (JSC::JSCallbackObject::createStructure): + * API/JSCallbackObjectFunctions.h: + (JSC::::JSCallbackObject): + * API/JSContextRef.cpp: + * JavaScriptCore.JSVALUE32_64only.exp: + * JavaScriptCore.JSVALUE64only.exp: + * JavaScriptCore.exp: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * bytecode/CodeBlock.cpp: + (JSC::CodeBlock::~CodeBlock): + (JSC::CodeBlock::markStructures): + (JSC::CodeBlock::markAggregate): + * bytecode/CodeBlock.h: + (JSC::MethodCallLinkInfo::setSeen): + (JSC::GlobalResolveInfo::GlobalResolveInfo): + * bytecode/Instruction.h: + (JSC::PolymorphicAccessStructureList::PolymorphicStubInfo::set): + (JSC::PolymorphicAccessStructureList::PolymorphicAccessStructureList): + (JSC::PolymorphicAccessStructureList::markAggregate): + (JSC::Instruction::Instruction): + * bytecode/StructureStubInfo.cpp: + (JSC::StructureStubInfo::deref): + (JSC::StructureStubInfo::markAggregate): + * bytecode/StructureStubInfo.h: + (JSC::StructureStubInfo::initGetByIdSelf): + (JSC::StructureStubInfo::initGetByIdProto): + (JSC::StructureStubInfo::initGetByIdChain): + (JSC::StructureStubInfo::initPutByIdTransition): + (JSC::StructureStubInfo::initPutByIdReplace): + * debugger/DebuggerActivation.cpp: + (JSC::DebuggerActivation::DebuggerActivation): + * debugger/DebuggerActivation.h: + (JSC::DebuggerActivation::createStructure): + * heap/Handle.h: + * heap/MarkStack.cpp: + (JSC::MarkStack::markChildren): + (JSC::MarkStack::drain): + * heap/MarkedBlock.cpp: + (JSC::MarkedBlock::MarkedBlock): + (JSC::MarkedBlock::sweep): + * heap/Strong.h: + (JSC::Strong::Strong): + (JSC::Strong::set): + * interpreter/Interpreter.cpp: + (JSC::Interpreter::resolveGlobal): + (JSC::Interpreter::resolveGlobalDynamic): + (JSC::Interpreter::tryCachePutByID): + (JSC::Interpreter::uncachePutByID): + (JSC::Interpreter::tryCacheGetByID): + (JSC::Interpreter::uncacheGetByID): + (JSC::Interpreter::privateExecute): + * jit/JIT.h: + * jit/JITPropertyAccess.cpp: + (JSC::JIT::privateCompilePutByIdTransition): + (JSC::JIT::patchMethodCallProto): + (JSC::JIT::privateCompileGetByIdProto): + (JSC::JIT::privateCompileGetByIdSelfList): + (JSC::JIT::privateCompileGetByIdProtoList): + (JSC::JIT::privateCompileGetByIdChainList): + (JSC::JIT::privateCompileGetByIdChain): + * jit/JITPropertyAccess32_64.cpp: + (JSC::JIT::privateCompilePutByIdTransition): + (JSC::JIT::patchMethodCallProto): + (JSC::JIT::privateCompileGetByIdProto): + (JSC::JIT::privateCompileGetByIdSelfList): + (JSC::JIT::privateCompileGetByIdProtoList): + (JSC::JIT::privateCompileGetByIdChainList): + (JSC::JIT::privateCompileGetByIdChain): + * jit/JITStubs.cpp: + (JSC::JITThunks::tryCachePutByID): + (JSC::JITThunks::tryCacheGetByID): + (JSC::DEFINE_STUB_FUNCTION): + (JSC::getPolymorphicAccessStructureListSlot): + * jit/JSInterfaceJIT.h: + (JSC::JSInterfaceJIT::storePtrWithWriteBarrier): + * jsc.cpp: + (cleanupGlobalData): + * runtime/Arguments.h: + (JSC::Arguments::createStructure): + (JSC::Arguments::Arguments): + (JSC::JSActivation::copyRegisters): + * runtime/ArrayConstructor.cpp: + (JSC::ArrayConstructor::ArrayConstructor): + (JSC::constructArrayWithSizeQuirk): + * runtime/ArrayConstructor.h: + * runtime/ArrayPrototype.cpp: + (JSC::ArrayPrototype::ArrayPrototype): + (JSC::arrayProtoFuncSplice): + * runtime/ArrayPrototype.h: + (JSC::ArrayPrototype::createStructure): + * runtime/BatchedTransitionOptimizer.h: + (JSC::BatchedTransitionOptimizer::BatchedTransitionOptimizer): + * runtime/BooleanConstructor.cpp: + (JSC::BooleanConstructor::BooleanConstructor): + * runtime/BooleanConstructor.h: + * runtime/BooleanObject.cpp: + (JSC::BooleanObject::BooleanObject): + * runtime/BooleanObject.h: + (JSC::BooleanObject::createStructure): + * runtime/BooleanPrototype.cpp: + (JSC::BooleanPrototype::BooleanPrototype): + * runtime/BooleanPrototype.h: + * runtime/DateConstructor.cpp: + (JSC::DateConstructor::DateConstructor): + * runtime/DateConstructor.h: + * runtime/DateInstance.cpp: + (JSC::DateInstance::DateInstance): + * runtime/DateInstance.h: + (JSC::DateInstance::createStructure): + * runtime/DatePrototype.cpp: + (JSC::DatePrototype::DatePrototype): + * runtime/DatePrototype.h: + (JSC::DatePrototype::createStructure): + * runtime/Error.cpp: + (JSC::StrictModeTypeErrorFunction::StrictModeTypeErrorFunction): + * runtime/ErrorConstructor.cpp: + (JSC::ErrorConstructor::ErrorConstructor): + * runtime/ErrorConstructor.h: + * runtime/ErrorInstance.cpp: + (JSC::ErrorInstance::ErrorInstance): + (JSC::ErrorInstance::create): + * runtime/ErrorInstance.h: + (JSC::ErrorInstance::createStructure): + * runtime/ErrorPrototype.cpp: + (JSC::ErrorPrototype::ErrorPrototype): + * runtime/ErrorPrototype.h: + * runtime/ExceptionHelpers.cpp: + (JSC::InterruptedExecutionError::InterruptedExecutionError): + (JSC::TerminatedExecutionError::TerminatedExecutionError): + * runtime/Executable.cpp: + * runtime/Executable.h: + (JSC::ExecutableBase::ExecutableBase): + (JSC::ExecutableBase::createStructure): + (JSC::NativeExecutable::createStructure): + (JSC::NativeExecutable::NativeExecutable): + (JSC::ScriptExecutable::ScriptExecutable): + (JSC::EvalExecutable::createStructure): + (JSC::ProgramExecutable::createStructure): + (JSC::FunctionExecutable::createStructure): + * runtime/FunctionConstructor.cpp: + (JSC::FunctionConstructor::FunctionConstructor): + * runtime/FunctionConstructor.h: + * runtime/FunctionPrototype.cpp: + (JSC::FunctionPrototype::FunctionPrototype): + * runtime/FunctionPrototype.h: + (JSC::FunctionPrototype::createStructure): + * runtime/GetterSetter.h: + (JSC::GetterSetter::GetterSetter): + (JSC::GetterSetter::createStructure): + * runtime/InitializeThreading.cpp: + (JSC::initializeThreadingOnce): + * runtime/InternalFunction.cpp: + (JSC::InternalFunction::InternalFunction): + * runtime/InternalFunction.h: + (JSC::InternalFunction::createStructure): + * runtime/JSAPIValueWrapper.h: + (JSC::JSAPIValueWrapper::createStructure): + (JSC::JSAPIValueWrapper::JSAPIValueWrapper): + * runtime/JSActivation.cpp: + (JSC::JSActivation::JSActivation): + * runtime/JSActivation.h: + (JSC::JSActivation::createStructure): + * runtime/JSArray.cpp: + (JSC::JSArray::JSArray): + * runtime/JSArray.h: + (JSC::JSArray::createStructure): + * runtime/JSByteArray.cpp: + (JSC::JSByteArray::JSByteArray): + (JSC::JSByteArray::createStructure): + * runtime/JSByteArray.h: + (JSC::JSByteArray::JSByteArray): + * runtime/JSCell.cpp: + (JSC::isZombie): + * runtime/JSCell.h: + (JSC::JSCell::JSCell::JSCell): + (JSC::JSCell::JSCell::addressOfStructure): + (JSC::JSCell::JSCell::structure): + (JSC::JSCell::JSCell::markChildren): + (JSC::JSCell::JSValue::isZombie): + * runtime/JSFunction.cpp: + (JSC::JSFunction::JSFunction): + * runtime/JSFunction.h: + (JSC::JSFunction::createStructure): + * runtime/JSGlobalData.cpp: + (JSC::JSGlobalData::storeVPtrs): + (JSC::JSGlobalData::JSGlobalData): + (JSC::JSGlobalData::clearBuiltinStructures): + (JSC::JSGlobalData::createLeaked): + * runtime/JSGlobalData.h: + (JSC::allocateGlobalHandle): + * runtime/JSGlobalObject.cpp: + (JSC::JSGlobalObject::reset): + (JSC::JSGlobalObject::markChildren): + (JSC::JSGlobalObject::copyGlobalsFrom): + * runtime/JSGlobalObject.h: + (JSC::JSGlobalObject::JSGlobalObject): + (JSC::JSGlobalObject::createStructure): + (JSC::Structure::prototypeChain): + (JSC::Structure::isValid): + (JSC::constructEmptyArray): + * runtime/JSNotAnObject.h: + (JSC::JSNotAnObject::JSNotAnObject): + (JSC::JSNotAnObject::createStructure): + * runtime/JSONObject.cpp: + (JSC::JSONObject::JSONObject): + * runtime/JSONObject.h: + (JSC::JSONObject::createStructure): + * runtime/JSObject.cpp: + (JSC::JSObject::defineGetter): + (JSC::JSObject::defineSetter): + (JSC::JSObject::seal): + (JSC::JSObject::freeze): + (JSC::JSObject::preventExtensions): + (JSC::JSObject::removeDirect): + (JSC::JSObject::createInheritorID): + * runtime/JSObject.h: + (JSC::JSObject::createStructure): + (JSC::JSObject::JSObject): + (JSC::JSNonFinalObject::createStructure): + (JSC::JSNonFinalObject::JSNonFinalObject): + (JSC::JSFinalObject::create): + (JSC::JSFinalObject::createStructure): + (JSC::JSFinalObject::JSFinalObject): + (JSC::constructEmptyObject): + (JSC::createEmptyObjectStructure): + (JSC::JSObject::~JSObject): + (JSC::JSObject::setPrototype): + (JSC::JSObject::setStructure): + (JSC::JSObject::inheritorID): + (JSC::JSObject::putDirectInternal): + (JSC::JSObject::transitionTo): + (JSC::JSObject::markChildrenDirect): + * runtime/JSObjectWithGlobalObject.cpp: + (JSC::JSObjectWithGlobalObject::JSObjectWithGlobalObject): + * runtime/JSObjectWithGlobalObject.h: + (JSC::JSObjectWithGlobalObject::createStructure): + (JSC::JSObjectWithGlobalObject::JSObjectWithGlobalObject): + * runtime/JSPropertyNameIterator.cpp: + (JSC::JSPropertyNameIterator::JSPropertyNameIterator): + (JSC::JSPropertyNameIterator::create): + (JSC::JSPropertyNameIterator::get): + * runtime/JSPropertyNameIterator.h: + (JSC::JSPropertyNameIterator::createStructure): + (JSC::JSPropertyNameIterator::setCachedStructure): + (JSC::Structure::setEnumerationCache): + * runtime/JSStaticScopeObject.h: + (JSC::JSStaticScopeObject::JSStaticScopeObject): + (JSC::JSStaticScopeObject::createStructure): + * runtime/JSString.h: + (JSC::RopeBuilder::JSString): + (JSC::RopeBuilder::createStructure): + * runtime/JSType.h: + * runtime/JSTypeInfo.h: + (JSC::TypeInfo::TypeInfo): + * runtime/JSValue.h: + * runtime/JSVariableObject.h: + (JSC::JSVariableObject::createStructure): + (JSC::JSVariableObject::JSVariableObject): + (JSC::JSVariableObject::copyRegisterArray): + * runtime/JSWrapperObject.h: + (JSC::JSWrapperObject::createStructure): + (JSC::JSWrapperObject::JSWrapperObject): + * runtime/JSZombie.cpp: + * runtime/JSZombie.h: + (JSC::JSZombie::JSZombie): + (JSC::JSZombie::createStructure): + * runtime/MathObject.cpp: + (JSC::MathObject::MathObject): + * runtime/MathObject.h: + (JSC::MathObject::createStructure): + * runtime/NativeErrorConstructor.cpp: + (JSC::NativeErrorConstructor::NativeErrorConstructor): + (JSC::NativeErrorConstructor::markChildren): + (JSC::constructWithNativeErrorConstructor): + * runtime/NativeErrorConstructor.h: + (JSC::NativeErrorConstructor::createStructure): + * runtime/NativeErrorPrototype.cpp: + (JSC::NativeErrorPrototype::NativeErrorPrototype): + * runtime/NativeErrorPrototype.h: + * runtime/NumberConstructor.cpp: + (JSC::NumberConstructor::NumberConstructor): + * runtime/NumberConstructor.h: + (JSC::NumberConstructor::createStructure): + * runtime/NumberObject.cpp: + (JSC::NumberObject::NumberObject): + * runtime/NumberObject.h: + (JSC::NumberObject::createStructure): + * runtime/NumberPrototype.cpp: + (JSC::NumberPrototype::NumberPrototype): + * runtime/NumberPrototype.h: + * runtime/ObjectConstructor.cpp: + (JSC::ObjectConstructor::ObjectConstructor): + * runtime/ObjectConstructor.h: + (JSC::ObjectConstructor::createStructure): + * runtime/ObjectPrototype.cpp: + (JSC::ObjectPrototype::ObjectPrototype): + * runtime/ObjectPrototype.h: + * runtime/PropertyMapHashTable.h: + (JSC::PropertyTable::PropertyTable): + * runtime/RegExpConstructor.cpp: + (JSC::RegExpConstructor::RegExpConstructor): + (JSC::RegExpMatchesArray::RegExpMatchesArray): + * runtime/RegExpConstructor.h: + (JSC::RegExpConstructor::createStructure): + * runtime/RegExpObject.cpp: + (JSC::RegExpObject::RegExpObject): + * runtime/RegExpObject.h: + (JSC::RegExpObject::createStructure): + * runtime/RegExpPrototype.cpp: + (JSC::RegExpPrototype::RegExpPrototype): + * runtime/RegExpPrototype.h: + * runtime/ScopeChain.h: + (JSC::ScopeChainNode::ScopeChainNode): + (JSC::ScopeChainNode::createStructure): + * runtime/StrictEvalActivation.cpp: + (JSC::StrictEvalActivation::StrictEvalActivation): + * runtime/StringConstructor.cpp: + (JSC::StringConstructor::StringConstructor): + * runtime/StringConstructor.h: + * runtime/StringObject.cpp: + (JSC::StringObject::StringObject): + * runtime/StringObject.h: + (JSC::StringObject::createStructure): + * runtime/StringObjectThatMasqueradesAsUndefined.h: + (JSC::StringObjectThatMasqueradesAsUndefined::StringObjectThatMasqueradesAsUndefined): + (JSC::StringObjectThatMasqueradesAsUndefined::createStructure): + * runtime/StringPrototype.cpp: + (JSC::StringPrototype::StringPrototype): + * runtime/StringPrototype.h: + (JSC::StringPrototype::createStructure): + * runtime/Structure.cpp: + (JSC::StructureTransitionTable::remove): + (JSC::StructureTransitionTable::add): + (JSC::Structure::Structure): + (JSC::Structure::~Structure): + (JSC::Structure::materializePropertyMap): + (JSC::Structure::addPropertyTransitionToExistingStructure): + (JSC::Structure::addPropertyTransition): + (JSC::Structure::removePropertyTransition): + (JSC::Structure::changePrototypeTransition): + (JSC::Structure::despecifyFunctionTransition): + (JSC::Structure::getterSetterTransition): + (JSC::Structure::toDictionaryTransition): + (JSC::Structure::toCacheableDictionaryTransition): + (JSC::Structure::toUncacheableDictionaryTransition): + (JSC::Structure::sealTransition): + (JSC::Structure::freezeTransition): + (JSC::Structure::preventExtensionsTransition): + (JSC::Structure::flattenDictionaryStructure): + (JSC::Structure::copyPropertyTable): + (JSC::Structure::put): + (JSC::Structure::markChildren): + * runtime/Structure.h: + (JSC::Structure::create): + (JSC::Structure::setPrototypeWithoutTransition): + (JSC::Structure::createStructure): + (JSC::JSCell::createDummyStructure): + (JSC::StructureTransitionTable::keyForWeakGCMapFinalizer): + * runtime/StructureChain.cpp: + (JSC::StructureChain::StructureChain): + (JSC::StructureChain::markChildren): + * runtime/StructureChain.h: + (JSC::StructureChain::create): + (JSC::StructureChain::head): + (JSC::StructureChain::createStructure): + * runtime/StructureTransitionTable.h: + (JSC::StructureTransitionTable::WeakGCMapFinalizerCallback::finalizerContextFor): + (JSC::StructureTransitionTable::WeakGCMapFinalizerCallback::keyForFinalizer): + (JSC::StructureTransitionTable::~StructureTransitionTable): + (JSC::StructureTransitionTable::slot): + (JSC::StructureTransitionTable::setMap): + (JSC::StructureTransitionTable::singleTransition): + (JSC::StructureTransitionTable::clearSingleTransition): + (JSC::StructureTransitionTable::setSingleTransition): + * runtime/WeakGCMap.h: + (JSC::DefaultWeakGCMapFinalizerCallback::finalizerContextFor): + (JSC::DefaultWeakGCMapFinalizerCallback::keyForFinalizer): + (JSC::WeakGCMap::contains): + (JSC::WeakGCMap::find): + (JSC::WeakGCMap::remove): + (JSC::WeakGCMap::add): + (JSC::WeakGCMap::set): + (JSC::WeakGCMap::finalize): + * runtime/WriteBarrier.h: + (JSC::writeBarrier): + (JSC::WriteBarrierBase::set): + (JSC::WriteBarrierBase::operator*): + (JSC::WriteBarrierBase::operator->): + (JSC::WriteBarrierBase::setWithoutWriteBarrier): + +2011-04-15 Fridrich Strba <fridrich.strba@bluewin.ch> + + Reviewed by Gavin Barraclough. + + Correctly prefix symbols. Since gcc 4.5.0, Windows x64 symbols + are not prefixed by underscore anymore. This is consistent with + what MSVC does. + https://bugs.webkit.org/show_bug.cgi?id=58573 + + * jit/JITStubs.cpp: + +2011-04-15 Gavin Barraclough <barraclough@apple.com> + + Reviewed by Geoff Garen. + + Bug 58705 - DFG JIT Add support for flow control (branch, jump). + + Add support for control flow by breaking the CodeBlock up into multiple + basic blocks, generating code for each basic block in turn through the + speculative JIT & then the non-speculative JIT. + + * dfg/DFGByteCodeParser.cpp: + (JSC::DFG::ByteCodeParser::setTemporary): + (JSC::DFG::ByteCodeParser::addToGraph): + (JSC::DFG::ByteCodeParser::parseBlock): + (JSC::DFG::ByteCodeParser::parse): + * dfg/DFGGraph.cpp: + (JSC::DFG::Graph::dump): + * dfg/DFGGraph.h: + (JSC::DFG::BasicBlock::BasicBlock): + (JSC::DFG::BasicBlock::getBytecodeOffset): + (JSC::DFG::Graph::blockIndexForBytecodeOffset): + * dfg/DFGJITCodeGenerator.h: + (JSC::DFG::JITCodeGenerator::JITCodeGenerator): + (JSC::DFG::JITCodeGenerator::addBranch): + (JSC::DFG::JITCodeGenerator::linkBranches): + (JSC::DFG::JITCodeGenerator::BranchRecord::BranchRecord): + * dfg/DFGNode.h: + (JSC::DFG::Node::Node): + (JSC::DFG::Node::isJump): + (JSC::DFG::Node::isBranch): + (JSC::DFG::Node::takenBytecodeOffset): + (JSC::DFG::Node::notTakenBytecodeOffset): + * dfg/DFGNonSpeculativeJIT.cpp: + (JSC::DFG::NonSpeculativeJIT::compile): + * dfg/DFGNonSpeculativeJIT.h: + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::compile): + * dfg/DFGSpeculativeJIT.h: + +2011-04-15 Gavin Barraclough <barraclough@apple.com> + + Reviewed by Geoff Garen. + + Bug 58701 - DFG JIT - add GetLocal/SetLocal nodes + + Use these for both access to arguments & local variables, adds ability + to set locals, such that values will persist between basic blocks. + + * dfg/DFGByteCodeParser.cpp: + (JSC::DFG::ByteCodeParser::ByteCodeParser): + (JSC::DFG::ByteCodeParser::get): + (JSC::DFG::ByteCodeParser::set): + (JSC::DFG::ByteCodeParser::getVariable): + (JSC::DFG::ByteCodeParser::setVariable): + (JSC::DFG::ByteCodeParser::getArgument): + (JSC::DFG::ByteCodeParser::setArgument): + (JSC::DFG::ByteCodeParser::getThis): + (JSC::DFG::ByteCodeParser::setThis): + (JSC::DFG::ByteCodeParser::VariableRecord::VariableRecord): + (JSC::DFG::ByteCodeParser::parseBlock): + * dfg/DFGGraph.cpp: + (JSC::DFG::Graph::dump): + (JSC::DFG::Graph::derefChildren): + * dfg/DFGGraph.h: + (JSC::DFG::Graph::ref): + (JSC::DFG::Graph::deref): + * dfg/DFGNode.h: + (JSC::DFG::Node::hasLocal): + (JSC::DFG::Node::local): + * dfg/DFGNonSpeculativeJIT.cpp: + (JSC::DFG::NonSpeculativeJIT::compile): + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::compile): + +2011-04-15 Gavin Barraclough <barraclough@apple.com> + + Reviewed by Sam Weinig. + + Bug 58696 - DFG JIT split handling of vars/temporaries + + Presently all callee registers are treated as having single block scope, + since the DFG JIT can only compile single block functions. In order to + expand the JIT to support control flow we will need to change to retaining + locals (but not temporaries) across basic block boundaries. + + * dfg/DFGByteCodeParser.cpp: + (JSC::DFG::ByteCodeParser::ByteCodeParser): + (JSC::DFG::ByteCodeParser::get): + (JSC::DFG::ByteCodeParser::set): + (JSC::DFG::ByteCodeParser::getVariable): + (JSC::DFG::ByteCodeParser::setVariable): + (JSC::DFG::ByteCodeParser::getTemporary): + (JSC::DFG::ByteCodeParser::setTemporary): + (JSC::DFG::ByteCodeParser::getArgument): + (JSC::DFG::ByteCodeParser::getInt32Constant): + (JSC::DFG::ByteCodeParser::getDoubleConstant): + (JSC::DFG::ByteCodeParser::getJSConstant): + (JSC::DFG::ByteCodeParser::constantUndefined): + (JSC::DFG::ByteCodeParser::constantNull): + (JSC::DFG::ByteCodeParser::one): + (JSC::DFG::ByteCodeParser::parseBlock): + (JSC::DFG::ByteCodeParser::parse): + (JSC::DFG::parse): + * dfg/DFGNode.h: + * dfg/DFGScoreBoard.h: + (JSC::DFG::ScoreBoard::ScoreBoard): + (JSC::DFG::ScoreBoard::~ScoreBoard): + (JSC::DFG::ScoreBoard::allocate): + (JSC::DFG::ScoreBoard::use): + +2011-04-15 Michael Saboff <msaboff@apple.com> + + Reviewed by Oliver Hunt. + + globalObject moved to JSObjectWithGlobalObject.cpp inhibits inlining + https://bugs.webkit.org/show_bug.cgi?id=58677 + + Moved JSObjectWithGlobalObject::globalObject() to + runtime/JSObjectWithGlobalObject.h to allow the compiler to inline + it for a performance benefit. An equivalent instance had been in + a header file before r60057. + + * JavaScriptCore.exp: + * runtime/JSObjectWithGlobalObject.cpp: + * runtime/JSObjectWithGlobalObject.h: + (JSC::JSObjectWithGlobalObject::globalObject): + +2011-04-14 Oliver Hunt <oliver@apple.com> + + Reviewed by Geoffrey Garen. + + Make JSNodeFilterCondition handle its lifetime correctly + https://bugs.webkit.org/show_bug.cgi?id=58622 + + Add export + + * JavaScriptCore.exp: + +2011-04-14 Alexey Proskuryakov <ap@apple.com> + + Reviewed by Dan Bernstein. + + WebKit2: Password field input does not switch to ASCII-compatible source + https://bugs.webkit.org/show_bug.cgi?id=58583 + <rdar://problem/9059651> + + * wtf/Platform.h: Removed WTF_USE_CARBON_SECURE_INPUT_MODE. It's now only used by Chromium, + and shouldn't be enabled on any other platforms, so there is no reason to make it + configurable via Platform.h. + +2011-04-15 Dmitry Lomov <dslomov@google.com> + + Reviewed by David Levin. + + Add a sample test case for GTest framework + https://bugs.webkit.org/show_bug.cgi?id=58509 + + Add an example of GTest testcase, complete with a runner, to JavaScriptCore. + + * JavaScriptCore.xcodeproj/project.pbxproj: + * wtf/tests/RunAllWtfTests.cpp: Added. + (main): + * wtf/tests/StringTests.cpp: Added. + +2011-04-15 Anna Cavender <annacc@chromium.org> + + Reviewed by Eric Carlson. + + Renaming TRACK feature define to VIDEO_TRACK + https://bugs.webkit.org/show_bug.cgi?id=53556 + + * Configurations/FeatureDefines.xcconfig: + +2011-04-14 Gavin Barraclough <barraclough@apple.com> + + Rubber stamped by Geoffrey Garen. + + Hide DFG_JIT_RESTRICTIONS behind ARITHMETIC_OP() macro, and rename + m_regressionGuard to m_parseFailed, such that it can be reused for + other failure cases. + + * dfg/DFGByteCodeParser.cpp: + (JSC::DFG::ByteCodeParser::ByteCodeParser): + (JSC::DFG::ByteCodeParser::parse): + +2011-04-14 Gavin Barraclough <barraclough@apple.com> + + Reviewed by Geoffrey Garen. + + Bug 58620 - DFG JIT - loading of arguments should not be lazy + + This optimization is overly simplistic. It only works because we never + write out definitions to arguments (since we currently only compile + single block functions). Revert this for now, we may want to reintroduce + something like this again in the future, but it will need to be aware + how to schedule definitions to arguments versus lazy loads that have not + yet been performed. + + * dfg/DFGGenerationInfo.h: + (JSC::DFG::GenerationInfo::needsSpill): + * dfg/DFGGraph.cpp: + (JSC::DFG::Graph::dump): + * dfg/DFGGraph.h: + * dfg/DFGJITCodeGenerator.cpp: + (JSC::DFG::JITCodeGenerator::fillInteger): + (JSC::DFG::JITCodeGenerator::fillDouble): + (JSC::DFG::JITCodeGenerator::fillJSValue): + * dfg/DFGJITCodeGenerator.h: + (JSC::DFG::JITCodeGenerator::initConstantInfo): + * dfg/DFGJITCompiler.cpp: + (JSC::DFG::JITCompiler::fillNumericToDouble): + (JSC::DFG::JITCompiler::fillInt32ToInteger): + (JSC::DFG::JITCompiler::fillToJS): + * dfg/DFGNonSpeculativeJIT.cpp: + (JSC::DFG::NonSpeculativeJIT::isKnownInteger): + (JSC::DFG::NonSpeculativeJIT::isKnownNumeric): + (JSC::DFG::NonSpeculativeJIT::compile): + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::fillSpeculateIntInternal): + (JSC::DFG::SpeculativeJIT::fillSpeculateCell): + (JSC::DFG::SpeculativeJIT::compile): + +2011-04-14 Gavin Barraclough <barraclough@apple.com> + + Reviewed by Geoffrey Garen. + + Bug 58600 - DFG JIT bugs in ValueToInt, PutByVal + + The bug in PutByVal is that an operand is in JSValueOperand - when this + locks an integer into a register it will always retag the value without + checking if the register is already locked. This is a problem where the + value being stored by a PutByVal is the same as the subscript. + The subscript is locked into a register first, as a strict integer. + Locking the value results in the subscript being modified. + + The bug in ValueToInt related to the function of sillentFillAllRegisters. + The problem is that this method will restore all register values from + prior to the call, overwriting the result of the call out. Allow a + register to be passed to specifically be excluded from being preserved. + + * assembler/ARMAssembler.h: + (JSC::ARMAssembler::debugOffset): + * assembler/ARMv7Assembler.h: + (JSC::ARMv7Assembler::ARMInstructionFormatter::debugOffset): + * assembler/AbstractMacroAssembler.h: + (JSC::AbstractMacroAssembler::debugOffset): + * assembler/AssemblerBuffer.h: + (JSC::AssemblerBuffer::debugOffset): + * assembler/LinkBuffer.h: + (JSC::LinkBuffer::debugAddress): + * assembler/MIPSAssembler.h: + (JSC::MIPSAssembler::debugOffset): + * assembler/MacroAssemblerX86_64.h: + (JSC::MacroAssemblerX86_64::orPtr): + * assembler/X86Assembler.h: + (JSC::X86Assembler::debugOffset): + (JSC::X86Assembler::X86InstructionFormatter::debugOffset): + * dfg/DFGByteCodeParser.cpp: + (JSC::DFG::ByteCodeParser::parse): + * dfg/DFGGenerationInfo.h: + * dfg/DFGJITCodeGenerator.cpp: + (JSC::DFG::JITCodeGenerator::fillJSValue): + * dfg/DFGJITCodeGenerator.h: + (JSC::DFG::JITCodeGenerator::isConstant): + * dfg/DFGJITCompiler.cpp: + (JSC::DFG::JITCompiler::compileFunction): + * dfg/DFGJITCompiler.h: + (JSC::DFG::JITCompiler::isConstant): + * dfg/DFGNonSpeculativeJIT.cpp: + (JSC::DFG::NonSpeculativeJIT::valueToNumber): + (JSC::DFG::NonSpeculativeJIT::valueToInt32): + (JSC::DFG::NonSpeculativeJIT::numberToInt32): + (JSC::DFG::NonSpeculativeJIT::isKnownInteger): + (JSC::DFG::NonSpeculativeJIT::isKnownNumeric): + (JSC::DFG::NonSpeculativeJIT::compile): + * dfg/DFGNonSpeculativeJIT.h: + (JSC::DFG::NonSpeculativeJIT::silentSpillGPR): + (JSC::DFG::NonSpeculativeJIT::silentSpillFPR): + (JSC::DFG::NonSpeculativeJIT::silentFillGPR): + (JSC::DFG::NonSpeculativeJIT::silentFillFPR): + (JSC::DFG::NonSpeculativeJIT::silentSpillAllRegisters): + (JSC::DFG::NonSpeculativeJIT::silentFillAllRegisters): + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::compile): + +2011-04-14 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Oliver Hunt. + + Drain the mark stack while marking weak handles, not after. + https://bugs.webkit.org/show_bug.cgi?id=58574 + + Otherwise, items that would have caused more weak handle marking are + processed after all weak handle marking has finished, and referenced + weak handles get recycled. + + * heap/HandleHeap.cpp: + (JSC::HandleHeap::markWeakHandles): Removed looping from here, since we + want Heap::markRoots to be responsible for draining the mark stack. + + * heap/Heap.cpp: + (JSC::Heap::markRoots): Moved looping to here, as explained above. + + For efficiency's sake, drain the mark stack before starting to mark weak + handles. Otherwise, items drained while marking weak handles may force + an extra trip through the weak handle list. + + For correctness's sake, drain the mark stack each time through the weak + handle list. Otherwise, opaque roots that would make weak handles reachable + are not discovered until after weak handle marking is over. + +2011-04-14 Oliver Hunt <oliver@apple.com> + + Reviewed by Geoffrey Garen. + + Make protected object list in caches window reflect reality + https://bugs.webkit.org/show_bug.cgi?id=58565 + + Make sure the heap includes objects protected by Strong handles + in its list of protected objects. + + * heap/HandleHeap.h: + * heap/Heap.cpp: + (JSC::HandleHeap::protectedObjectTypeCounts): + +2011-04-14 Satish Sampath <satish@chromium.org> + + Reviewed by Anders Carlsson. + + Don't emit RegExp tables for chromium where they are not used + https://bugs.webkit.org/show_bug.cgi?id=58544 + + * JavaScriptCore.gyp/JavaScriptCore.gyp: + * create_regex_tables: Added the "--notables" command line argument. + +2011-04-13 Geoffrey Garen <ggaren@apple.com> + + Try to fix ASSERTs seen on Windows bots. + + * wtf/HashTable.h: + (WTF::hashTableSwap): Force MSVC to use the right version of swap. + +2011-04-13 Ryuan Choi <ryuan.choi@samsung.com> + + Reviewed by Kenneth Rohde Christiansen. + + [CMAKE] Separate DerivedSources. + https://bugs.webkit.org/show_bug.cgi?id=58427 + + * CMakeLists.txt: Change DERIVED_SOURCES_DIR to DERIVED_SOURCES_JAVASCRIPTCORE_DIR. + +2011-04-13 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Oliver Hunt. + + Switched DOM wrappers to use HashMap of Weak<T> instead of WeakGCMap<T> + https://bugs.webkit.org/show_bug.cgi?id=58482 + + This will allow wrappers to make individual decisions about their lifetimes. + + * heap/HandleHeap.h: + (JSC::HandleHeap::copyWeak): New function for copying a weak handle. + It's wasn't previously possible to perform this operation using HandleHeap + API because the HandleHeap doesn't expose its underlying Node structure. + + * heap/Local.h: + (JSC::::set): + * heap/Strong.h: + (JSC::Strong::set): Added ASSERTs to verify that dead objects are not + resurrected by placement into handles. + + (JSC::swap): Added a swap helper, so use of Strong<T> inside a hash table + is efficient. + + * heap/Weak.h: + (JSC::Weak::Weak): Fixed a bug where copying a weak pointer would not + copy its weak callback and context. + + (JSC::Weak::operator=): Added an assignment operator, since the default + C++ assignment operator did the wrong thing. + + (JSC::Weak::set): Added ASSERTs to verify that dead objects are not + resurrected by placement into handles. + + (JSC::swap): Added a swap helper, so use of Strong<T> inside a hash table + is efficient, and can be done without copying, which is illegal during + the handle finalization phase. + +2011-04-13 Oliver Hunt <oliver@apple.com> + + Reviewed by Gavin Barraclough. + + Make PropertyMapEntry use a WriteBarrier for specificValue + https://bugs.webkit.org/show_bug.cgi?id=58407 + + Make PropertyMapEntry use a WriteBarrier for specificValue, and then + propagate the required JSGlobalData through all the methods it ends + up being needed. + + * API/JSClassRef.cpp: + (OpaqueJSClass::prototype): + * API/JSContextRef.cpp: + * API/JSObjectRef.cpp: + (JSObjectMake): + (JSObjectSetPrototype): + * JavaScriptCore.exp: + * bytecompiler/BytecodeGenerator.cpp: + (JSC::BytecodeGenerator::BytecodeGenerator): + * interpreter/Interpreter.cpp: + (JSC::appendSourceToError): + (JSC::Interpreter::tryCacheGetByID): + (JSC::Interpreter::privateExecute): + * jit/JITStubs.cpp: + (JSC::JITThunks::tryCacheGetByID): + (JSC::DEFINE_STUB_FUNCTION): + * runtime/BatchedTransitionOptimizer.h: + (JSC::BatchedTransitionOptimizer::BatchedTransitionOptimizer): + * runtime/InternalFunction.cpp: + (JSC::InternalFunction::name): + (JSC::InternalFunction::displayName): + * runtime/JSActivation.cpp: + (JSC::JSActivation::getOwnPropertySlot): + * runtime/JSFunction.cpp: + (JSC::JSFunction::name): + (JSC::JSFunction::displayName): + (JSC::JSFunction::getOwnPropertySlot): + * runtime/JSGlobalObject.cpp: + (JSC::JSGlobalObject::putWithAttributes): + (JSC::JSGlobalObject::reset): + (JSC::JSGlobalObject::resetPrototype): + * runtime/JSGlobalObject.h: + * runtime/JSObject.cpp: + (JSC::JSObject::put): + (JSC::JSObject::deleteProperty): + (JSC::JSObject::defineGetter): + (JSC::JSObject::defineSetter): + (JSC::JSObject::lookupGetter): + (JSC::JSObject::lookupSetter): + (JSC::JSObject::getPropertySpecificValue): + (JSC::JSObject::getOwnPropertyNames): + (JSC::JSObject::seal): + (JSC::JSObject::freeze): + (JSC::JSObject::preventExtensions): + (JSC::JSObject::removeDirect): + (JSC::JSObject::getOwnPropertyDescriptor): + (JSC::JSObject::defineOwnProperty): + * runtime/JSObject.h: + (JSC::JSObject::getDirect): + (JSC::JSObject::getDirectLocation): + (JSC::JSObject::isSealed): + (JSC::JSObject::isFrozen): + (JSC::JSObject::setPrototypeWithCycleCheck): + (JSC::JSObject::setPrototype): + (JSC::JSObject::inlineGetOwnPropertySlot): + (JSC::JSObject::putDirectInternal): + (JSC::JSObject::putDirectWithoutTransition): + (JSC::JSObject::putDirectFunctionWithoutTransition): + * runtime/Lookup.cpp: + (JSC::setUpStaticFunctionSlot): + * runtime/ObjectConstructor.cpp: + (JSC::objectConstructorCreate): + (JSC::objectConstructorSeal): + (JSC::objectConstructorFreeze): + (JSC::objectConstructorPreventExtensions): + (JSC::objectConstructorIsSealed): + (JSC::objectConstructorIsFrozen): + * runtime/Operations.h: + (JSC::normalizePrototypeChain): + * runtime/PropertyMapHashTable.h: + (JSC::PropertyMapEntry::PropertyMapEntry): + (JSC::PropertyTable::PropertyTable): + (JSC::PropertyTable::copy): + * runtime/Structure.cpp: + (JSC::Structure::materializePropertyMap): + (JSC::Structure::despecifyDictionaryFunction): + (JSC::Structure::addPropertyTransition): + (JSC::Structure::removePropertyTransition): + (JSC::Structure::changePrototypeTransition): + (JSC::Structure::despecifyFunctionTransition): + (JSC::Structure::getterSetterTransition): + (JSC::Structure::toDictionaryTransition): + (JSC::Structure::toCacheableDictionaryTransition): + (JSC::Structure::toUncacheableDictionaryTransition): + (JSC::Structure::sealTransition): + (JSC::Structure::freezeTransition): + (JSC::Structure::preventExtensionsTransition): + (JSC::Structure::isSealed): + (JSC::Structure::isFrozen): + (JSC::Structure::addPropertyWithoutTransition): + (JSC::Structure::removePropertyWithoutTransition): + (JSC::Structure::copyPropertyTable): + (JSC::Structure::get): + (JSC::Structure::despecifyFunction): + (JSC::Structure::despecifyAllFunctions): + (JSC::Structure::put): + (JSC::Structure::getPropertyNames): + * runtime/Structure.h: + (JSC::Structure::get): + (JSC::Structure::materializePropertyMapIfNecessary): + +2011-04-13 Paul Knight <pknight@apple.com> + + Reviewed by Gavin Barraclough. + + BACKTRACE() macro should check for Debug configuration in macro, not WTFReportBacktrace definition + https://bugs.webkit.org/show_bug.cgi?id=58405 + + The BACKTRACE() macro requires JavaScriptCore be built with a Debug + configuration in order for it to be enabled. Move the NDEBUG check to + the header so it will be enabled when the calling framework or + application is built with a Debug configuration, similar to how + ASSERT() and friends work. + + * wtf/Assertions.cpp: + * wtf/Assertions.h: + +2011-04-12 Ben Taylor <bentaylor.solx86@gmail.com> + + Reviewed by Alexey Proskuryakov. + + https://bugs.webkit.org/show_bug.cgi?id=58131 + + Provide a workaround for an obscure Studio 12 compiler bug, which + couldn't call src->~T() on a const T *src. + + * wtf/Vector.h: + +2011-04-12 Gavin Barraclough <barraclough@apple.com> + + Reviewed by Oliver Hunt. + + https://bugs.webkit.org/show_bug.cgi?id=58395 + Exceptions thrown from property getters called from Array prototype functions can be missed + + This is caught by an ASSERT in the top of Interpreter::executeCall. + Check for exceptions after accessing properties that could be getters. + + * runtime/ArrayPrototype.cpp: + (JSC::arrayProtoFuncSort): + (JSC::arrayProtoFuncFilter): + (JSC::arrayProtoFuncMap): + (JSC::arrayProtoFuncEvery): + (JSC::arrayProtoFuncForEach): + (JSC::arrayProtoFuncSome): + (JSC::arrayProtoFuncReduce): + (JSC::arrayProtoFuncReduceRight): + - Add exception checks. + +2011-04-12 Oliver Hunt <oliver@apple.com> + + Reviewed by Geoffrey Garen. + + Make API callback objects use weak handles to run their finalizers + https://bugs.webkit.org/show_bug.cgi?id=58389 + + Make the API object's private data struct act as a finalizer for + an api object if the callback object has a API defined finalizer. + + * API/JSCallbackObject.cpp: + (JSC::JSCallbackObjectData::finalize): + * API/JSCallbackObject.h: + * API/JSCallbackObjectFunctions.h: + (JSC::::init): + * heap/Handle.h: + +2011-04-12 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Geoffrey Garen. + + Cleaned up hash traits, and added hash traits for handles + https://bugs.webkit.org/show_bug.cgi?id=58381 + + * heap/Handle.h: + (JSC::HandleBase::swap): + (JSC::Handle::Handle): + (JSC::Handle::swap): Implemented swap, so we can rehash efficiently, and + without creating new handles (which is not allowed during handle finalization). + + * heap/Strong.h: + (JSC::Strong::swap): Use new SimpleClassHashTraits to avoid duplication. + + * heap/Weak.h: + (JSC::Weak::isHashTableDeletedValue): + (JSC::Weak::Weak): + (JSC::Weak::swap): + (JSC::Weak::hashTableDeletedValue): Ditto. + + * wtf/HashTraits.h: + (WTF::SimpleClassHashTraits::constructDeletedValue): + (WTF::SimpleClassHashTraits::isDeletedValue): Added SimpleClassHashTraits, + which are analogous to SimpleClassVectorTraits, since they are used in a + bunch of places. + + * wtf/RetainPtr.h: Use new SimpleClassHashTraits to avoid duplication. + + * wtf/text/StringHash.h: Use new SimpleClassHashTraits to avoid duplication. + +2011-04-12 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Sam Weinig. + + Cleaned up some Vector traits, and added missing Vector traits for handles + https://bugs.webkit.org/show_bug.cgi?id=58372 + + * heap/Local.h: Inherit from SimpleClassVectorTraits to avoid duplication. + + * heap/Strong.h: Ditto. + + * heap/Weak.h: Ditto. + + * parser/JSParser.cpp: Fixed a traits error. No test case because this + particular trait is not currently exercised by the parser. + + * runtime/UString.h: No need to override canInitializeWithMemset, since + our base class sets it to true. + + * wtf/VectorTraits.h: Inherit from VectorTraitsBase to avoid duplication. + + * wtf/text/WTFString.h: No need to override canInitializeWithMemset, since + our base class sets it to true. + +2011-04-12 Thouraya ANDOLSI <thouraya.andolsi@st.com> + + Reviewed by Eric Seidel. + + [Qt] Enable JIT build for SH4 platforms. + https://bugs.webkit.org/show_bug.cgi?id=58317 + enable JIT build for QT backend for SH4 platforms. + + * JavaScriptCore.pro: + * wtf/Platform.h: + +2011-04-11 Ben Taylor <bentaylor.solx86@gmail.com> + + Reviewed by Alexey Proskuryakov. + + https://bugs.webkit.org/show_bug.cgi?id=58289 + + Fix compilation on Solaris/Studio 12 C++ in wtf/FastMalloc.cpp, + WTF::TCMalloc_PageHeap::runScavengerThread(void*) expected to return a value. + + * wtf/FastMalloc.cpp: + (WTF::TCMalloc_PageHeap::runScavengerThread): + +2011-04-11 Mark Rowe <mrowe@apple.com> + + Fix the build. + + * JavaScriptCore.xcodeproj/project.pbxproj: Headers used outside of JavaScriptCore need to be marked as private. + +2011-04-11 Anna Cavender <annacc@chromium.org> + + Reviewed by Eric Carlson. + + Setup ENABLE(TRACK) feature define + https://bugs.webkit.org/show_bug.cgi?id=53556 + + + * Configurations/FeatureDefines.xcconfig: + +2011-04-11 Geoffrey Garen <ggaren@apple.com> + + Try to fix a few builds. + + Updated a few more build configurations for file moves. + + * CMakeListsWinCE.txt: + +2011-04-11 Gavin Barraclough <barraclough@apple.com> + + Reviewed by Sam Weinig. + + Bug 58263 - Use EncodedValueDescriptor on both JSVALUE32_64, JSVALUE64 + + The JSJITInterface already uses EncodedValueDescriptor to access the tag/payload + separately on JSVALUE64, even though EncodedValueDescriptor is not used in + JSVALUE64's implementation of JSValue. Remove the separate definition for m_ptr + on X86_64. Using the union allows us to remove a layer of makeImmediate()/ + immedaiteValue() methods. + + * dfg/DFGNonSpeculativeJIT.cpp: + (JSC::DFG::NonSpeculativeJIT::compile): + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::compile): + * jit/JITInlineMethods.h: + (JSC::JIT::emitTagAsBoolImmediate): + * jit/JITOpcodes.cpp: + (JSC::JIT::emit_op_not): + (JSC::JIT::emit_op_jeq_null): + (JSC::JIT::emit_op_jneq_null): + (JSC::JIT::emit_op_get_pnames): + (JSC::JIT::emit_op_eq_null): + (JSC::JIT::emit_op_neq_null): + (JSC::JIT::emitSlow_op_not): + * runtime/JSCell.h: + * runtime/JSValue.h: + * runtime/JSValueInlineMethods.h: + (JSC::JSValue::encode): + (JSC::JSValue::decode): + (JSC::JSValue::operator==): + (JSC::JSValue::operator!=): + (JSC::JSValue::JSValue): + (JSC::JSValue::operator bool): + (JSC::JSValue::asInt32): + (JSC::JSValue::isUndefinedOrNull): + (JSC::JSValue::isBoolean): + (JSC::JSValue::isCell): + (JSC::JSValue::isInt32): + (JSC::JSValue::asDouble): + (JSC::JSValue::isNumber): + (JSC::JSValue::asCell): + +2011-04-11 Geoffrey Garen <ggaren@apple.com> + + Try to fix a few builds. + + Updated a few more build configurations for file moves. + + * CMakeListsEfl.txt: + * wscript: + +2011-04-11 Geoffrey Garen <ggaren@apple.com> + + Build fix: Updated a file name. + + * CMakeLists.txt: + +2011-04-11 Geoffrey Garen <ggaren@apple.com> + + Rubber-stamped by Sam Weinig. + + Moved remaining heap implementation files to the heap folder. + + * Android.mk: + * CMakeLists.txt: + * GNUmakefile.list.am: + * JavaScriptCore.gypi: + * JavaScriptCore.pro: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * heap/ConservativeRoots.cpp: Copied from runtime/ConservativeSet.cpp. + * heap/ConservativeRoots.h: Copied from runtime/ConservativeSet.h. + * heap/Handle.h: + * heap/Heap.cpp: + * heap/MachineStackMarker.cpp: Copied from runtime/MachineStackMarker.cpp. + * heap/MachineStackMarker.h: Copied from runtime/MachineStackMarker.h. + * heap/MarkStack.cpp: Copied from runtime/MarkStack.cpp. + * heap/MarkStack.h: Copied from runtime/MarkStack.h. + * heap/MarkStackPosix.cpp: Copied from runtime/MarkStackPosix.cpp. + * heap/MarkStackSymbian.cpp: Copied from runtime/MarkStackSymbian.cpp. + * heap/MarkStackWin.cpp: Copied from runtime/MarkStackWin.cpp. + * heap/MarkedBlock.cpp: Copied from runtime/MarkedBlock.cpp. + * heap/MarkedBlock.h: Copied from runtime/MarkedBlock.h. + * heap/MarkedSpace.cpp: Copied from runtime/MarkedSpace.cpp. + * heap/MarkedSpace.h: Copied from runtime/MarkedSpace.h. + * interpreter/RegisterFile.cpp: + * runtime/ConservativeSet.cpp: Removed. + * runtime/ConservativeSet.h: Removed. + * runtime/MachineStackMarker.cpp: Removed. + * runtime/MachineStackMarker.h: Removed. + * runtime/MarkStack.cpp: Removed. + * runtime/MarkStack.h: Removed. + * runtime/MarkStackPosix.cpp: Removed. + * runtime/MarkStackSymbian.cpp: Removed. + * runtime/MarkStackWin.cpp: Removed. + * runtime/MarkedBlock.cpp: Removed. + * runtime/MarkedBlock.h: Removed. + * runtime/MarkedSpace.cpp: Removed. + * runtime/MarkedSpace.h: Removed. + +2011-04-11 Gavin Barraclough <barraclough@apple.com> + + Windows build fix. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + +2011-04-09 Gavin Barraclough <barraclough@apple.com> + + Reviewed by Sam Weinig. + + Bug 58198 - Clean up JSValue implementation for JSVALUE64 + + Remove JSNumberCell, JSImmediate, unify some methods between JSVALUE32_64/JSVALUE64 + + JSNumberCell.h largely just contained the constructors for JSValue on JSVALUE64, + which should not have been here. JSImmediate mostly contained uncalled methods, + along with the internal implementation of the JSValue constructors split unnecessarily + across a number of layers of function calls. These could largely be merged back + together. Many methods and constructors from JSVALUE32_64 and JSVALUE64 can by unified. + + The .cpp files were empty. + + Moving all these methods into JSValue.h seems to be a repro measurable regression, so + I have kept these methods in a separate JSValueInlineMethods.h. Adding the 64-bit tag + values as static const members of JSValue also measures as a repro regression, so I + have made these #defines. + + * Android.mk: + * CMakeLists.txt: + * GNUmakefile.list.am: + * JavaScriptCore.exp: + * JavaScriptCore.gypi: + * JavaScriptCore.pro: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + - Removed JSImmediate.h, JSNumberCell.h. + * bytecompiler/BytecodeGenerator.cpp: + (JSC::BytecodeGenerator::emitLoad): + - Removed class JSImmediate. + * dfg/DFGNonSpeculativeJIT.cpp: + (JSC::DFG::NonSpeculativeJIT::compile): + - Removed class JSImmediate. + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::compile): + - Removed class JSImmediate. + * jit/JITArithmetic.cpp: + (JSC::JIT::compileBinaryArithOpSlowCase): + - Removed class JSImmediate. + * jit/JITInlineMethods.h: + (JSC::JIT::emitJumpIfJSCell): + (JSC::JIT::emitJumpIfNotJSCell): + (JSC::JIT::emitJumpIfImmediateInteger): + (JSC::JIT::emitJumpIfNotImmediateInteger): + (JSC::JIT::emitFastArithDeTagImmediate): + (JSC::JIT::emitFastArithDeTagImmediateJumpIfZero): + (JSC::JIT::emitFastArithReTagImmediate): + (JSC::JIT::emitTagAsBoolImmediate): + - Removed class JSImmediate. + * jit/JITOpcodes.cpp: + (JSC::JIT::emit_op_not): + (JSC::JIT::emit_op_jeq_null): + (JSC::JIT::emit_op_jneq_null): + (JSC::JIT::emit_op_get_pnames): + (JSC::JIT::emit_op_eq_null): + (JSC::JIT::emit_op_neq_null): + (JSC::JIT::emitSlow_op_not): + - Removed class JSImmediate. + * jit/JSInterfaceJIT.h: + - Removed class JSImmediate. + * runtime/JSCell.h: + - Removed JSImmediate.h, JSNumberCell.h. + * runtime/JSImmediate.cpp: Removed. + * runtime/JSImmediate.h: Removed. + * runtime/JSNumberCell.cpp: Removed. + * runtime/JSNumberCell.h: Removed. + - Removed. + * runtime/JSObject.h: + - Removed JSImmediate.h, JSNumberCell.h. + * runtime/JSString.h: + - Removed JSImmediate.h, JSNumberCell.h. + * runtime/JSValue.h: + - Added tags for JSVALUE64, moved out some JSVALUE32_64 methods, unified with JSVALUE64. + * runtime/JSValueInlineMethods.h: Added. + (JSC::JSValue::toInt32): + (JSC::JSValue::toUInt32): + (JSC::JSValue::isUInt32): + (JSC::JSValue::asUInt32): + (JSC::JSValue::uncheckedGetNumber): + (JSC::JSValue::toJSNumber): + (JSC::jsNaN): + (JSC::JSValue::getNumber): + (JSC::JSValue::getBoolean): + (JSC::JSValue::JSValue): + (JSC::JSValue::encode): + (JSC::JSValue::decode): + (JSC::JSValue::operator bool): + (JSC::JSValue::operator==): + (JSC::JSValue::operator!=): + (JSC::JSValue::isUndefined): + (JSC::JSValue::isNull): + (JSC::JSValue::isUndefinedOrNull): + (JSC::JSValue::isCell): + (JSC::JSValue::isInt32): + (JSC::JSValue::isDouble): + (JSC::JSValue::isTrue): + (JSC::JSValue::isFalse): + (JSC::JSValue::tag): + (JSC::JSValue::payload): + (JSC::JSValue::asInt32): + (JSC::JSValue::asDouble): + (JSC::JSValue::asCell): + (JSC::JSValue::isNumber): + (JSC::JSValue::isBoolean): + (JSC::JSValue::makeImmediate): + (JSC::JSValue::immediateValue): + (JSC::reinterpretDoubleToIntptr): + (JSC::reinterpretIntptrToDouble): + - Methods moved here from JSImmediate.h/JSNumberCell.h/JSValue.h. + * runtime/Operations.h: + - Removed JSImmediate.h, JSNumberCell.h. + * wtf/StdLibExtras.h: + - Export bitwise_cast. + +2011-04-11 Thouraya ANDOLSI <thouraya.andolsi@st.com> + + Reviewed by Oliver Hunt. + + SH4 JIT SUPPORT. + https://bugs.webkit.org/show_bug.cgi?id=44329 + + Add JIT remaining part for SH4 platforms. + + * assembler/MacroAssemblerSH4.h: + * jit/JIT.h: + * jit/JITInlineMethods.h: + * jit/JITOpcodes32_64.cpp: + * jit/JITPropertyAccess32_64.cpp: + * jit/JITStubs.cpp: + * jit/JITStubs.h: + * jit/JSInterfaceJIT.h: + +2011-04-10 Geoffrey Garen <ggaren@apple.com> + + Rubber-stamped by Beth Dakin. + + Moved Heap.h and Heap.cpp to the heap folder, because anything less + would be uncivilized. + + * Android.mk: + * CMakeLists.txt: + * GNUmakefile.list.am: + * JavaScriptCore.gypi: + * JavaScriptCore.pro: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * heap/Heap.cpp: Copied from JavaScriptCore/runtime/Heap.cpp. + * heap/Heap.h: Copied from JavaScriptCore/runtime/Heap.h. + * runtime/Heap.cpp: Removed. + * runtime/Heap.h: Removed. + +2011-04-10 Patrick Gansterer <paroga@webkit.org> + + Reviewed by Darin Adler. + + Remove duplicated code from AtomicString::fromUTF8() + https://bugs.webkit.org/show_bug.cgi?id=53711 + + * JavaScriptCore.exp: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * wtf/text/AtomicString.cpp: + (WTF::AtomicString::fromUTF8Internal): + * wtf/text/AtomicString.h: + (WTF::AtomicString::fromUTF8): + * wtf/unicode/UTF8.cpp: + (WTF::Unicode::calculateStringHashAndLengthFromUTF8): + * wtf/unicode/UTF8.h: + +2011-04-10 Maciej Stachowiak <mjs@apple.com> + + Not reviewed. + + Fix build (at least on Lion) by adding some newish header files to + PrivateHeaders. + + * JavaScriptCore.xcodeproj/project.pbxproj: + +2011-04-09 Geoffrey Garen <ggaren@apple.com> + + Not reviewed. + + Try recommitting some things svn left out of its last commit. + + * heap/Handle.h: + (JSC::HandleBase::operator!): + (JSC::HandleBase::HandleBase): + (JSC::HandleBase::slot): + (JSC::HandleBase::setSlot): + (JSC::Handle::Handle): + * heap/HandleHeap.cpp: + (JSC::HandleHeap::markWeakHandles): + (JSC::HandleHeap::finalizeWeakHandles): + (JSC::HandleHeap::isValidWeakNode): + * heap/HandleHeap.h: + (JSC::HandleHeap::globalData): + +2011-04-08 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Oliver Hunt. + + A few heap-related renames and file moves. + + WeakGCPtr<T> => Weak<T> + Global<T> => Strong<T> + collector/ => heap/ + collector/* => heap/* + runtime/WeakGCPtr.h => heap/Weak.h + + (Eventually, even more files should move into the heap directory. Like + Heap.h and Heap.cpp, for example.) + + * API/JSClassRef.h: + * CMakeLists.txt: + * GNUmakefile.am: + * GNUmakefile.list.am: + * JavaScriptCore.gypi: + * JavaScriptCore.pri: + * JavaScriptCore.pro: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops: + * JavaScriptCore.vcproj/JavaScriptCore/copy-files.cmd: + * JavaScriptCore.vcproj/jsc/jscCommon.vsprops: + * JavaScriptCore.xcodeproj/project.pbxproj: + * bytecode/SamplingTool.h: + * bytecompiler/BytecodeGenerator.h: + * collector: Removed. + * collector/handles: Removed. + * collector/handles/Global.h: Removed. + * collector/handles/Handle.h: Removed. + * collector/handles/HandleHeap.cpp: Removed. + * collector/handles/HandleHeap.h: Removed. + * collector/handles/HandleStack.cpp: Removed. + * collector/handles/HandleStack.h: Removed. + * collector/handles/Local.h: Removed. + * collector/handles/LocalScope.h: Removed. + * heap: Copied from collector. + * heap/Handle.h: Copied from collector/handles/Handle.h. + * heap/HandleHeap.cpp: Copied from collector/handles/HandleHeap.cpp. + * heap/HandleHeap.h: Copied from collector/handles/HandleHeap.h. + * heap/HandleStack.cpp: Copied from collector/handles/HandleStack.cpp. + * heap/HandleStack.h: Copied from collector/handles/HandleStack.h. + * heap/Local.h: Copied from collector/handles/Local.h. + * heap/LocalScope.h: Copied from collector/handles/LocalScope.h. + * heap/Strong.h: Copied from collector/handles/Global.h. + (JSC::Strong::Strong): + (JSC::Strong::~Strong): + (JSC::Strong::operator=): + * heap/Weak.h: Copied from runtime/WeakGCPtr.h. + (JSC::Weak::Weak): + (JSC::Weak::~Weak): + * heap/handles: Removed. + * interpreter/RegisterFile.h: + * jit/JITStubs.cpp: + (JSC::JITThunks::hostFunctionStub): + * jit/JITStubs.h: + * runtime/Structure.h: + * runtime/WeakGCPtr.h: Removed. + +2011-04-08 Alpha Lam <hclam@chromium.org> + + Unreviewed, rolling out r83335. + http://trac.webkit.org/changeset/83335 + https://bugs.webkit.org/show_bug.cgi?id=53556 + + GTK and QT bots are broken + + * Configurations/FeatureDefines.xcconfig: + +2011-04-08 Gavin Barraclough <barraclough@apple.com> + + Ooops, typo, build fix. + + * dfg/DFGByteCodeParser.cpp: + (JSC::DFG::ByteCodeParser::parse): + +2011-04-08 Gavin Barraclough <barraclough@apple.com> + + Reviewed by Oliver Hunt. + + Bug 58154 - Add support for comparison operators to the DFG JIT. + + Add support for <, <=, ==, ===, and also !. Add support for all corresponding + bytecode ops, including the not- and -null forms. Initially add functionally + correct support, we'll revisit the performance. + + * dfg/DFGByteCodeParser.cpp: + (JSC::DFG::ByteCodeParser::ByteCodeParser): + (JSC::DFG::ByteCodeParser::constantNull): + (JSC::DFG::ByteCodeParser::parse): + - Add support for parsing of bytecode opcodes, + * dfg/DFGJITCodeGenerator.h: + (JSC::DFG::JITCodeGenerator::callOperation): + - Add new operation call types, return bool values. + * dfg/DFGNode.h: + - Add new node types. + * dfg/DFGNonSpeculativeJIT.cpp: + (JSC::DFG::NonSpeculativeJIT::compile): + - Add code generation for new nodes. + * dfg/DFGOperations.cpp: + (JSC::DFG::operationCompareLess): + (JSC::DFG::operationCompareLessEq): + (JSC::DFG::operationCompareEq): + (JSC::DFG::operationCompareStrictEq): + (JSC::DFG::dfgConvertJSValueToBoolean): + * dfg/DFGOperations.h: + - Add operation callbacks to implement new ops. + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::compile): + - Add code generation for new nodes. + * jit/JITOpcodes.cpp: + (JSC::JIT::privateCompileCTIMachineTrampolines): + - Switched to a simpler <0 check, rather than relying on an internal value in JSImmediate. + * jit/JITPropertyAccess.cpp: + (JSC::JIT::privateCompilePatchGetArrayLength): + - Switched to a simpler <0 check, rather than relying on an internal value in JSImmediate. + * runtime/JSImmediate.h: + - Make tag values public, rather than relying on a friend - this matches JSVALUE32_64. + +2011-04-07 Anna Cavender <annacc@chromium.org> + + Reviewed by Eric Carlson. + + Setup ENABLE(TRACK) feature define + https://bugs.webkit.org/show_bug.cgi?id=53556 + + + * Configurations/FeatureDefines.xcconfig: + +2011-04-07 Balazs Kelemen <kbalazs@webkit.org> + + Reviewed by Kenneth Rohde Christiansen. + + [WK2][Qt][GTK] Introduce common use flag for the shared UNIX domain socket IPC implementation + https://bugs.webkit.org/show_bug.cgi?id=58030 + + * wtf/Platform.h: Introduce USE(UNIX_DOMAIN_SOCKETS) for WebKit2. + +2011-04-08 Adam Roben <aroben@apple.com> + + Clean build fix + + * JavaScriptCore.vcproj/JavaScriptCore/copy-files.cmd: Don't try to delete directories that + don't exist. Also switched from del /s to rmdir /s, which has the benefit of deleting the + directory itself in addition to the files it contains. + +2011-04-07 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Maciej Stachowiak. + + Some Handle<T> cleanup + https://bugs.webkit.org/show_bug.cgi?id=58109 + + * bytecode/SamplingTool.h: Sorted alphabetically because that's the + WebKit style. Added a Global.h #include that was previously missing + but harmless. + + * collector/handles/Global.h: + (JSC::Global::Global): Added a null constructor. No need for a special + tag, and the tag is incompatible with some data structures. + + (JSC::Global::isHashTableDeletedValue): + (JSC::Global::~Global): + (JSC::Global::set): + (JSC::Global::operator=): + (JSC::Global::clear): + (JSC::Global::hashTableDeletedValue): Reordered constructors to be near + each other. + + (JSC::Global::setWithWriteBarrier): Renamed internalSet to + setWithWriteBarrier for clarity, and funneled more code into using set + and setWithWriteBarrier to reduce duplication. + + * collector/handles/Handle.h: + (JSC::HandleBase::operator!): + (JSC::HandleBase::HandleBase): Removed isEmpty(), since we already have + boolean and ! operators. + + (JSC::HandleBase::slot): + (JSC::HandleBase::setSlot): + (JSC::Handle::Handle): Added general support for null Handles. This was + previously outlawed by ASSERTs, but our code has grown to support and + rely on null Handles. + + * collector/handles/HandleHeap.cpp: + (JSC::HandleHeap::markWeakHandles): + (JSC::HandleHeap::finalizeWeakHandles): + (JSC::HandleHeap::isValidWeakNode): Migrated from isValidWeakHandle, + and beefed this up a bit. + + * collector/handles/HandleHeap.h: + (JSC::HandleHeap::globalData): Added accessor, used by some new set functions. + + * collector/handles/Local.h: Moved hash traits to the bottom of the file, + since this file is about the Local class, not the traits. + + (JSC::::Local): Updated for removal of invalidate(). + + (JSC::::operator): Deployed "using" to avoid a lot of this-> + template funny business. + + (JSC::::setWithSlotCheck): Renamed from internalSet, more specific now. + + * interpreter/RegisterFile.h: + (JSC::RegisterFile::RegisterFile): Updated to use null constructor. + + * jit/JITStubs.cpp: + (JSC::JITThunks::hostFunctionStub): + + * runtime/JSPropertyNameIterator.h: + (JSC::Structure::setEnumerationCache): + * runtime/Structure.h: Removed clearEnumerationCache + because it was an unused holdover from when the enumeration cache was + not a handle. + + * runtime/WeakGCMap.h: + (JSC::WeakGCMap::set): Finish initializing our handle before putting it + in the table. This seemed more logical, and at one point was required + to avoid triggering an ASSERT. + + * runtime/WeakGCPtr.h: Inherit from Handle instead of rolling our own + handle-like behavior, to avoid duplication. + + (JSC::WeakGCPtr::WeakGCPtr): + (JSC::WeakGCPtr::~WeakGCPtr): + (JSC::WeakGCPtr::get): + (JSC::WeakGCPtr::clear): + (JSC::WeakGCPtr::set): + (JSC::WeakGCPtr::setWithWriteBarrier): Removed duplicate code and + standardized on Handle idioms. + +2011-04-07 Adam Barth <abarth@webkit.org> + + Reviewed by Martin Robinson. + + Refactor Gtk build system to separate list of files + https://bugs.webkit.org/show_bug.cgi?id=58090 + + This is the first step towards generating part of the GTK build system + using GYP. In the first iteration, our plan is to just generate the + list of files. This patch is the first step, which is to separate out + the part of JavaScriptCore build system that we intend to generate from + the rest of the build system. + + * GNUmakefile.am: + * GNUmakefile.list.am: Added. + +2011-04-07 Zoltan Herczeg <zherczeg@webkit.org> + + Reviewed by Gavin Barraclough. + + Mapping booleans the same way as integers + https://bugs.webkit.org/show_bug.cgi?id=56913 + + Instead of having a seperate tag field for booleans, + the logical values are stored in the payload field + (for JSValue32_64 representation). + + 1.007x speedup on SunSpider. + + * jit/JIT.h: + * jit/JITInlineMethods.h: + (JSC::JIT::emitStoreBool): + * jit/JITOpcodes32_64.cpp: + (JSC::JIT::emit_op_instanceof): + (JSC::JIT::emit_op_not): + (JSC::JIT::emit_op_jfalse): + (JSC::JIT::emitSlow_op_jfalse): + (JSC::JIT::emit_op_jtrue): + (JSC::JIT::emitSlow_op_jtrue): + (JSC::JIT::emit_op_jeq_null): + (JSC::JIT::emit_op_jneq_null): + (JSC::JIT::emit_op_eq): + (JSC::JIT::emitSlow_op_eq): + (JSC::JIT::emit_op_neq): + (JSC::JIT::emitSlow_op_neq): + (JSC::JIT::compileOpStrictEq): + (JSC::JIT::emit_op_eq_null): + (JSC::JIT::emit_op_neq_null): + * jit/JSInterfaceJIT.h: + * runtime/JSValue.h: + (JSC::JSValue::JSValue): + (JSC::JSValue::isTrue): + (JSC::JSValue::isFalse): + (JSC::JSValue::getBoolean): + +2011-04-07 Eric Seidel <eric@webkit.org> + + Reviewed by Adam Barth. + + Add stub support for generating Gtk build system from gyp + https://bugs.webkit.org/show_bug.cgi?id=58086 + + This does not produce a buildable JavaScriptCore, but it + does allow running gyp/configure --port=gtk and having + it generate a gtk.Makefile which we can use for testing + the rest of the plumbing. + + * gyp/gtk.gyp: Added. + +2011-04-07 Andrew Scherkus <scherkus@chromium.org> + + Revert ENABLE_TRACK patch due to compile failures. + + * Configurations/FeatureDefines.xcconfig: + +2011-04-07 Adam Barth <abarth@webkit.org> + + Fix whitespace in GNUmakefile.am. + + * GNUmakefile.am: + +2011-04-07 Gavin Barraclough <barraclough@apple.com> + + Fix a couple of typos in comments that Darin spotted. + + * jit/JITOpcodes.cpp: + (JSC::JIT::emit_op_not): + * runtime/JSImmediate.h: + +2011-04-06 Gavin Barraclough <barraclough@apple.com> + + Reviewed by Geoff Garen. + Bug 58057 - Store boolean payload in low bit of JSImmediate + + And remove some uncalled functions from JSImmediate.h + + * jit/JITInlineMethods.h: + (JSC::JIT::emitTagAsBoolImmediate): + * jit/JITOpcodes.cpp: + (JSC::JIT::emit_op_not): + * runtime/JSImmediate.h: + (JSC::JSImmediate::makeInt): + (JSC::JSImmediate::makeBool): + (JSC::JSImmediate::intValue): + (JSC::JSImmediate::boolValue): + (JSC::JSImmediate::asInt32): + (JSC::JSImmediate::toDouble): + (JSC::JSValue::asInt32): + (JSC::JSValue::isUInt32): + (JSC::JSValue::asUInt32): + +2011-04-07 Liang Qi <liang.qi@nokia.com> + + Reviewed by Laszlo Gombos. + + [Qt][Symbian] Enable webkit build with GCCE on Symbian. + https://bugs.webkit.org/show_bug.cgi?id=57841 + + * wtf/MathExtras.h: GCCE compiler doesn't support those std static functions. + +2011-04-06 Dai Mikurube <dmikurube@chromium.org> + + Reviewed by David Levin. + + Add QUOTA build flag for unified quota API + https://bugs.webkit.org/show_bug.cgi?id=57918 + + * Configurations/FeatureDefines.xcconfig: Added QUOTA build flag + +2011-04-06 Kevin Ollivier <kevino@theolliviers.com> + + Reviewed by Darin Adler. + + Make sure JS_EXPORT_PRIVATE is an empty define when we aren't using the export macros. + + https://bugs.webkit.org/show_bug.cgi?id=27551 + + * config.h: + +2011-04-06 Oliver Hunt <oliver@apple.com> + + Reviewed by Gavin Barraclough. + + Stop JSObject::isUsingInlineStorage() from using the structure + https://bugs.webkit.org/show_bug.cgi?id=57986 + + Make the isUsingInlineStorage() implementation just look at + whether the property storage is inside the object. + + * runtime/JSObject.h: + (JSC::JSObject::isUsingInlineStorage): + (JSC::JSObject::JSObject): + +2011-04-06 Gavin Barraclough <barraclough@apple.com> + + Rubber stamped by Geoff Garen. + + Update comments documenting JSVALUE64/JSVALUE32_64 JSValue representations. + + * runtime/JSImmediate.h: + * runtime/JSValue.h: + +2011-04-06 Lucas De Marchi <lucas.demarchi@profusion.mobi> + + cmake: Fix build for ARMv7 + + * CMakeLists.txt: add missing file. + +2011-04-06 Liang Qi <liang.qi@nokia.com> + + Reviewed by Benjamin Poulain. + + Correct a include file name. + https://bugs.webkit.org/show_bug.cgi?id=57839 + + * wtf/PageAllocatorSymbian.h: It should be case sensitive. This fix + builds on Unix hosts. + +2011-04-06 Adam Roben <aroben@apple.com> + + Build fix after r83056 + + * JavaScriptCore.vcproj/JavaScriptCore/copy-files.cmd: Added property svn:executable. + +2011-04-06 Adam Roben <aroben@apple.com> + + Move JavaScriptCoreGenerated's file-copying logic out to a new script + + Hopefully this will make it easier to modify this logic in the future. I also made the + script much quieter than the old logic, since it didn't seem helpful to see long lists of + filenames during the copying phase. + + If we like this new style, we could copy it for our other projects. + + Fixes <http://webkit.org/b/57950> JavaScriptCoreGenerated's file-copying logic is hard to + modify and noisy + + Reviewed by Steve Falkenburg. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.make: Moved logic to copy + files from here... + * JavaScriptCore.vcproj/JavaScriptCore/copy-files.cmd: ...to here. (Added.) + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.vcproj: Added copy-files.cmd + for convenience. + +2011-04-05 Geoffrey Garen <ggaren@apple.com> + + Try to fix the Windows build. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Who likes export files? I do! + +2011-04-05 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Oliver Hunt. + + Introduced the concept of opaque roots, in preparation for marking the DOM with them + https://bugs.webkit.org/show_bug.cgi?id=57903 + + * JavaScriptCore.exp: Who likes export files? I do! + + * collector/handles/HandleHeap.cpp: + (JSC::isValidWeakHandle): Factored out a helper function for ASSERTs. + + (JSC::WeakHandleOwner::~WeakHandleOwner): Moved from header to avoid + weak linkage problems. + + (JSC::WeakHandleOwner::isReachableFromOpaqueRoots): New callback. + Currently unused. + + (JSC::WeakHandleOwner::finalize): Switched from pure virtual to a + default empty implementation, since not all clients necessarily want + or need non-trivial finalizers. + + (JSC::HandleHeap::markWeakHandles): Split updateWeakHandles into two + passes. The first pass marks all reachable weak handles. The second pass + finalizes all unreachable weak handles. This must be two passes because + we don't know the set of finalizable weak handles until we're done + marking all weak handles. + + (JSC::HandleHeap::finalizeWeakHandles): Use new helper function. + + * collector/handles/HandleHeap.h: Ditto. + + * runtime/Heap.cpp: + (JSC::Heap::destroy): + (JSC::Heap::markRoots): + (JSC::Heap::reset): Split out handle marking from handle finalization. + + * runtime/MarkStack.cpp: + (JSC::MarkStack::reset): + * runtime/MarkStack.h: + (JSC::MarkStack::addOpaqueRoot): + (JSC::MarkStack::containsOpaqueRoot): + (JSC::MarkStack::opaqueRootCount): + (JSC::HeapRootMarker::markStack): New helper functions for managing the + set of opaque roots. + + * runtime/WeakGCMap.h: + (JSC::WeakGCMap::finalize): Renamed to match parent class declaration. + +2011-04-05 Balazs Kelemen <kbalazs@webkit.org> + + Reviewed by Darin Adler. + + Build fix for YarrParser.h + https://bugs.webkit.org/show_bug.cgi?id=57822 + + * yarr/YarrParser.h: + (JSC::Yarr::Parser::CharacterClassParserDelegate::CharacterClassParserDelegate): + +2011-04-05 Steve Falkenburg <sfalken@apple.com> + + Follow-up Windows build fix. + Don't skip react-to-vsprops-changes.py for all production builds, + only those initiated via JavaScriptCore.make. + + * JavaScriptCore.vcproj/JavaScriptCore.make: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.make: + +2011-04-05 Oliver Hunt <oliver@apple.com> + + Reviewed by Darin Adler. + + REGRESSION (r82849): 85,000+ JSC-related leaks seen on SnowLeopard Intel Leaks + https://bugs.webkit.org/show_bug.cgi?id=57857 + + Whoops, accidentally removed a deref(). + + * bytecode/StructureStubInfo.cpp: + (JSC::StructureStubInfo::deref): + +2011-04-05 Steve Falkenburg <sfalken@apple.com> + + Windows build fix. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.vcproj: Add per-configuration vsprops files. + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGeneratedCommon.vsprops: Removed inheritance from common.vsprops. + Set production environment variable before calling make. + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGeneratedDebug.vsprops: Added. + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGeneratedDebugAll.vsprops: Added. + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGeneratedDebugCairoCFLite.vsprops: Added. + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGeneratedProduction.vsprops: Added. + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGeneratedRelease.vsprops: Added. + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGeneratedReleaseCairoCFLite.vsprops: Added. + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGeneratedReleasePGO.vsprops: Added. + +2011-04-05 Oliver Hunt <oliver@apple.com> + + Reviewed by Gavin Barraclough. + + Make caches window show more info about non-jsobject GC values + https://bugs.webkit.org/show_bug.cgi?id=57874 + + Add ClassInfo to the various internal JS types that currently + don't have any, and make the text for caches window show the + classname for non-JSObject instances. + + * runtime/Executable.cpp: + * runtime/Executable.h: + (JSC::ExecutableBase::createStructure): + (JSC::NativeExecutable::createStructure): + (JSC::NativeExecutable::NativeExecutable): + (JSC::EvalExecutable::createStructure): + (JSC::ProgramExecutable::createStructure): + (JSC::FunctionExecutable::createStructure): + * runtime/Heap.cpp: + (JSC::TypeCounter::typeName): + * runtime/JSGlobalData.cpp: + (JSC::JSGlobalData::JSGlobalData): + * runtime/JSGlobalData.h: + * runtime/ScopeChain.cpp: + * runtime/ScopeChain.h: + (JSC::ScopeChainNode::createStructure): + * runtime/StructureChain.cpp: + * runtime/StructureChain.h: + (JSC::StructureChain::createStructure): + +2011-04-05 Nikolas Zimmermann <nzimmermann@rim.com> + + Reviewed by Andreas Kling. + + Cleanup StringConcatenate + https://bugs.webkit.org/show_bug.cgi?id=57836 + + Don't use PassRefPtr in local variables, properly store in RefPtrs and release on return. + Add a makeString() variant taking 9 arguments, needed by a follow-up patch. + + * wtf/text/StringConcatenate.h: + (WTF::tryMakeString): + (WTF::makeString): + +2011-04-04 Sheriff Bot <webkit.review.bot@gmail.com> + + Unreviewed, rolling out r82876. + http://trac.webkit.org/changeset/82876 + https://bugs.webkit.org/show_bug.cgi?id=57816 + + Caused a lot of test crashes (Requested by tkent on #webkit). + + * JavaScriptCore.exp: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * wtf/FastMalloc.cpp: + (WTF::tryFastMalloc): + (WTF::fastMalloc): + (WTF::tryFastCalloc): + (WTF::fastCalloc): + (WTF::fastFree): + (WTF::tryFastRealloc): + (WTF::fastRealloc): + (WTF::fastMallocSize): + (WTF::TCMalloc_PageHeap::isScavengerSuspended): + (WTF::TCMalloc_PageHeap::scheduleScavenger): + (WTF::TCMalloc_PageHeap::suspendScavenger): + (WTF::TCMalloc_PageHeap::signalScavenger): + (WTF::TCMallocStats::malloc): + (WTF::TCMallocStats::free): + (WTF::TCMallocStats::fastCalloc): + (WTF::TCMallocStats::tryFastCalloc): + (WTF::TCMallocStats::calloc): + (WTF::TCMallocStats::fastRealloc): + (WTF::TCMallocStats::tryFastRealloc): + (WTF::TCMallocStats::realloc): + (WTF::TCMallocStats::fastMallocSize): + * wtf/FastMalloc.h: + (WTF::Internal::fastMallocMatchValidationType): + (WTF::Internal::fastMallocMatchValidationValue): + (WTF::Internal::setFastMallocMatchValidationType): + (WTF::fastMallocMatchValidateFree): + * wtf/Platform.h: + +2011-04-04 Oliver Hunt <oliver@apple.com> + + Reviewed by Antti Koivisto. + + Stop JSCell.h from including Structure.h + https://bugs.webkit.org/show_bug.cgi?id=57809 + + * runtime/GetterSetter.h: + * runtime/JSAPIValueWrapper.h: + * runtime/JSCell.h: + (JSC::JSCell::JSValue::toThisObject): + * runtime/JSString.h: + * runtime/ScopeChain.h: + * runtime/Structure.h: + (JSC::JSCell::isObject): + (JSC::JSCell::isString): + (JSC::JSCell::classInfo): + (JSC::JSCell::createDummyStructure): + (JSC::JSValue::needsThisConversion): + (JSC::MarkStack::internalAppend): + * runtime/StructureChain.h: + +2011-04-04 Oliver Hunt <oliver@apple.com> + + Fix clang build. + + * wtf/FastMalloc.cpp: + (WTF::fastMalloc): + (WTF::fastCalloc): + (WTF::fastRealloc): + +2011-04-04 Oliver Hunt <oliver@apple.com> + + Remove accidental change to Platform.h + + * wtf/Platform.h: + +2011-04-04 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Oliver Hunt. + + Fixed a weak-handle-related leak in RegisterFile + https://bugs.webkit.org/show_bug.cgi?id=57793 + + * interpreter/RegisterFile.cpp: Nixed leaky GlobalObjectNotifier. + * interpreter/RegisterFile.h: + (JSC::RegisterFile::GlobalObjectOwner::finalize): + (JSC::RegisterFile::RegisterFile): Replaced GlobalObjectNotifier with + a per-RegisterFile weak handle owner, which does not leak. + + * runtime/WeakGCPtr.h: + (JSC::WeakGCPtr::set): Allow set() to take a context argument, since + RegisterFile now needs this. (Seems like it was an accidental omission + all along.) + +2011-04-04 Oliver Hunt <oliver@apple.com> + + Reviewed by Geoffrey Garen. + + Make malloc validation useful + https://bugs.webkit.org/show_bug.cgi?id=57502 + + This patch changes FAST_MALLOC_MATCH_VALIDATION with a general + corruption check that tags the beginning and end of all allocations + to check for write overflows and overwrites the contents of + memory on free in order to (hopefully) show up use-after-free issues + sooner. + + We also turn it on by default for debug builds. + + * JavaScriptCore.exp: + * wtf/FastMalloc.cpp: + (WTF::tryFastMalloc): + (WTF::fastMalloc): + (WTF::tryFastCalloc): + (WTF::fastCalloc): + (WTF::fastFree): + (WTF::tryFastRealloc): + (WTF::fastRealloc): + (WTF::TCMalloc_PageHeap::isScavengerSuspended): + (WTF::TCMalloc_PageHeap::scheduleScavenger): + (WTF::TCMalloc_PageHeap::suspendScavenger): + (WTF::TCMalloc_PageHeap::signalScavenger): + (WTF::TCMallocStats::malloc): + (WTF::TCMallocStats::free): + (WTF::TCMallocStats::fastCalloc): + (WTF::TCMallocStats::tryFastCalloc): + (WTF::TCMallocStats::calloc): + (WTF::TCMallocStats::fastRealloc): + (WTF::TCMallocStats::tryFastRealloc): + (WTF::TCMallocStats::realloc): + * wtf/FastMalloc.h: + (WTF::Internal::fastMallocValidationHeader): + (WTF::Internal::fastMallocValidationSuffix): + (WTF::Internal::fastMallocMatchValidationType): + (WTF::Internal::setFastMallocMatchValidationType): + (WTF::fastMallocMatchValidateFree): + (WTF::fastMallocValidate): + * wtf/Platform.h: + +2011-04-04 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Oliver Hunt. + + Renamed clearWeakPointers => updateWeakHandles and removed misleading comment + https://bugs.webkit.org/show_bug.cgi?id=57790 + + * collector/handles/HandleHeap.cpp: + (JSC::HandleHeap::updateWeakHandles): Updated for rename. + + * collector/handles/HandleHeap.h: Removed comment claiming that this + function should only be called during teardown, because it's actually + called after every GC pass. + + * runtime/Heap.cpp: + (JSC::Heap::destroy): + (JSC::Heap::markRoots): Updated for rename. + +2011-04-04 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Oliver Hunt. + + Standardized handling of handles for immediate values + https://bugs.webkit.org/show_bug.cgi?id=57788 + + * collector/handles/HandleHeap.cpp: + (JSC::HandleHeap::clearWeakPointers): Don't check for null or non-cell + values here, because our write barrier guarantees that such values are + not in the weak list. + + (JSC::HandleHeap::writeBarrier): Standardized on checking for null before + checking for cell, and on using early return instead of if/else. + + * collector/handles/HandleHeap.h: + (JSC::HandleHeap::deallocate): + (JSC::HandleHeap::makeWeak): Ditto. + +2011-04-04 Geoffrey Garen <ggaren@apple.com> + + Not reviewed. + + Removed a redundant variable from HandleHeap + https://bugs.webkit.org/show_bug.cgi?id=57786 + + Forgot to commit the file that actually removes the data member! + + * collector/handles/HandleHeap.h: + +2011-04-04 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Oliver Hunt. + + Removed a redundant variable from HandleHeap + https://bugs.webkit.org/show_bug.cgi?id=57786 + + We don't need a specific variable to indicate that we're in the middle + of the finalization phase, since m_nextToFinalize already does this. + + * collector/handles/HandleHeap.cpp: + (JSC::HandleHeap::HandleHeap): + (JSC::HandleHeap::clearWeakPointers): + (JSC::HandleHeap::writeBarrier): + +2011-04-04 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Oliver Hunt. + + Renamed Finalizer => WeakHandleOwner (in preparation for adding a reachability callback) + https://bugs.webkit.org/show_bug.cgi?id=57775 + + Also renamed noFinalizer => emptyWeakOwner, since this is really an + optimization for a weak owner with empty callbacks. + + * collector/handles/HandleHeap.cpp: + (JSC::HandleHeap::clearWeakPointers): Updated for renames. Removed + redundant initialization of m_nextToFinalize. Moved deletion check inside + weak owner check, since the weak owner can't delete the node if there is + no weak owner! + + * collector/handles/HandleHeap.h: + (JSC::WeakHandleOwner::~WeakHandleOwner): + (JSC::HandleHeap::makeWeak): Updated for renames. + + (JSC::HandleHeap::hasWeakOwner): Changed getFinalizer to hasWeakOwner, + to clarify this function's role in assertions. + + (JSC::HandleHeap::Node::Node): + (JSC::HandleHeap::Node::makeWeak): + (JSC::HandleHeap::Node::isWeak): + (JSC::HandleHeap::Node::weakOwner): + (JSC::HandleHeap::Node::weakOwnerContext): + (JSC::HandleHeap::Node::emptyWeakOwner): + * interpreter/RegisterFile.cpp: + (JSC::RegisterFile::globalObjectCollectedNotifier): + * interpreter/RegisterFile.h: + * runtime/WeakGCMap.h: + * runtime/WeakGCPtr.h: + (JSC::WeakGCPtr::WeakGCPtr): + (JSC::WeakGCPtr::set): Updated for renames. + +2011-04-04 Oliver Hunt <oliver@apple.com> + + Fix WinCE build. + + * bytecode/Instruction.h: + * interpreter/Interpreter.cpp: + (JSC::Interpreter::tryCachePutByID): + (JSC::Interpreter::tryCacheGetByID): + +2011-04-04 Adam Roben <aroben@apple.com> + + Delete mt.dep files when doing a clean build due to .vsprops file changes + + Apparently this is yet another file that Visual Studio can't figure out it needs to rebuild. + + Fixes <http://webkit.org/b/57777> r82850 failed to build on Windows Debug (Build) + + Reviewed by Brian Weinstein. + + * JavaScriptCore.vcproj/JavaScriptCore/react-to-vsprops-changes.py: + (main): Added dep to the list of extensions we look for when choosing files to delete. + +2011-04-01 Oliver Hunt <oliver@apple.com> + + Reviewed by Geoffrey Garen. + + Make StructureChain GC allocated + https://bugs.webkit.org/show_bug.cgi?id=56695 + + Make StructureChain GC allocated, and make the various owners + mark it correctly. + + * JavaScriptCore.exp: + * bytecode/CodeBlock.cpp: + (JSC::CodeBlock::dump): + (JSC::CodeBlock::derefStructures): + (JSC::CodeBlock::refStructures): + (JSC::CodeBlock::markAggregate): + * bytecode/Instruction.h: + (JSC::PolymorphicAccessStructureList::PolymorphicStubInfo::set): + (JSC::PolymorphicAccessStructureList::PolymorphicAccessStructureList): + (JSC::PolymorphicAccessStructureList::derefStructures): + (JSC::PolymorphicAccessStructureList::markAggregate): + (JSC::Instruction::Instruction): + * bytecode/StructureStubInfo.cpp: + (JSC::StructureStubInfo::deref): + (JSC::StructureStubInfo::markAggregate): + * bytecode/StructureStubInfo.h: + (JSC::StructureStubInfo::initGetByIdChain): + (JSC::StructureStubInfo::initPutByIdTransition): + * bytecompiler/BytecodeGenerator.cpp: + (JSC::BytecodeGenerator::emitJumpIfNotFunctionCall): + (JSC::BytecodeGenerator::emitJumpIfNotFunctionApply): + * collector/handles/Handle.h: + (JSC::HandleConverter::operator->): + (JSC::HandleConverter::operator*): + * interpreter/Interpreter.cpp: + (JSC::Interpreter::privateExecute): + * jit/JITOpcodes.cpp: + (JSC::JIT::emit_op_jneq_ptr): + * jit/JITOpcodes32_64.cpp: + (JSC::JIT::emit_op_jneq_ptr): + * jit/JITPropertyAccess.cpp: + (JSC::JIT::privateCompileGetByIdChainList): + * jit/JITPropertyAccess32_64.cpp: + (JSC::JIT::privateCompileGetByIdChainList): + * jit/JITStubs.cpp: + (JSC::JITThunks::tryCachePutByID): + (JSC::JITThunks::tryCacheGetByID): + (JSC::getPolymorphicAccessStructureListSlot): + (JSC::DEFINE_STUB_FUNCTION): + * runtime/JSCell.h: + * runtime/JSGlobalData.cpp: + (JSC::JSGlobalData::JSGlobalData): + * runtime/JSGlobalData.h: + * runtime/JSGlobalObject.cpp: + (JSC::markIfNeeded): + * runtime/JSGlobalObject.h: + (JSC::Structure::prototypeChain): + * runtime/JSObject.h: + (JSC::JSObject::putDirectInternal): + (JSC::JSObject::markChildrenDirect): + * runtime/JSPropertyNameIterator.cpp: + (JSC::JSPropertyNameIterator::create): + (JSC::JSPropertyNameIterator::get): + (JSC::JSPropertyNameIterator::markChildren): + * runtime/JSPropertyNameIterator.h: + (JSC::JSPropertyNameIterator::setCachedPrototypeChain): + * runtime/JSZombie.cpp: + (JSC::JSZombie::leakedZombieStructure): + * runtime/JSZombie.h: + * runtime/MarkStack.h: + (JSC::MarkStack::append): + * runtime/MarkedBlock.cpp: + (JSC::MarkedBlock::sweep): + * runtime/Structure.cpp: + (JSC::Structure::addPropertyTransition): + * runtime/Structure.h: + (JSC::Structure::markAggregate): + * runtime/StructureChain.cpp: + (JSC::StructureChain::StructureChain): + (JSC::StructureChain::~StructureChain): + (JSC::StructureChain::markChildren): + * runtime/StructureChain.h: + (JSC::StructureChain::create): + (JSC::StructureChain::createStructure): + * runtime/WriteBarrier.h: + (JSC::WriteBarrierBase::get): + (JSC::WriteBarrierBase::operator*): + (JSC::WriteBarrierBase::operator->): + +2011-04-01 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Oliver Hunt. + + Removed some complexity from HandleHeap + https://bugs.webkit.org/show_bug.cgi?id=57650 + + Eliminated pointer-tagging flags. + + Tied being weak to having a finalizer (or at least a finalizer sentinel). + + * collector/handles/HandleHeap.cpp: + (JSC::HandleHeap::clearWeakPointers): Removed the special self-destroying + flag. It was unused. If we bring it back, we'll probably use a shared + autodeallocating finalizer instead. + + * collector/handles/HandleHeap.h: + (JSC::HandleHeap::makeWeak): makeWeak and adding a finalizer are now + a single, atomic operation -- this makes the relationship between + finalizers and weak pointers clearer, and impossible to get wrong. + + (JSC::HandleHeap::Node::Node): + (JSC::HandleHeap::Node::handleHeap): No more flags. + + (JSC::HandleHeap::Node::makeWeak): + (JSC::HandleHeap::Node::isWeak): Ditto above. We use a special sentienl + value in the finalizer slot to indicate that a handle is weak but doesn't + require an external function call for finalization. + +2011-04-01 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Oliver Hunt. + + Removed WeakGCMap::deprecatedRemove because it was deprecated and unused + https://bugs.webkit.org/show_bug.cgi?id=57648 + + * runtime/WeakGCMap.h: + +2011-04-01 Adam Roben <aroben@apple.com> + + Maintain the invariant that Lexer::m_current is set to -1 when at the end of the code buffer + + Covered by existing tests. + + Fixes <http://webkit.org/b/56699>. + + Reviewed by Oliver Hunt. + + * parser/Lexer.h: + (JSC::Lexer::setOffset): Copied code from Lexer::shift to update m_current, because + supposedly the idiom that function uses is fast. + +2011-03-31 Thouraya ANDOLSI <thouraya.andolsi@st.com> + + Reviewed by Oliver Hunt. + + SH4 JIT SUPPORT. + https://bugs.webkit.org/show_bug.cgi?id=44329 + + Add YARR support for SH4 platforms (disabled by default). + + * GNUmakefile.am: + * assembler/MacroAssembler.h: + * assembler/MacroAssemblerSH4.cpp: Added. + * assembler/MacroAssemblerSH4.h: Added. + * assembler/SH4Assembler.h: Added. + * yarr/YarrJIT.cpp: + +2011-03-30 Adam Roben <aroben@apple.com> + + Clean build fix + + * JavaScriptCore.vcproj/JavaScriptCore.sln: Serialized project dependencies so projects + don't try to build in parallel (which doesn't mesh with our buildfailed mechanism). + +2011-03-30 Oliver Hunt <oliver@apple.com> + + Rollout r82500 + + * bytecode/CodeBlock.cpp: + (JSC::CodeBlock::dump): + (JSC::CodeBlock::derefStructures): + (JSC::CodeBlock::refStructures): + (JSC::CodeBlock::markAggregate): + * bytecode/Instruction.h: + (JSC::PolymorphicAccessStructureList::PolymorphicStubInfo::set): + (JSC::PolymorphicAccessStructureList::PolymorphicAccessStructureList): + (JSC::PolymorphicAccessStructureList::derefStructures): + (JSC::Instruction::Instruction): + * bytecode/StructureStubInfo.cpp: + (JSC::StructureStubInfo::deref): + * bytecode/StructureStubInfo.h: + (JSC::StructureStubInfo::initGetByIdChain): + (JSC::StructureStubInfo::initPutByIdTransition): + * bytecompiler/BytecodeGenerator.cpp: + (JSC::BytecodeGenerator::emitJumpIfNotFunctionCall): + (JSC::BytecodeGenerator::emitJumpIfNotFunctionApply): + * interpreter/Interpreter.cpp: + (JSC::Interpreter::privateExecute): + * jit/JITOpcodes.cpp: + (JSC::JIT::emit_op_jneq_ptr): + * jit/JITOpcodes32_64.cpp: + (JSC::JIT::emit_op_jneq_ptr): + * jit/JITPropertyAccess.cpp: + (JSC::JIT::privateCompileGetByIdChainList): + * jit/JITPropertyAccess32_64.cpp: + (JSC::JIT::privateCompileGetByIdChainList): + * jit/JITStubs.cpp: + (JSC::getPolymorphicAccessStructureListSlot): + (JSC::DEFINE_STUB_FUNCTION): + * runtime/JSCell.h: + * runtime/JSGlobalData.cpp: + (JSC::JSGlobalData::JSGlobalData): + * runtime/JSGlobalData.h: + * runtime/JSGlobalObject.cpp: + (JSC::markIfNeeded): + * runtime/JSGlobalObject.h: + (JSC::Structure::prototypeChain): + * runtime/JSObject.h: + (JSC::JSObject::markChildrenDirect): + * runtime/JSPropertyNameIterator.cpp: + (JSC::JSPropertyNameIterator::create): + (JSC::JSPropertyNameIterator::get): + (JSC::JSPropertyNameIterator::markChildren): + * runtime/JSPropertyNameIterator.h: + (JSC::JSPropertyNameIterator::setCachedPrototypeChain): + * runtime/MarkStack.h: + (JSC::MarkStack::append): + * runtime/Structure.h: + * runtime/StructureChain.cpp: + (JSC::StructureChain::StructureChain): + * runtime/StructureChain.h: + (JSC::StructureChain::create): + +2011-03-29 Matthew Delaney <mdelaney@apple.com> + + Reviewed by Simon Fraser. + + Use the Accelerate vImage vectorized (un)premultiplyImageData functions for ImageBufferCG + + https://bugs.webkit.org/show_bug.cgi?id=53134 + + * wtf/Platform.h: Added in WTF flag for using the Accelerate framework + +2011-03-30 Steve Falkenburg <sfalken@apple.com> + + Reviewed by Adam Roben. + + Share most vsprops between Release and Production builds in releaseproduction.vsprops + https://bugs.webkit.org/show_bug.cgi?id=57508 + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreProduction.vsprops: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreRelease.vsprops: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreReleaseCairoCFLite.vsprops: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreReleasePGO.vsprops: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreReleasePGOOptimize.vsprops: + * JavaScriptCore.vcproj/WTF/WTFProduction.vsprops: + * JavaScriptCore.vcproj/WTF/WTFRelease.vsprops: + * JavaScriptCore.vcproj/WTF/WTFReleaseCairoCFLite.vsprops: + * JavaScriptCore.vcproj/WTF/WTFReleasePGO.vsprops: + * JavaScriptCore.vcproj/jsc/jscProduction.vsprops: + * JavaScriptCore.vcproj/jsc/jscRelease.vsprops: + * JavaScriptCore.vcproj/jsc/jscReleaseCairoCFLite.vsprops: + * JavaScriptCore.vcproj/jsc/jscReleasePGO.vsprops: + * JavaScriptCore.vcproj/testapi/testapiProduction.vsprops: + * JavaScriptCore.vcproj/testapi/testapiRelease.vsprops: + * JavaScriptCore.vcproj/testapi/testapiReleaseCairoCFLite.vsprops: + +2011-03-30 Mark Rowe <mrowe@apple.com> + + Reviewed by Adam Roben. + + Explicitly prevent testapi and minidom from being installed rather than relying + on Xcode's current behavior of not installing if INSTALL_PATH is not explicitly + set at the target level. + + <rdar://problem/9206357> + + * JavaScriptCore.xcodeproj/project.pbxproj: + +2011-03-30 Timur Iskhodzhanov <timurrrr@google.com> + + Reviewed by Alexey Proskuryakov. + + Add some dynamic annotations to JavaScriptCore/wtf + https://bugs.webkit.org/show_bug.cgi?id=53747 + + By using these annotations we can improve the precision of finding + WebKit errors using dynamic analysis tools like ThreadSanitizer and Valgrind. + These annotations don't affect the compiled binaries unless USE(DYNAMIC_ANNOTATIONS) is "1". + + These files don't add new functionality, so don't need extra tests. + + * GNUmakefile.am: + * JavaScriptCore.gypi: + * JavaScriptCore.vcproj/WTF/WTF.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * wtf/CMakeLists.txt: + * wtf/DynamicAnnotations.cpp: Added. + (WTFAnnotateBenignRaceSized): + (WTFAnnotateHappensBefore): + (WTFAnnotateHappensAfter): + * wtf/DynamicAnnotations.h: Added. + * wtf/ThreadSafeRefCounted.h: + (WTF::ThreadSafeRefCountedBase::derefBase): + * wtf/text/StringStatics.cpp: + (WTF::StringImpl::empty): + +2011-03-30 Oliver Hunt <oliver@apple.com> + + Reviewed by Geoffrey Garen. + + Make StructureChain GC allocated + https://bugs.webkit.org/show_bug.cgi?id=56695 + + Make StructureChain GC allocated, and make the various owners + mark it correctly. + + * bytecode/CodeBlock.cpp: + (JSC::CodeBlock::dump): + (JSC::CodeBlock::derefStructures): + (JSC::CodeBlock::refStructures): + (JSC::CodeBlock::markAggregate): + * bytecode/Instruction.h: + (JSC::PolymorphicAccessStructureList::PolymorphicStubInfo::set): + (JSC::PolymorphicAccessStructureList::PolymorphicAccessStructureList): + (JSC::PolymorphicAccessStructureList::derefStructures): + (JSC::PolymorphicAccessStructureList::markAggregate): + (JSC::Instruction::Instruction): + * bytecode/StructureStubInfo.cpp: + (JSC::StructureStubInfo::deref): + (JSC::StructureStubInfo::markAggregate): + * bytecode/StructureStubInfo.h: + (JSC::StructureStubInfo::initGetByIdChain): + (JSC::StructureStubInfo::initPutByIdTransition): + * bytecompiler/BytecodeGenerator.cpp: + (JSC::BytecodeGenerator::emitJumpIfNotFunctionCall): + (JSC::BytecodeGenerator::emitJumpIfNotFunctionApply): + * interpreter/Interpreter.cpp: + (JSC::Interpreter::privateExecute): + * jit/JITOpcodes.cpp: + (JSC::JIT::emit_op_jneq_ptr): + * jit/JITOpcodes32_64.cpp: + (JSC::JIT::emit_op_jneq_ptr): + * jit/JITPropertyAccess.cpp: + (JSC::JIT::privateCompileGetByIdChainList): + * jit/JITPropertyAccess32_64.cpp: + (JSC::JIT::privateCompileGetByIdChainList): + * jit/JITStubs.cpp: + (JSC::getPolymorphicAccessStructureListSlot): + (JSC::DEFINE_STUB_FUNCTION): + * runtime/JSCell.h: + * runtime/JSGlobalData.cpp: + (JSC::JSGlobalData::JSGlobalData): + * runtime/JSGlobalData.h: + * runtime/JSGlobalObject.cpp: + (JSC::markIfNeeded): + * runtime/JSGlobalObject.h: + (JSC::Structure::prototypeChain): + * runtime/JSObject.h: + (JSC::JSObject::markChildrenDirect): + * runtime/JSPropertyNameIterator.cpp: + (JSC::JSPropertyNameIterator::create): + (JSC::JSPropertyNameIterator::get): + (JSC::JSPropertyNameIterator::markChildren): + * runtime/JSPropertyNameIterator.h: + (JSC::JSPropertyNameIterator::setCachedPrototypeChain): + * runtime/MarkStack.h: + (JSC::MarkStack::append): + * runtime/Structure.h: + (JSC::Structure::cachedPrototypeChainSlot): + * runtime/StructureChain.cpp: + (JSC::StructureChain::StructureChain): + * runtime/StructureChain.h: + (JSC::StructureChain::create): + (JSC::StructureChain::createStructure): + +2011-03-30 Steve Falkenburg <sfalken@apple.com> + + Reviewed by Adam Roben. + + Update Windows production build logic for new production configurations + https://bugs.webkit.org/show_bug.cgi?id=57494 + + * JavaScriptCore.vcproj/JavaScriptCore.make: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreProduction.vsprops: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreReleasePGO.vsprops: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreReleasePGOOptimize.vsprops: + * JavaScriptCore.vcproj/WTF/WTFProduction.vsprops: + * JavaScriptCore.vcproj/WTF/WTFReleasePGO.vsprops: + * JavaScriptCore.vcproj/jsc/jscProduction.vsprops: + * JavaScriptCore.vcproj/jsc/jscReleasePGO.vsprops: + * JavaScriptCore.vcproj/testapi/testapiProduction.vsprops: + +2011-03-30 Steve Falkenburg <sfalken@apple.com> + + Reviewed by Adam Roben. + + Rename Windows configuration Release_LTCG to Production for clarity + https://bugs.webkit.org/show_bug.cgi?id=57465 + + * JavaScriptCore.vcproj/JavaScriptCore.sln: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.vcproj: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreProduction.vsprops: Copied from Source/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreReleaseLTCG.vsprops. + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreReleaseLTCG.vsprops: Removed. + * JavaScriptCore.vcproj/JavaScriptCoreSubmit.sln: + * JavaScriptCore.vcproj/WTF/WTF.vcproj: + * JavaScriptCore.vcproj/WTF/WTFProduction.vsprops: Copied from Source/JavaScriptCore/JavaScriptCore.vcproj/WTF/WTFReleaseLTCG.vsprops. + * JavaScriptCore.vcproj/WTF/WTFReleaseLTCG.vsprops: Removed. + * JavaScriptCore.vcproj/jsc/jsc.vcproj: + * JavaScriptCore.vcproj/jsc/jscProduction.vsprops: Copied from Source/JavaScriptCore/JavaScriptCore.vcproj/jsc/jscReleaseLTCG.vsprops. + * JavaScriptCore.vcproj/jsc/jscReleaseLTCG.vsprops: Removed. + * JavaScriptCore.vcproj/testapi/testapi.vcproj: + * JavaScriptCore.vcproj/testapi/testapiProduction.vsprops: Copied from Source/JavaScriptCore/JavaScriptCore.vcproj/testapi/testapiReleaseLTCG.vsprops. + * JavaScriptCore.vcproj/testapi/testapiReleaseLTCG.vsprops: Removed. + +2011-03-30 Zoltan Herczeg <zherczeg@inf.u-szeged.hu> + + Reviewed by Maciej Stachowiak. + + Add the NEXT_OPCODE() macro to the DFG-JIT parser + https://bugs.webkit.org/show_bug.cgi?id=57322 + + In JavaScriptCore we use macros to jump to the next opcode + (both in interpreter and JIT). This macro is added to the + DFG-JIT parser as well. + + * dfg/DFGByteCodeParser.cpp: + (JSC::DFG::ByteCodeParser::parse): + +2011-03-29 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Darin Adler. + + ~25% regression on v8-splay in the SunSpider harness + https://bugs.webkit.org/show_bug.cgi?id=56128 + + I'm not sure if this is the root cause of the regression Stephanie + measured, but it seems to get us back to previous v8-splay times. + + SunSpider reports no change. v8-splay says 41% faster. + + * runtime/Heap.cpp: + (JSC::Heap::reset): Make marking proportional to 1X the size of the heap, + not .5X the size of the heap. When the heap is large, this makes a big + difference. (Our old heap growth policy matched this. You can see by + looking at resizeBlocks in revisions prior to r77699.) + +2011-03-29 Steve Falkenburg <sfalken@apple.com> + + Reviewed by Darin Adler. + + Use per-configuration vsprops in JavaScriptCore to avoid WebKitVSPropsRedirectionDir removal by MSVC IDE + https://bugs.webkit.org/show_bug.cgi?id=57350 + + Visual Studio's IDE was removing instances of $(WebKitVSPropsRedirectionDir) from + InheritedPropertySheet rules in our vcproj files when the vcproj was edited from within + the IDE. To avoid this, add a separate vsprops file for each project configuration that + contains the required inherited property sheets. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreDebug.vsprops: Added. + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreDebugAll.vsprops: Added. + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreDebugCairoCFLite.vsprops: Added. + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreRelease.vsprops: Added. + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreReleaseCairoCFLite.vsprops: Added. + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreReleaseLTCG.vsprops: Added. + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreReleasePGO.vsprops: Added. + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreReleasePGOOptimize.vsprops: Added. + * JavaScriptCore.vcproj/WTF/WTF.vcproj: + * JavaScriptCore.vcproj/WTF/WTFDebug.vsprops: Added. + * JavaScriptCore.vcproj/WTF/WTFDebugAll.vsprops: Added. + * JavaScriptCore.vcproj/WTF/WTFDebugCairoCFLite.vsprops: Added. + * JavaScriptCore.vcproj/WTF/WTFRelease.vsprops: Added. + * JavaScriptCore.vcproj/WTF/WTFReleaseCairoCFLite.vsprops: Added. + * JavaScriptCore.vcproj/WTF/WTFReleaseLTCG.vsprops: Added. + * JavaScriptCore.vcproj/WTF/WTFReleasePGO.vsprops: Added. + * JavaScriptCore.vcproj/jsc/jsc.vcproj: + * JavaScriptCore.vcproj/jsc/jscDebug.vsprops: Added. + * JavaScriptCore.vcproj/jsc/jscDebugAll.vsprops: Added. + * JavaScriptCore.vcproj/jsc/jscDebugCairoCFLite.vsprops: Added. + * JavaScriptCore.vcproj/jsc/jscRelease.vsprops: Added. + * JavaScriptCore.vcproj/jsc/jscReleaseCairoCFLite.vsprops: Added. + * JavaScriptCore.vcproj/jsc/jscReleaseLTCG.vsprops: Added. + * JavaScriptCore.vcproj/jsc/jscReleasePGO.vsprops: Added. + * JavaScriptCore.vcproj/testapi/testapi.vcproj: + * JavaScriptCore.vcproj/testapi/testapiDebug.vsprops: Added. + * JavaScriptCore.vcproj/testapi/testapiDebugAll.vsprops: Added. + * JavaScriptCore.vcproj/testapi/testapiDebugCairoCFLite.vsprops: Added. + * JavaScriptCore.vcproj/testapi/testapiRelease.vsprops: Added. + * JavaScriptCore.vcproj/testapi/testapiReleaseCairoCFLite.vsprops: Added. + * JavaScriptCore.vcproj/testapi/testapiReleaseLTCG.vsprops: Added. + +2011-03-29 Oliver Hunt <oliver@apple.com> + + Reviewed by Eric Seidel. + + REGRESSION(r82173): Causes assertion and test failures in run-javascriptcore-tests on Windows (Requested by aroben on #webkit). + https://bugs.webkit.org/show_bug.cgi?id=57333 + + constructDate now takes the global object explicitly as it may be called + by functions other than the constructor itself. + + * API/JSObjectRef.cpp: + (JSObjectMakeDate): + * runtime/DateConstructor.cpp: + (JSC::constructDate): + (JSC::constructWithDateConstructor): + * runtime/DateConstructor.h: + +2011-03-29 Ben Taylor <bentaylor.solx86@gmail.com> + + Reviewed by Benjamin Poulain. + + https://bugs.webkit.org/show_bug.cgi?id=41953 + + Fix compile error on Solaris 10/Sun Studio 12 CC emanating from MathExtras.h + + * wtf/MathExtras.h: + +2011-03-29 Ben Taylor <bentaylor.solx86@gmail.com> + + Reviewed by Darin Adler. + + https://bugs.webkit.org/show_bug.cgi?id=57231 + Add conditional for SUNCC supporting alignment macros + + Compile fix for Solaris 10/Sun Studio 12 CC + + * wtf/Vector.h: + +2011-03-29 Ben Taylor <bentaylor.solx86@gmail.com> + + Reviewed by Darin Adler. + + https://bugs.webkit.org/show_bug.cgi?id=57256 + + Fix crash on misaligned reads on Solaris 10/Sparc + + * wtf/text/AtomicString.cpp: + (WTF::equal): + +2011-03-28 Oliver Hunt <oliver@apple.com> + + Reviewed by Geoffrey Garen. + + instanceof Array test fails when using iframes + https://bugs.webkit.org/show_bug.cgi?id=17250 + + This is a problem with all built in constructors, the use of + lexicalGlobalObject rather than the constructors own + global object reference means that a builtin will always use + the prototype from the lexical global object rather than that + of the constructors origin. + + * API/JSObjectRef.cpp: + (JSObjectMakeFunction): + (JSObjectMakeRegExp): + * JavaScriptCore.exp: + * runtime/ArrayConstructor.cpp: + (JSC::constructArrayWithSizeQuirk): + * runtime/BooleanConstructor.cpp: + (JSC::constructBoolean): + (JSC::constructBooleanFromImmediateBoolean): + * runtime/BooleanConstructor.h: + * runtime/DateConstructor.cpp: + (JSC::constructDate): + * runtime/DateInstance.cpp: + * runtime/DateInstance.h: + * runtime/ErrorConstructor.cpp: + (JSC::constructWithErrorConstructor): + (JSC::callErrorConstructor): + * runtime/FunctionConstructor.cpp: + (JSC::constructWithFunctionConstructor): + (JSC::callFunctionConstructor): + (JSC::constructFunction): + * runtime/FunctionConstructor.h: + * runtime/JSCell.cpp: + (JSC::JSCell::getOwnPropertySlot): + (JSC::JSCell::put): + (JSC::JSCell::deleteProperty): + (JSC::JSCell::toThisObject): + (JSC::JSCell::toObject): + * runtime/JSCell.h: + (JSC::JSCell::JSValue::toObject): + * runtime/JSNotAnObject.cpp: + (JSC::JSNotAnObject::toObject): + * runtime/JSNotAnObject.h: + * runtime/JSObject.cpp: + (JSC::JSObject::toObject): + * runtime/JSObject.h: + * runtime/JSString.cpp: + (JSC::StringObject::create): + (JSC::JSString::toObject): + (JSC::JSString::toThisObject): + * runtime/JSString.h: + * runtime/JSValue.cpp: + (JSC::JSValue::toObjectSlowCase): + (JSC::JSValue::toThisObjectSlowCase): + (JSC::JSValue::synthesizeObject): + * runtime/JSValue.h: + * runtime/NumberConstructor.cpp: + (JSC::constructWithNumberConstructor): + * runtime/NumberObject.cpp: + (JSC::constructNumber): + * runtime/NumberObject.h: + * runtime/ObjectConstructor.cpp: + (JSC::constructObject): + (JSC::constructWithObjectConstructor): + (JSC::callObjectConstructor): + * runtime/RegExpConstructor.cpp: + (JSC::constructRegExp): + (JSC::constructWithRegExpConstructor): + (JSC::callRegExpConstructor): + * runtime/RegExpConstructor.h: + * runtime/StringConstructor.cpp: + (JSC::constructWithStringConstructor): + * runtime/StringObject.h: + +2011-03-28 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Oliver Hunt. + + REGRESSION [r78794-r79249] Allocation of memory is slow when number of active objects is large + https://bugs.webkit.org/show_bug.cgi?id=56823 + + Partial fix for most of the problem. (TOT still shows a regression, though.) + + * runtime/Heap.cpp: + (JSC::Heap::reportExtraMemoryCostSlowCase): Use highWaterMark(), instead of + capacity(), since capacity() is O(n) relative to the size of the heap. + + In limited circumstances, capacity() is also worse than highWaterMark() + for measuring extra cost relative to heap size, since capacity() only + measures the *current* capacity of the heap, but the heap will grow if + necessary to attain highWaterMark(). + +2011-03-28 Oliver Hunt <oliver@apple.com> + + REGRESSION(r82130): It made all tests crash (Requested by Ossy on #webkit). + https://bugs.webkit.org/show_bug.cgi?id=57251 + + Build fix, had remnant of another patch in r82130 + + * jit/JITPropertyAccess.cpp: + (JSC::JIT::privateCompileGetByIdChainList): + +2011-03-27 Oliver Hunt <oliver@apple.com> + + Reviewed by Maciej Stachowiak. + + Add additional immediate types to allow us to distinguish the source of a JIT immediate + https://bugs.webkit.org/show_bug.cgi?id=57190 + + Allow us to distinguish whether a JIT immediate is a value that we + control (TrustedImm32 and TrustedImmPtr) vs. ones that can be controlled + or influenced by code we are compiling. Currently we do nothing with this + information -- this change is large and mechanical but would obscure any + logic changes that we would have made. + + * assembler/AbstractMacroAssembler.h: + (JSC::AbstractMacroAssembler::TrustedImmPtr::TrustedImmPtr): + (JSC::AbstractMacroAssembler::ImmPtr::ImmPtr): + (JSC::AbstractMacroAssembler::TrustedImm32::TrustedImm32): + (JSC::AbstractMacroAssembler::Imm32::Imm32): + * assembler/MacroAssembler.h: + (JSC::MacroAssembler::pop): + (JSC::MacroAssembler::poke): + (JSC::MacroAssembler::branchPtr): + (JSC::MacroAssembler::branch32): + (JSC::MacroAssembler::addPtr): + (JSC::MacroAssembler::andPtr): + (JSC::MacroAssembler::orPtr): + (JSC::MacroAssembler::subPtr): + (JSC::MacroAssembler::xorPtr): + (JSC::MacroAssembler::setPtr): + (JSC::MacroAssembler::storePtr): + (JSC::MacroAssembler::branchTestPtr): + (JSC::MacroAssembler::branchSubPtr): + (JSC::MacroAssembler::branchTest8): + * assembler/MacroAssemblerARM.h: + (JSC::MacroAssemblerARM::add32): + (JSC::MacroAssemblerARM::and32): + (JSC::MacroAssemblerARM::lshift32): + (JSC::MacroAssemblerARM::mul32): + (JSC::MacroAssemblerARM::or32): + (JSC::MacroAssemblerARM::rshift32): + (JSC::MacroAssemblerARM::urshift32): + (JSC::MacroAssemblerARM::sub32): + (JSC::MacroAssemblerARM::xor32): + (JSC::MacroAssemblerARM::store32): + (JSC::MacroAssemblerARM::push): + (JSC::MacroAssemblerARM::move): + (JSC::MacroAssemblerARM::branch8): + (JSC::MacroAssemblerARM::branch32): + (JSC::MacroAssemblerARM::branch32WithUnalignedHalfWords): + (JSC::MacroAssemblerARM::branch16): + (JSC::MacroAssemblerARM::branchTest8): + (JSC::MacroAssemblerARM::branchTest32): + (JSC::MacroAssemblerARM::branchAdd32): + (JSC::MacroAssemblerARM::branchMul32): + (JSC::MacroAssemblerARM::branchSub32): + (JSC::MacroAssemblerARM::set32Compare32): + (JSC::MacroAssemblerARM::set8Compare32): + (JSC::MacroAssemblerARM::set32Test32): + (JSC::MacroAssemblerARM::set32Test8): + (JSC::MacroAssemblerARM::moveWithPatch): + (JSC::MacroAssemblerARM::branchPtrWithPatch): + (JSC::MacroAssemblerARM::storePtrWithPatch): + * assembler/MacroAssemblerARMv7.h: + (JSC::MacroAssemblerARMv7::add32): + (JSC::MacroAssemblerARMv7::and32): + (JSC::MacroAssemblerARMv7::lshift32): + (JSC::MacroAssemblerARMv7::mul32): + (JSC::MacroAssemblerARMv7::or32): + (JSC::MacroAssemblerARMv7::rshift32): + (JSC::MacroAssemblerARMv7::urshift32): + (JSC::MacroAssemblerARMv7::sub32): + (JSC::MacroAssemblerARMv7::xor32): + (JSC::MacroAssemblerARMv7::load32): + (JSC::MacroAssemblerARMv7::load32WithAddressOffsetPatch): + (JSC::MacroAssemblerARMv7::load16): + (JSC::MacroAssemblerARMv7::store32WithAddressOffsetPatch): + (JSC::MacroAssemblerARMv7::store32): + (JSC::MacroAssemblerARMv7::loadDouble): + (JSC::MacroAssemblerARMv7::storeDouble): + (JSC::MacroAssemblerARMv7::push): + (JSC::MacroAssemblerARMv7::move): + (JSC::MacroAssemblerARMv7::compare32): + (JSC::MacroAssemblerARMv7::test32): + (JSC::MacroAssemblerARMv7::branch32): + (JSC::MacroAssemblerARMv7::branch32WithUnalignedHalfWords): + (JSC::MacroAssemblerARMv7::branch16): + (JSC::MacroAssemblerARMv7::branch8): + (JSC::MacroAssemblerARMv7::branchTest32): + (JSC::MacroAssemblerARMv7::branchTest8): + (JSC::MacroAssemblerARMv7::branchAdd32): + (JSC::MacroAssemblerARMv7::branchMul32): + (JSC::MacroAssemblerARMv7::branchSub32): + (JSC::MacroAssemblerARMv7::nearCall): + (JSC::MacroAssemblerARMv7::call): + (JSC::MacroAssemblerARMv7::set32Compare32): + (JSC::MacroAssemblerARMv7::set8Compare32): + (JSC::MacroAssemblerARMv7::set32Test32): + (JSC::MacroAssemblerARMv7::set32Test8): + (JSC::MacroAssemblerARMv7::moveWithPatch): + (JSC::MacroAssemblerARMv7::branchPtrWithPatch): + (JSC::MacroAssemblerARMv7::storePtrWithPatch): + (JSC::MacroAssemblerARMv7::tailRecursiveCall): + (JSC::MacroAssemblerARMv7::makeJump): + (JSC::MacroAssemblerARMv7::makeBranch): + (JSC::MacroAssemblerARMv7::setupArmAddress): + (JSC::MacroAssemblerARMv7::makeBaseIndexBase): + (JSC::MacroAssemblerARMv7::moveFixedWidthEncoding): + * assembler/MacroAssemblerMIPS.h: + (JSC::MacroAssemblerMIPS::add32): + (JSC::MacroAssemblerMIPS::and32): + (JSC::MacroAssemblerMIPS::lshift32): + (JSC::MacroAssemblerMIPS::mul32): + (JSC::MacroAssemblerMIPS::or32): + (JSC::MacroAssemblerMIPS::rshift32): + (JSC::MacroAssemblerMIPS::urshift32): + (JSC::MacroAssemblerMIPS::sub32): + (JSC::MacroAssemblerMIPS::xor32): + (JSC::MacroAssemblerMIPS::load32): + (JSC::MacroAssemblerMIPS::load32WithAddressOffsetPatch): + (JSC::MacroAssemblerMIPS::store32WithAddressOffsetPatch): + (JSC::MacroAssemblerMIPS::store32): + (JSC::MacroAssemblerMIPS::push): + (JSC::MacroAssemblerMIPS::move): + (JSC::MacroAssemblerMIPS::branch8): + (JSC::MacroAssemblerMIPS::branch32): + (JSC::MacroAssemblerMIPS::branch32WithUnalignedHalfWords): + (JSC::MacroAssemblerMIPS::branch16): + (JSC::MacroAssemblerMIPS::branchTest32): + (JSC::MacroAssemblerMIPS::branchTest8): + (JSC::MacroAssemblerMIPS::branchAdd32): + (JSC::MacroAssemblerMIPS::branchMul32): + (JSC::MacroAssemblerMIPS::branchSub32): + (JSC::MacroAssemblerMIPS::set8Compare32): + (JSC::MacroAssemblerMIPS::set32Compare32): + (JSC::MacroAssemblerMIPS::set32Test8): + (JSC::MacroAssemblerMIPS::set32Test32): + (JSC::MacroAssemblerMIPS::moveWithPatch): + (JSC::MacroAssemblerMIPS::branchPtrWithPatch): + (JSC::MacroAssemblerMIPS::storePtrWithPatch): + (JSC::MacroAssemblerMIPS::tailRecursiveCall): + (JSC::MacroAssemblerMIPS::loadDouble): + (JSC::MacroAssemblerMIPS::storeDouble): + (JSC::MacroAssemblerMIPS::branchTruncateDoubleToInt32): + * assembler/MacroAssemblerX86.h: + (JSC::MacroAssemblerX86::add32): + (JSC::MacroAssemblerX86::addWithCarry32): + (JSC::MacroAssemblerX86::and32): + (JSC::MacroAssemblerX86::or32): + (JSC::MacroAssemblerX86::sub32): + (JSC::MacroAssemblerX86::store32): + (JSC::MacroAssemblerX86::branch32): + (JSC::MacroAssemblerX86::moveWithPatch): + (JSC::MacroAssemblerX86::branchPtrWithPatch): + (JSC::MacroAssemblerX86::storePtrWithPatch): + * assembler/MacroAssemblerX86Common.h: + (JSC::MacroAssemblerX86Common::add32): + (JSC::MacroAssemblerX86Common::and32): + (JSC::MacroAssemblerX86Common::lshift32): + (JSC::MacroAssemblerX86Common::mul32): + (JSC::MacroAssemblerX86Common::or32): + (JSC::MacroAssemblerX86Common::rshift32): + (JSC::MacroAssemblerX86Common::urshift32): + (JSC::MacroAssemblerX86Common::sub32): + (JSC::MacroAssemblerX86Common::xor32): + (JSC::MacroAssemblerX86Common::store32): + (JSC::MacroAssemblerX86Common::branchTruncateDoubleToInt32): + (JSC::MacroAssemblerX86Common::push): + (JSC::MacroAssemblerX86Common::move): + (JSC::MacroAssemblerX86Common::branch8): + (JSC::MacroAssemblerX86Common::branch32): + (JSC::MacroAssemblerX86Common::branch32WithUnalignedHalfWords): + (JSC::MacroAssemblerX86Common::branch16): + (JSC::MacroAssemblerX86Common::branchTest32): + (JSC::MacroAssemblerX86Common::branchTest8): + (JSC::MacroAssemblerX86Common::branchAdd32): + (JSC::MacroAssemblerX86Common::branchMul32): + (JSC::MacroAssemblerX86Common::branchSub32): + (JSC::MacroAssemblerX86Common::set8Compare32): + (JSC::MacroAssemblerX86Common::set32Compare32): + (JSC::MacroAssemblerX86Common::set32Test8): + (JSC::MacroAssemblerX86Common::set32Test32): + * assembler/MacroAssemblerX86_64.h: + (JSC::MacroAssemblerX86_64::add32): + (JSC::MacroAssemblerX86_64::and32): + (JSC::MacroAssemblerX86_64::or32): + (JSC::MacroAssemblerX86_64::sub32): + (JSC::MacroAssemblerX86_64::loadDouble): + (JSC::MacroAssemblerX86_64::addDouble): + (JSC::MacroAssemblerX86_64::convertInt32ToDouble): + (JSC::MacroAssemblerX86_64::store32): + (JSC::MacroAssemblerX86_64::call): + (JSC::MacroAssemblerX86_64::tailRecursiveCall): + (JSC::MacroAssemblerX86_64::makeTailRecursiveCall): + (JSC::MacroAssemblerX86_64::addPtr): + (JSC::MacroAssemblerX86_64::andPtr): + (JSC::MacroAssemblerX86_64::orPtr): + (JSC::MacroAssemblerX86_64::subPtr): + (JSC::MacroAssemblerX86_64::xorPtr): + (JSC::MacroAssemblerX86_64::storePtr): + (JSC::MacroAssemblerX86_64::setPtr): + (JSC::MacroAssemblerX86_64::branchPtr): + (JSC::MacroAssemblerX86_64::branchTestPtr): + (JSC::MacroAssemblerX86_64::branchSubPtr): + (JSC::MacroAssemblerX86_64::moveWithPatch): + (JSC::MacroAssemblerX86_64::branchPtrWithPatch): + (JSC::MacroAssemblerX86_64::storePtrWithPatch): + (JSC::MacroAssemblerX86_64::branchTest8): + * dfg/DFGJITCodeGenerator.h: + (JSC::DFG::JITCodeGenerator::callOperation): + * dfg/DFGJITCompiler.cpp: + (JSC::DFG::JITCompiler::jitAssertIsInt32): + (JSC::DFG::JITCompiler::emitCount): + * dfg/DFGJITCompiler.h: + (JSC::DFG::JITCompiler::emitPutImmediateToCallFrameHeader): + * dfg/DFGNonSpeculativeJIT.cpp: + (JSC::DFG::NonSpeculativeJIT::compile): + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::fillSpeculateCell): + (JSC::DFG::SpeculativeJIT::compile): + * jit/JIT.cpp: + (JSC::JIT::emitTimeoutCheck): + (JSC::JIT::privateCompile): + * jit/JIT.h: + * jit/JITArithmetic.cpp: + (JSC::JIT::emit_op_urshift): + (JSC::JIT::emitSlow_op_urshift): + (JSC::JIT::emit_op_post_inc): + (JSC::JIT::emit_op_post_dec): + (JSC::JIT::emit_op_pre_inc): + (JSC::JIT::emit_op_pre_dec): + (JSC::JIT::emit_op_mod): + * jit/JITArithmetic32_64.cpp: + (JSC::JIT::emit_op_negate): + (JSC::JIT::emit_op_jnless): + (JSC::JIT::emit_op_jless): + (JSC::JIT::emit_op_jlesseq): + (JSC::JIT::emit_op_lshift): + (JSC::JIT::emitRightShift): + (JSC::JIT::emitRightShiftSlowCase): + (JSC::JIT::emit_op_bitand): + (JSC::JIT::emit_op_bitor): + (JSC::JIT::emit_op_bitxor): + (JSC::JIT::emit_op_bitnot): + (JSC::JIT::emit_op_post_inc): + (JSC::JIT::emit_op_post_dec): + (JSC::JIT::emitSlow_op_post_dec): + (JSC::JIT::emit_op_pre_inc): + (JSC::JIT::emit_op_pre_dec): + (JSC::JIT::emit_op_add): + (JSC::JIT::emitAdd32Constant): + (JSC::JIT::emit_op_sub): + (JSC::JIT::emitSub32Constant): + (JSC::JIT::emitBinaryDoubleOp): + (JSC::JIT::emit_op_mul): + (JSC::JIT::emitSlow_op_mul): + (JSC::JIT::emit_op_div): + (JSC::JIT::emit_op_mod): + * jit/JITCall.cpp: + (JSC::JIT::compileOpCallVarargs): + (JSC::JIT::compileOpCall): + (JSC::JIT::compileOpCallSlowCase): + * jit/JITCall32_64.cpp: + (JSC::JIT::compileOpCallVarargs): + (JSC::JIT::emit_op_ret_object_or_this): + (JSC::JIT::compileOpCall): + (JSC::JIT::compileOpCallSlowCase): + * jit/JITInlineMethods.h: + (JSC::JIT::emitPutCellToCallFrameHeader): + (JSC::JIT::emitPutIntToCallFrameHeader): + (JSC::JIT::emitPutImmediateToCallFrameHeader): + (JSC::JIT::emitLoadCharacterString): + (JSC::JIT::restoreArgumentReferenceForTrampoline): + (JSC::JIT::checkStructure): + (JSC::JIT::setSamplingFlag): + (JSC::JIT::clearSamplingFlag): + (JSC::JIT::emitCount): + (JSC::JIT::sampleInstruction): + (JSC::JIT::sampleCodeBlock): + (JSC::JIT::emitStoreInt32): + (JSC::JIT::emitStoreCell): + (JSC::JIT::emitStoreBool): + (JSC::JIT::emitJumpSlowCaseIfNotJSCell): + (JSC::JIT::emitInitRegister): + (JSC::JIT::emitJumpIfJSCell): + (JSC::JIT::emitJumpIfNotJSCell): + (JSC::JIT::emitJumpIfImmediateInteger): + (JSC::JIT::emitJumpIfNotImmediateInteger): + (JSC::JIT::emitFastArithDeTagImmediate): + (JSC::JIT::emitFastArithDeTagImmediateJumpIfZero): + (JSC::JIT::emitFastArithReTagImmediate): + (JSC::JIT::emitTagAsBoolImmediate): + * jit/JITOpcodes.cpp: + (JSC::JIT::privateCompileCTIMachineTrampolines): + (JSC::JIT::privateCompileCTINativeCall): + (JSC::JIT::emit_op_check_has_instance): + (JSC::JIT::emit_op_instanceof): + (JSC::JIT::emit_op_ret_object_or_this): + (JSC::JIT::emit_op_resolve): + (JSC::JIT::emit_op_to_primitive): + (JSC::JIT::emit_op_resolve_base): + (JSC::JIT::emit_op_ensure_property_exists): + (JSC::JIT::emit_op_resolve_skip): + (JSC::JIT::emit_op_resolve_global): + (JSC::JIT::emitSlow_op_resolve_global): + (JSC::JIT::emit_op_not): + (JSC::JIT::emit_op_jfalse): + (JSC::JIT::emit_op_jeq_null): + (JSC::JIT::emit_op_jneq_null): + (JSC::JIT::emit_op_jneq_ptr): + (JSC::JIT::emit_op_jsr): + (JSC::JIT::emit_op_resolve_with_base): + (JSC::JIT::emit_op_new_func_exp): + (JSC::JIT::emit_op_jtrue): + (JSC::JIT::emit_op_get_pnames): + (JSC::JIT::emit_op_next_pname): + (JSC::JIT::emit_op_to_jsnumber): + (JSC::JIT::emit_op_push_new_scope): + (JSC::JIT::emit_op_catch): + (JSC::JIT::emit_op_eq_null): + (JSC::JIT::emit_op_neq_null): + (JSC::JIT::emit_op_init_lazy_reg): + (JSC::JIT::emit_op_convert_this): + (JSC::JIT::emit_op_convert_this_strict): + (JSC::JIT::emitSlow_op_not): + (JSC::JIT::emitSlow_op_neq): + (JSC::JIT::emit_op_get_arguments_length): + (JSC::JIT::emitSlow_op_get_arguments_length): + (JSC::JIT::emit_op_get_argument_by_val): + (JSC::JIT::emitSlow_op_resolve_global_dynamic): + (JSC::JIT::emit_op_new_regexp): + (JSC::JIT::emit_op_load_varargs): + (JSC::JIT::emitSlow_op_load_varargs): + (JSC::JIT::emit_op_new_func): + * jit/JITOpcodes32_64.cpp: + (JSC::JIT::privateCompileCTIMachineTrampolines): + (JSC::JIT::privateCompileCTINativeCall): + (JSC::JIT::emit_op_loop_if_lesseq): + (JSC::JIT::emit_op_check_has_instance): + (JSC::JIT::emit_op_instanceof): + (JSC::JIT::emit_op_get_scoped_var): + (JSC::JIT::emit_op_put_scoped_var): + (JSC::JIT::emit_op_tear_off_activation): + (JSC::JIT::emit_op_tear_off_arguments): + (JSC::JIT::emit_op_resolve): + (JSC::JIT::emit_op_to_primitive): + (JSC::JIT::emit_op_resolve_base): + (JSC::JIT::emit_op_ensure_property_exists): + (JSC::JIT::emit_op_resolve_skip): + (JSC::JIT::emit_op_resolve_global): + (JSC::JIT::emitSlow_op_resolve_global): + (JSC::JIT::emit_op_not): + (JSC::JIT::emit_op_jfalse): + (JSC::JIT::emit_op_jtrue): + (JSC::JIT::emit_op_jeq_null): + (JSC::JIT::emit_op_jneq_null): + (JSC::JIT::emit_op_jneq_ptr): + (JSC::JIT::emit_op_jsr): + (JSC::JIT::emit_op_eq): + (JSC::JIT::emitSlow_op_eq): + (JSC::JIT::emit_op_neq): + (JSC::JIT::emitSlow_op_neq): + (JSC::JIT::compileOpStrictEq): + (JSC::JIT::emit_op_eq_null): + (JSC::JIT::emit_op_neq_null): + (JSC::JIT::emit_op_resolve_with_base): + (JSC::JIT::emit_op_new_func_exp): + (JSC::JIT::emit_op_get_pnames): + (JSC::JIT::emit_op_next_pname): + (JSC::JIT::emit_op_to_jsnumber): + (JSC::JIT::emit_op_push_new_scope): + (JSC::JIT::emit_op_catch): + (JSC::JIT::emit_op_create_activation): + (JSC::JIT::emit_op_create_arguments): + (JSC::JIT::emit_op_convert_this): + (JSC::JIT::emit_op_convert_this_strict): + (JSC::JIT::emit_op_get_arguments_length): + (JSC::JIT::emitSlow_op_get_arguments_length): + (JSC::JIT::emit_op_get_argument_by_val): + (JSC::JIT::softModulo): + * jit/JITPropertyAccess.cpp: + (JSC::JIT::stringGetByValStubGenerator): + (JSC::JIT::emit_op_get_by_val): + (JSC::JIT::emitSlow_op_get_by_val): + (JSC::JIT::emit_op_get_by_pname): + (JSC::JIT::emit_op_put_by_val): + (JSC::JIT::emit_op_put_by_index): + (JSC::JIT::emit_op_put_getter): + (JSC::JIT::emit_op_put_setter): + (JSC::JIT::emit_op_del_by_id): + (JSC::JIT::emit_op_get_by_id): + (JSC::JIT::emit_op_put_by_id): + (JSC::JIT::emit_op_method_check): + (JSC::JIT::compileGetByIdHotPath): + (JSC::JIT::compileGetByIdSlowCase): + (JSC::JIT::emitSlow_op_put_by_id): + (JSC::JIT::testPrototype): + (JSC::JIT::privateCompilePutByIdTransition): + (JSC::JIT::privateCompilePatchGetArrayLength): + (JSC::JIT::privateCompileGetByIdProto): + (JSC::JIT::privateCompileGetByIdSelfList): + (JSC::JIT::privateCompileGetByIdProtoList): + (JSC::JIT::privateCompileGetByIdChainList): + (JSC::JIT::privateCompileGetByIdChain): + * jit/JITPropertyAccess32_64.cpp: + (JSC::JIT::emit_op_put_getter): + (JSC::JIT::emit_op_put_setter): + (JSC::JIT::emit_op_del_by_id): + (JSC::JIT::emit_op_get_by_id): + (JSC::JIT::emit_op_put_by_id): + (JSC::JIT::emit_op_method_check): + (JSC::JIT::stringGetByValStubGenerator): + (JSC::JIT::emit_op_get_by_val): + (JSC::JIT::emitSlow_op_get_by_val): + (JSC::JIT::emit_op_put_by_val): + (JSC::JIT::compileGetByIdHotPath): + (JSC::JIT::compileGetByIdSlowCase): + (JSC::JIT::emitSlow_op_put_by_id): + (JSC::JIT::testPrototype): + (JSC::JIT::privateCompilePutByIdTransition): + (JSC::JIT::privateCompilePatchGetArrayLength): + (JSC::JIT::privateCompileGetByIdProto): + (JSC::JIT::privateCompileGetByIdSelfList): + (JSC::JIT::privateCompileGetByIdProtoList): + (JSC::JIT::privateCompileGetByIdChainList): + (JSC::JIT::privateCompileGetByIdChain): + (JSC::JIT::emit_op_get_by_pname): + * jit/JITStubCall.h: + (JSC::JITStubCall::addArgument): + * jit/JITStubs.cpp: + (JSC::getPolymorphicAccessStructureListSlot): + (JSC::DEFINE_STUB_FUNCTION): + * jit/JSInterfaceJIT.h: + (JSC::JSInterfaceJIT::emitJumpIfNotJSCell): + (JSC::JSInterfaceJIT::emitLoadInt32): + (JSC::JSInterfaceJIT::emitLoadDouble): + * jit/SpecializedThunkJIT.h: + (JSC::SpecializedThunkJIT::SpecializedThunkJIT): + (JSC::SpecializedThunkJIT::loadJSStringArgument): + (JSC::SpecializedThunkJIT::tagReturnAsInt32): + (JSC::SpecializedThunkJIT::tagReturnAsJSCell): + * jit/ThunkGenerators.cpp: + (JSC::charToString): + (JSC::powThunkGenerator): + * yarr/YarrJIT.cpp: + (JSC::Yarr::YarrGenerator::matchCharacterClass): + (JSC::Yarr::YarrGenerator::storeToFrame): + (JSC::Yarr::YarrGenerator::storeToFrameWithPatch): + (JSC::Yarr::YarrGenerator::ParenthesesTail::generateCode): + (JSC::Yarr::YarrGenerator::generatePatternCharacterSingle): + (JSC::Yarr::YarrGenerator::generatePatternCharacterFixed): + (JSC::Yarr::YarrGenerator::generatePatternCharacterGreedy): + (JSC::Yarr::YarrGenerator::generatePatternCharacterNonGreedy): + (JSC::Yarr::YarrGenerator::generateCharacterClassFixed): + (JSC::Yarr::YarrGenerator::generateCharacterClassGreedy): + (JSC::Yarr::YarrGenerator::generateCharacterClassNonGreedy): + (JSC::Yarr::YarrGenerator::generateParenthesesSingle): + (JSC::Yarr::YarrGenerator::generateDisjunction): + +2011-03-28 Andras Becsi <abecsi@webkit.org> + + Reviewed by Csaba Osztrogonác. + + [Qt] Fix the linking of jsc with MinGW after r81963. + + * jsc.pro: add -l and remove the lib suffix. + +2011-03-27 Ben Taylor <bentaylor.solx86@gmail.com> + + Reviewed by Alexey Proskuryakov. + + https://bugs.webkit.org/show_bug.cgi?id=57170 Fix last elements + in an enum to remove a trailing comma. Sun Studio 12 CC errors out. + + Compile fix only, no actual code change. + + * wtf/MessageQueue.h: + +2011-03-25 Oliver Hunt <oliver@apple.com> + + Reviewed by Darin Adler. + + Allow defineOwnProperty to work on DOMObjects + https://bugs.webkit.org/show_bug.cgi?id=57129 + + Fix a couple of places where we uses getter()/setter() rather + than [gs]etterPresent(). + + * runtime/JSObject.cpp: + (JSC::JSObject::defineOwnProperty): + +2011-03-25 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Oliver Hunt. + + Crash when paused at a breakpoint caused by inaccurate Activation records. + https://bugs.webkit.org/show_bug.cgi?id=57120 + + * runtime/JSActivation.cpp: + (JSC::JSActivation::symbolTableGet): + (JSC::JSActivation::symbolTablePut): + (JSC::JSActivation::getOwnPropertyNames): + (JSC::JSActivation::symbolTablePutWithAttributes): + +2011-03-24 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Oliver Hunt. + + Crash in debugger beneath MarkStack::drain @ me.com, ibm.com + https://bugs.webkit.org/show_bug.cgi?id=57080 + <rdar://problem/8525907> + + The crash was caused by changes in the executable after recompilation. + + The fix is for the activation to copy the data it needs instead of + relying on the data in the executable. + + SunSpider and v8 report no change. + + * runtime/Arguments.h: + (JSC::JSActivation::copyRegisters): Use our own data members instead of + reading data out of the executable. + + * runtime/JSActivation.cpp: + (JSC::JSActivation::JSActivation): Initialize our data members. + + (JSC::JSActivation::markChildren): + (JSC::JSActivation::symbolTableGet): + (JSC::JSActivation::symbolTablePut): + (JSC::JSActivation::getOwnPropertyNames): + (JSC::JSActivation::symbolTablePutWithAttributes): + (JSC::JSActivation::isDynamicScope): + (JSC::JSActivation::argumentsGetter): Use our own data members instead of + reading data out of the executable. + + * runtime/JSActivation.h: Added new data members to track data previously + tracked by the executable. Since I've removed the executable pointer, + on a 64bit system, I've only made activations bigger by an int. + +2011-03-25 David Kilzer <ddkilzer@apple.com> + + Remove duplicate entry from JavaScriptCore.exp + + JSC::createStackOverflowError(JSC::ExecState*) was originally + exported in r60057, then duplicated in r60392. + + * JavaScriptCore.exp: Removed duplicate entry. + +2011-03-25 Jarred Nicholls <jarred@sencha.com> + + Reviewed by Ariya Hidayat. + + [Qt] MSVC Build Error - need to link advapi32.lib for jsc.exe + https://bugs.webkit.org/show_bug.cgi?id=56098 + + Need to link advapi32.lib for jsc.exe since wtf/OSRandomSource.cpp uses the Win32 Crypto API + + * jsc.pro: + +2011-03-24 Nikolas Zimmermann <nzimmermann@rim.com> + + Reviewed by Darin Adler. + + Introduce WTF HexNumber.h + https://bugs.webkit.org/show_bug.cgi?id=56099 + + Introduce a set of functions that ease converting from a bye or a number to a hex string, + replacing several of these conversions and String::format("%x") usages all over WebCore. + + * GNUmakefile.am: Add HexNumber.h to build. + * JavaScriptCore.exp: Export StringBuilder::reserveCapacity. + * JavaScriptCore.gypi: Add HexNumber.h to build. + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Export StringBuilder::reserveCapacity. + * JavaScriptCore.vcproj/WTF/WTF.vcproj: Add HexNumber.h to build. + * JavaScriptCore.xcodeproj/project.pbxproj: Ditto. + * wtf/CMakeLists.txt: Ditto. + * wtf/HexNumber.h: Added. + (WTF::Internal::hexDigitsForMode): Internal helper. + (WTF::appendByteAsHex): Free function, that appends a byte as hex string into a destination. + (WTF::placeByteAsHex): Ditto, but places the result using *foo++ = '..' or foo[index++] = '..' + (WTF::appendUnsignedAsHex): Free function, that appends a number as hex string into a destination. + +2011-03-24 Geoffrey Garen <ggaren@apple.com> + + Windows build fix take 2: Add new symobl. + + (I should have used the EWS bots for this!) + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + +2011-03-24 Geoffrey Garen <ggaren@apple.com> + + Windows build fix take 1: Removed old symobl. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + +2011-03-24 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Oliver Hunt. + + Ensure that all compilation takes place within a dynamic global object scope + https://bugs.webkit.org/show_bug.cgi?id=57054 + <rdar://problem/9083011> + + Otherwise, entry to the global object scope might throw away the code + we just compiled, causing a crash. + + * JavaScriptCore.exp: Updated for signature change. + + * debugger/Debugger.cpp: + (JSC::evaluateInGlobalCallFrame): + * debugger/DebuggerCallFrame.cpp: + (JSC::DebuggerCallFrame::evaluate): Removed explicit compilation calls + here because (a) they took place outside a dynamic global object scope + and (b) they were redundant. + + * interpreter/CachedCall.h: + (JSC::CachedCall::CachedCall): Updated for signature change. + + * interpreter/Interpreter.cpp: + (JSC::Interpreter::execute): + (JSC::Interpreter::executeCall): + (JSC::Interpreter::executeConstruct): Declare our dynamic global object + scope earlier, to ensure that compilation takes place within it. + + * runtime/Completion.cpp: + (JSC::evaluate): Removed explicit compilation calls here because (a) + they took place outside a dynamic global object scope and (b) they were + redundant. + + * runtime/Executable.h: + (JSC::EvalExecutable::compile): + (JSC::ProgramExecutable::compile): + (JSC::FunctionExecutable::compileForCall): + (JSC::FunctionExecutable::compileForConstruct): Added an ASSERT to + verify our new invariant that all compilation takes place within a + dynamic global object scope. + + * runtime/JSGlobalObject.cpp: + (JSC::DynamicGlobalObjectScope::DynamicGlobalObjectScope): + * runtime/JSGlobalObject.h: Changed the signature of DynamicGlobalObjectScope + to require a JSGlobalData instead of an ExecState* since it is often + easier to provide the former, and the latter was not necessary. + +2011-03-24 Oliver Hunt <oliver@apple.com> + + Reviewed by Geoffrey Garen. + + REGRESSION (r79987-r80210): Crash in JSWeakObjectMapClear + https://bugs.webkit.org/show_bug.cgi?id=55671 + + This is no longer necessary, and it seems that with the new weakmap + model it's simply unsafe, so this reduces it to a no-op. + + * API/JSWeakObjectMapRefPrivate.cpp: + +2011-03-24 Ben Taylor <bentaylor.solx86@gmail.com> + + Reviewed by Darin Adler. + + https://bugs.webkit.org/show_bug.cgi?id=20302 + Correct implementation of signbit on Solaris + + * wtf/MathExtras.h: + (signbit): + +2011-03-23 Mark Rowe <mrowe@apple.com> + + Reviewed by Darin Adler. + + <rdar://problem/7959320> Threads that use APIs above the BSD layer must be registered with the Obj-C GC. + + * wtf/ThreadingPthreads.cpp: + (WTF::initializeCurrentThreadInternal): + +2011-03-23 Mark Rowe <mrowe@apple.com> + + Stop setting OTHER_OPTIONS in JavaScriptCore's Makefile. + + It's not necessary to pass "-target All" as xcodebuild always builds the + first target in the project unless otherwise specified. The presence of + that option also breaks "make clean" since that results in both the + -target and -alltargets options being passed to xcodebuild. + + * Makefile: + +2011-03-23 Pavel Feldman <pfeldman@chromium.org> + + Not reviewed: bring back Vector::contains that was removed as a part of roll back. + + * wtf/Vector.h: + (WTF::::contains): + +2011-03-23 Sheriff Bot <webkit.review.bot@gmail.com> + + Unreviewed, rolling out r81686. + http://trac.webkit.org/changeset/81686 + https://bugs.webkit.org/show_bug.cgi?id=56914 + + Breaks webkit_tests in Chromium again. (Requested by pfeldman + on #webkit). + + * wtf/Vector.h: + +2011-03-23 Adam Barth <abarth@webkit.org> + + Reviewed by Eric Seidel. + + JavaScriptCore GYP build should work on a case-sensitive file system + https://bugs.webkit.org/show_bug.cgi?id=56911 + + The issue is that there are two UString.h headers, one named UString.h + and one named ustring.h. This patch excludes ustring.h from the header + map to avoid confusion. While I was editing this part of the GYP file, + I cleaned up the exclude rules to be more modern. + + * gyp/JavaScriptCore.gyp: + +2011-03-22 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Maciej Stachowiak. + + REGRESSION (r78382): No scripts appear in the Web Inspector's Scripts + panel on Windows, and many inspector regression tests are failing + https://bugs.webkit.org/show_bug.cgi?id=54490 + + The bug was caused by two different classes using the same name (Recompiler). + + * debugger/Debugger.cpp: + * runtime/JSGlobalData.cpp: + (WTF::Recompiler::operator()): Put Recompiler in an anonymous namespace, + so our two recompilers' inline functions don't stomp each other at + link time. + +2011-03-22 Sam Weinig <sam@webkit.org> + + Reviewed by Mark Rowe. + + Remove USE_WK_SCROLLBAR_PAINTER_AND_CONTROLLER. + <rdar://problem/8944718> + + * DerivedSources.make: + Remove generation of USE_WK_SCROLLBAR_PAINTER_AND_CONTROLLER. + +2011-03-22 Gabor Loki <loki@webkit.org> + + Reviewed by Csaba Osztrogonác. + + [Qt] Add DFG module to build system (disabled by default). + https://bugs.webkit.org/show_bug.cgi?id=56845 + + * JavaScriptCore.pri: + * JavaScriptCore.pro: + +2011-03-22 Eric Seidel <eric@webkit.org> + + Reviewed by Adam Barth. + + Add support to build-webkit for building with gyp-generated project files + https://bugs.webkit.org/show_bug.cgi?id=56877 + + Found a couple missing Private headers while trying to make WebCore build. + + * JavaScriptCore.gypi: + +2011-03-22 Eric Seidel <eric@webkit.org> + + Reviewed by Adam Barth. + + Make it possible to build JavaScriptCore and WebCore gyp builds outside of Source + https://bugs.webkit.org/show_bug.cgi?id=56867 + + This should make it possible to build the gyp-generated JavaScriptCore.xcodeproj + from a JavaScriptCore directory outside of Source. + + * gyp/JavaScriptCore.gyp: + * gyp/run-if-exists.sh: Added. + * gyp/update-info-plist.sh: Added. + +2011-03-22 Eric Seidel <eric@webkit.org> + + Reviewed by Adam Barth. + + Add Profiling Configuration to JavaScriptCore gyp build + https://bugs.webkit.org/show_bug.cgi?id=56862 + + It appears this is identical to Release, but I suspect + there is someone/thing who uses the Profiling target + so we're adding it for completeness. + + * gyp/JavaScriptCore.gyp: + +2011-03-22 Adam Barth <abarth@webkit.org> + + Reviewed by Eric Seidel. + + Remove os_win32_files variable from the GYP build + https://bugs.webkit.org/show_bug.cgi?id=56804 + + Now that our understanding of GYP is sufficiently advanced, we don't + need os_win32_files any more. (Turns out Eric was right, as he always + is.) + + * JavaScriptCore.gypi: + +2011-03-22 Adam Barth <abarth@webkit.org> + + Reviewed by Eric Seidel. + + GYP build of JavaScriptCore should be able to link from an empty WebKitBuild directory + https://bugs.webkit.org/show_bug.cgi?id=56803 + + Previously, we thought we should generate the derived source files in + the shared intermediate build products directory, but there are + assumptions built into other parts of the Mac build system that the + derived source files will be generated in a particular subdirectory of + the build products directory. + + This patch is a partial revert of the change that moved the derived + source files to the shared intermediate directory. After this patch, + the GYP build can build JavaScriptCore without help from the main + normal build system. + + * JavaScriptCore.gypi: + * gyp/JavaScriptCore.gyp: + * gyp/generate-derived-sources.sh: + * gyp/generate-dtrace-header.sh: + +2011-03-22 Jay Civelli <jcivelli@chromium.org> + + Reviewed by David Levin. + + Adding a contains method to Vector. + https://bugs.webkit.org/show_bug.cgi?id=55859 + + * wtf/Vector.h: + (WTF::Vector::contains): + +2011-03-22 Gabor Loki <loki@webkit.org> + + Reviewed by Alexey Proskuryakov. + + Fix a bunch of typos in DFG. + https://bugs.webkit.org/show_bug.cgi?id=56813 + + * dfg/DFGByteCodeParser.cpp: + (JSC::DFG::parse): + * dfg/DFGGenerationInfo.h: + (JSC::DFG::GenerationInfo::setSpilled): + * dfg/DFGGraph.cpp: + (JSC::DFG::Graph::dump): + * dfg/DFGGraph.h: + * dfg/DFGJITCodeGenerator.h: + (JSC::DFG::JITCodeGenerator::setupStubArguments): + * dfg/DFGJITCompiler.cpp: + (JSC::DFG::JITCompiler::compileFunction): + * dfg/DFGJITCompiler.h: + * dfg/DFGNode.h: + * dfg/DFGNonSpeculativeJIT.h: + * dfg/DFGOperations.h: + * dfg/DFGRegisterBank.h: + (JSC::DFG::RegisterBank::allocate): + * dfg/DFGScoreBoard.h: + (JSC::DFG::ScoreBoard::~ScoreBoard): + (JSC::DFG::ScoreBoard::allocate): + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::compile): + * dfg/DFGSpeculativeJIT.h: + +2011-03-22 Adam Barth <abarth@webkit.org> + + Reviewed by Eric Seidel. + + Production configuration in GYP isn't set up correctly + https://bugs.webkit.org/show_bug.cgi?id=56786 + + Update JavaScriptCore.gyp with information mined from + JavaScriptCore.xcodeproj. + + * JavaScriptCore.gypi: + * gyp/JavaScriptCore.gyp: + +2011-03-22 Kent Tamura <tkent@chromium.org> + + Reviewed by Eric Seidel. + + REGRESSION(r80096): Number type input unexpectedly rounds fractional values + https://bugs.webkit.org/show_bug.cgi?id=56367 + + Introduce clampToInteger(unsigned). + + * wtf/MathExtras.h: + (clampToInteger): Added. + +2011-03-21 Adam Barth <abarth@webkit.org> + + Reviewed by Eric Seidel. + + GYP build should not have include paths that point within the source tree + https://bugs.webkit.org/show_bug.cgi?id=56788 + + Turns out we don't need these include paths anymore now that we have + header maps working properly. + + * gyp/JavaScriptCore.gyp: + - Also, remove jsc.cpp from the excluded list because it's not part + of the jsc_files variable instead of the javascriptcore_files + variable. + +2011-03-21 Adam Barth <abarth@webkit.org> + + Reviewed by Eric Seidel. + + Solve the Assertions.cpp / -Wno-missing-format-attribute mystery + https://bugs.webkit.org/show_bug.cgi?id=56780 + + The reason we couldn't resolve this warning in the GYP build was that + the normal build disables this warning specifically for this file. + This patch takes the same approach as the previous patch to + WebCoreObjCExtras.mm in that it uses a pragma to suppress the warning + (rather than a build system configuration). + + * JavaScriptCore.xcodeproj/project.pbxproj: + - Remove the special-case for this file. + * gyp/JavaScriptCore.gyp: + - Remove the work-around for this issue. + * wtf/Assertions.cpp: + - Add a pragma disabling this warning for this file. + +2011-03-21 Adam Barth <abarth@webkit.org> + + Reviewed by Dimitri Glazkov. + + WebCore GYP build shouldn't crash on startup + https://bugs.webkit.org/show_bug.cgi?id=56776 + + Debug builds shouldn't define NDEBUG. This same logic exists in the + project.pbxproj file. + + * gyp/JavaScriptCore.gyp: + +2011-03-21 Robert Kroeger <rjkroege@chromium.org> + + Reviewed by Antonio Gomes. + + Flag to enable/disable a GestureReocognizer framework + + https://bugs.webkit.org/show_bug.cgi?id=49345 + + * wtf/Platform.h: + +2011-03-21 Adam Barth <abarth@webkit.org> + + Reviewed by Dimitri Glazkov. + + Add new files to JavaScriptCore.gypi + https://bugs.webkit.org/show_bug.cgi?id=56766 + + * JavaScriptCore.gypi: + +2011-03-21 Sheriff Bot <webkit.review.bot@gmail.com> + + Unreviewed, rolling out r81377. + http://trac.webkit.org/changeset/81377 + https://bugs.webkit.org/show_bug.cgi?id=56765 + + WebPageSerializerTest.MultipleFrames is broken (Requested by + simonjam on #webkit). + + * wtf/Vector.h: + +2011-03-21 Gabor Loki <loki@webkit.org> + + Reviewed by Csaba Osztrogonác. + + Extend constant pool to be able to store 16 bit instructions with a constant + https://bugs.webkit.org/show_bug.cgi?id=46796 + + The putShortWithConstantInt function inserts a 16 bit instruction which + refers a 32 bits constant or literal. This is a vital function for those + target which loads a PC relative value with a 16 bit instruction (like + Thumb-2 instruction set and SH4 architecture). + + * assembler/AssemblerBuffer.h: + (JSC::AssemblerBuffer::putIntegral): + (JSC::AssemblerBuffer::putIntegralUnchecked): + * assembler/AssemblerBufferWithConstantPool.h: + +2011-03-21 Philippe Normand <pnormand@igalia.com> + + Unreviewed, GTK distcheck build fix. + + * GNUmakefile.am: + +2011-03-20 Bill Budge <bbudge@chromium.org> + + Reviewed by Adam Barth. + + Rename ThreadSafeShared to ThreadSafeRefCounted + https://bugs.webkit.org/show_bug.cgi?id=56714 + + No new tests. Exposes no new functionality. + + * API/JSClassRef.h: + * API/OpaqueJSString.h: + * GNUmakefile.am: + * JavaScriptCore.gypi: + * JavaScriptCore.vcproj/WTF/WTF.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * wtf/Atomics.h: + * wtf/CMakeLists.txt: + * wtf/CrossThreadRefCounted.h: + (WTF::CrossThreadRefCounted::CrossThreadRefCounted): + (WTF::::crossThreadCopy): + * wtf/ThreadSafeRefCounted.h: Copied from wtf/ThreadSafeShared.h. + (WTF::ThreadSafeRefCountedBase::ThreadSafeRefCountedBase): + (WTF::ThreadSafeRefCountedBase::ref): + (WTF::ThreadSafeRefCountedBase::refCount): + (WTF::ThreadSafeRefCountedBase::derefBase): + (WTF::ThreadSafeRefCounted::ThreadSafeRefCounted): + * wtf/ThreadSafeShared.h: Removed. + * wtf/Threading.h: + +2011-03-19 Patrick Gansterer <paroga@webkit.org> + + Reviewed by Darin Adler. + + Remove StringImpl::computeHash() + https://bugs.webkit.org/show_bug.cgi?id=49894 + + Replace remainig StringImpl::computeHash with StringImpl::computeHashStringHasher. + + * wtf/text/AtomicString.cpp: + (WTF::CStringTranslator::hash): + (WTF::UCharBufferTranslator::hash): + (WTF::HashAndCharactersTranslator::hash): + * wtf/text/StringImpl.h: + (WTF::StringImpl::setHash): + (WTF::StringImpl::hash): + +2011-03-19 Patrick Gansterer <paroga@webkit.org> + + Reviewed by Darin Adler. + + Rename WTF::StringHasher methods + https://bugs.webkit.org/show_bug.cgi?id=53532 + + Rename createHash to computeHash and createBlobHash to hashMemory. + Also add a using WTF::StringHasher in the header file. + + * profiler/CallIdentifier.h: + (JSC::CallIdentifier::Hash::hash): + * runtime/Identifier.cpp: + (JSC::IdentifierCStringTranslator::hash): + (JSC::IdentifierUCharBufferTranslator::hash): + * wtf/StringHasher.h: + (WTF::StringHasher::computeHash): + (WTF::StringHasher::hashMemory): + * wtf/text/StringHash.h: + (WTF::CaseFoldingHash::hash): + * wtf/text/StringImpl.h: + (WTF::StringImpl::computeHash): + * wtf/unicode/UTF8.cpp: + (WTF::Unicode::calculateStringHashAndLengthFromUTF8Internal): + +2011-03-18 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Oliver Hunt. + + [GTK] JSC crashes in 32bit Release bots after r80743 + https://bugs.webkit.org/show_bug.cgi?id=56180 + + The crash was caused by referencing GC memory from a GC destructor. This + is not safe because destruction time / order is not guaranteed. + + * profiler/ProfileGenerator.cpp: + (JSC::ProfileGenerator::create): + (JSC::ProfileGenerator::ProfileGenerator): + (JSC::ProfileGenerator::willExecute): + (JSC::ProfileGenerator::didExecute): + * profiler/ProfileGenerator.h: + (JSC::ProfileGenerator::origin): Made ExecState* the first argument, + to match the rest of this class and JSC. + + Use a JSGlobalObject* instead of an ExecState* with an indirect reference + to a JSGlobalObject* to track our origin. This is simpler and more + efficient, and it removes the destruction order dependency that was causing + our crash. + + * profiler/Profiler.cpp: + (JSC::Profiler::startProfiling): Updated for change to JSGlobalObject*. + (JSC::Profiler::stopProfiling): New function for stopping all profiles + for a given global object. This is more straight-forward than multiplexing + through the old function. + + (JSC::dispatchFunctionToProfiles): Updated for change to JSGlobalObject*. + * profiler/Profiler.h: Ditto. + + * runtime/JSGlobalObject.cpp: + (JSC::JSGlobalObject::~JSGlobalObject): Ditto. + +2011-03-17 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Oliver Hunt. + + 1 Structure leaked beneath JSGlobalData::storeVPtrs() + https://bugs.webkit.org/show_bug.cgi?id=56595 + + * runtime/Executable.cpp: + (JSC::EvalExecutable::EvalExecutable): + (JSC::ProgramExecutable::ProgramExecutable): + (JSC::FunctionExecutable::FunctionExecutable): + * runtime/Executable.h: + (JSC::ExecutableBase::ExecutableBase): + (JSC::NativeExecutable::NativeExecutable): + (JSC::VPtrHackExecutable::VPtrHackExecutable): + (JSC::ScriptExecutable::ScriptExecutable): Use a raw pointer instead of + PassRefPtr, like JSString does, since JSGlobalData owns the singleton + exectuable structure. + +2011-03-17 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Mark Rowe. + + Fixed some string leaks seen on the buildbot + https://bugs.webkit.org/show_bug.cgi?id=56619 + + * runtime/PropertyMapHashTable.h: + (JSC::PropertyTable::~PropertyTable): DEref! + +2011-03-17 Oliver Hunt <oliver@apple.com> + + Reviewed by Geoffrey Garen. + + Crash in JSC::MarkStack::drain Under Stress + https://bugs.webkit.org/show_bug.cgi?id=56470 + + We perform a number of gc allocations while when + we are setting up new globals in a piece of global + code. We do this by adding new properties to the + symbol table, and then expanding the storage to fit + at the end. + + If a GC happens during this time we will report an + incorrect size for the global object's symbol table + storage. + + This patch corrects this by growing the storage size + before we starting adding entries to the symbol table. + + * bytecompiler/BytecodeGenerator.cpp: + (JSC::BytecodeGenerator::BytecodeGenerator): + * runtime/JSGlobalObject.cpp: + (JSC::JSGlobalObject::resizeRegisters): + +2011-03-17 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Oliver Hunt. + + 1 Structure leaked beneath JSGlobalData::storeVPtrs() + https://bugs.webkit.org/show_bug.cgi?id=56595 + + * runtime/JSGlobalData.cpp: + (JSC::JSGlobalData::storeVPtrs): Take local ownership of the Structure + we're using, since the Executable is not designed to own the Structure. + +2011-03-17 Gavin Barraclough <barraclough@apple.com> + + Rubber Stamped by Sam Weinig. + + Add missing register-register branchTest8 to MacroAssemblerX86Common/X86Assembler. + + * assembler/MacroAssemblerX86Common.h: + (JSC::MacroAssemblerX86Common::branchTest8): + * assembler/X86Assembler.h: + (JSC::X86Assembler::testb_rr): + +2011-03-17 Gavin Barraclough <barraclough@apple.com> + + Reviewed by Sam Weinig. + + Bug 56603 - DFG JIT related cleanup + Move node generation out to separate function, move binarySearch algorithm out + to StdLibExtras, fix Graph::dump() to print comma between non-node children, + even if there are no node children. + + * bytecode/CodeBlock.h: + (JSC::getCallReturnOffset): + (JSC::CodeBlock::getStubInfo): + (JSC::CodeBlock::getCallLinkInfo): + (JSC::CodeBlock::getMethodCallLinkInfo): + (JSC::CodeBlock::bytecodeOffset): + - Move binaryChop to binarySearch in StdLibExtras + * dfg/DFGByteCodeParser.cpp: + (JSC::DFG::ByteCodeParser::ByteCodeParser): + (JSC::DFG::ByteCodeParser::parse): + (JSC::DFG::parse): + - Make m_noArithmetic a member, initialize m_currentIndex in the constructor. + * dfg/DFGByteCodeParser.h: + - Change parse() to not take a start index (always 0). + * dfg/DFGGraph.cpp: + (JSC::DFG::Graph::dump): + - Fix Graph::dump() to print comma between non-node children, even if there are no node children. + * dfg/DFGJITCodeGenerator.h: + (JSC::DFG::JITCodeGenerator::JITCodeGenerator): + - Initialize m_compileIndex in constructor. + * dfg/DFGNonSpeculativeJIT.cpp: + (JSC::DFG::NonSpeculativeJIT::compile): + * dfg/DFGNonSpeculativeJIT.h: + - Spilt out compilation of individual node. + * dfg/DFGOperations.cpp: + (JSC::DFG::operationConvertThis): + * dfg/DFGOperations.h: + - Cleanup parameter name. + * dfg/DFGSpeculativeJIT.cpp: + (JSC::DFG::SpeculativeJIT::compile): + * dfg/DFGSpeculativeJIT.h: + - Spilt out compilation of individual node. + * runtime/Executable.cpp: + (JSC::tryDFGCompile): + - Change parse() to not take a start index (always 0). + * wtf/StdLibExtras.h: + (WTF::binarySearch): + - Move binaryChop to binarySearch in StdLibExtras + +2011-03-17 Anders Carlsson <andersca@apple.com> + + Reviewed by Geoffrey Garen. + + Fix clang build. + + * runtime/JSGlobalData.cpp: + (JSC::JSGlobalData::storeVPtrs): + +2011-03-17 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Darin Adler. + + 1 Structure leaked beneath JSGlobalData::storeVPtrs() + https://bugs.webkit.org/show_bug.cgi?id=56595 + + * JavaScriptCore.xcodeproj/project.pbxproj: + * runtime/JSGlobalData.cpp: + (JSC::JSGlobalData::storeVPtrs): Now that we have an executable, we need + to explicitly run its destructor. + +2011-03-17 Jeff Miller <jeffm@apple.com> + + Use a consistent set of file patterns in the svn:ignore property for all .xcodeproj directories, specifically: + + *.mode* + *.pbxuser + *.perspective* + project.xcworkspace + xcuserdata + + * JavaScriptCore.xcodeproj: Modified property svn:ignore. + +2011-03-17 Gavin Barraclough <barraclough@apple.com> + + Reverting r81197, breaks JIT + INTERPRETER build. + + * bytecode/CodeBlock.cpp: + (JSC::CodeBlock::hasGlobalResolveInstructionAtBytecodeOffset): + (JSC::CodeBlock::hasGlobalResolveInfoAtBytecodeOffset): + * bytecode/CodeBlock.h: + (JSC::CodeBlock::addPropertyAccessInstruction): + (JSC::CodeBlock::addGlobalResolveInstruction): + (JSC::CodeBlock::addStructureStubInfo): + * bytecode/Opcode.h: + * bytecode/StructureStubInfo.h: + * bytecompiler/BytecodeGenerator.cpp: + (JSC::BytecodeGenerator::emitResolve): + (JSC::BytecodeGenerator::emitResolveWithBase): + (JSC::BytecodeGenerator::emitGetById): + (JSC::BytecodeGenerator::emitPutById): + (JSC::BytecodeGenerator::emitDirectPutById): + (JSC::BytecodeGenerator::emitCall): + (JSC::BytecodeGenerator::emitConstruct): + (JSC::BytecodeGenerator::emitCatch): + +2011-03-17 Ben Taylor <bentaylor.solx86@gmail.com> + + Reviewed by Alexey Proskuryakov. + + Add a COMPILER(SUNCC) define for Sun Studio 12. + https://bugs.webkit.org/show_bug.cgi?56444 + derived from patch 1 of 16 originally from https://bugs.webkit.org/show_bug.cgi?id=24932 + + * wtf/Platform.h: + +2011-03-17 Jay Civelli <jcivelli@chromium.org> + + Reviewed by David Levin. + + Adding a contains method to Vector. + https://bugs.webkit.org/show_bug.cgi?id=55859 + + * wtf/Vector.h: + (WTF::::operator): + (WTF::::contains): + +2011-03-17 Patrick Gansterer <paroga@webkit.org> + + Fix the interpreter build. + + * interpreter/Interpreter.cpp: + (JSC::Interpreter::privateExecute): Added globalData to inheritorID(). + +2011-03-16 Sam Weinig <sam@webkit.org> + + Fix the interpreter build. + + * interpreter/Interpreter.cpp: + (JSC::Interpreter::resolve): + (JSC::Interpreter::resolveSkip): + (JSC::Interpreter::resolveGlobal): + (JSC::Interpreter::resolveGlobalDynamic): + (JSC::Interpreter::resolveBaseAndProperty): + (JSC::Interpreter::privateExecute): + Remove .get()s. + +2011-03-16 Adam Barth <abarth@webkit.org> + + Reviewed by James Robinson. + + Remove USE(BUILTIN_UTF8_CODEC) + https://bugs.webkit.org/show_bug.cgi?id=56508 + + We added this recently when we were unsure about the stability of the + built-in UTF-8 codec. However, the codec seems to be stable, so we + don't need the macro. + + * wtf/Platform.h: + +2011-03-16 Daniel Bates <dbates@rim.com> + + Reviewed by Darin Adler. + + Make JIT build for ARM Thumb-2 with RVCT + https://bugs.webkit.org/show_bug.cgi?id=56440 + + Derived from a patch by Dave Tapuska. + + Also, modify the RVCT stub template to indicate that it preserves 8 byte stack alignment. + + * jit/JITStubs.cpp: + +2011-03-16 Chao-ying Fu <fu@mips.com> + + Reviewed by Darin Adler. + + Fix MIPS build with const *void + https://bugs.webkit.org/show_bug.cgi?id=56513 + + * assembler/MacroAssemblerMIPS.h: + (JSC::MacroAssemblerMIPS::load32): + (JSC::MacroAssemblerMIPS::store32): + +2011-03-16 Oliver Hunt <oliver@apple.com> + + Reviewed by Darin Adler. + + Remove unnecessary caller tracking shenanigans from CodeBlock + https://bugs.webkit.org/show_bug.cgi?id=56483 + + This removes some leftover cruft from when we made CodeBlock + mark its callees. Removing it gives us a 0.7% progression, + reducing the overall regression to ~1.3%. + + * bytecode/CodeBlock.cpp: + (JSC::CodeBlock::shrinkToFit): + * bytecode/CodeBlock.h: + (JSC::CallLinkInfo::CallLinkInfo): + * jit/JIT.cpp: + (JSC::JIT::linkCall): + (JSC::JIT::linkConstruct): + +2011-03-15 Oliver Hunt <oliver@apple.com> + + Reviewed by Geoffrey Garen. + + Make Structure creation require a JSGlobalData + https://bugs.webkit.org/show_bug.cgi?id=56438 + + Mechanical change to make Structure::create require JSGlobalData&, and + require all users to provide the globalData. + + * API/JSCallbackConstructor.h: + (JSC::JSCallbackConstructor::createStructure): + * API/JSCallbackFunction.h: + (JSC::JSCallbackFunction::createStructure): + * API/JSCallbackObject.h: + (JSC::JSCallbackObject::createStructure): + * API/JSContextRef.cpp: + * JavaScriptCore.exp: + * debugger/DebuggerActivation.cpp: + (JSC::DebuggerActivation::DebuggerActivation): + * debugger/DebuggerActivation.h: + (JSC::DebuggerActivation::createStructure): + * jit/JITStubs.cpp: + (JSC::DEFINE_STUB_FUNCTION): + * jsc.cpp: + (GlobalObject::GlobalObject): + (functionRun): + (jscmain): + * runtime/Arguments.h: + (JSC::Arguments::createStructure): + * runtime/ArrayPrototype.h: + (JSC::ArrayPrototype::createStructure): + * runtime/BooleanObject.h: + (JSC::BooleanObject::createStructure): + * runtime/DateInstance.h: + (JSC::DateInstance::createStructure): + * runtime/DatePrototype.h: + (JSC::DatePrototype::createStructure): + * runtime/ErrorInstance.h: + (JSC::ErrorInstance::createStructure): + * runtime/Executable.h: + (JSC::ExecutableBase::createStructure): + (JSC::EvalExecutable::createStructure): + (JSC::ProgramExecutable::createStructure): + (JSC::FunctionExecutable::createStructure): + * runtime/FunctionPrototype.h: + (JSC::FunctionPrototype::createStructure): + * runtime/GetterSetter.h: + (JSC::GetterSetter::createStructure): + * runtime/InternalFunction.h: + (JSC::InternalFunction::createStructure): + * runtime/JSAPIValueWrapper.h: + (JSC::JSAPIValueWrapper::createStructure): + * runtime/JSActivation.h: + (JSC::JSActivation::createStructure): + * runtime/JSArray.cpp: + (JSC::JSArray::JSArray): + * runtime/JSArray.h: + (JSC::JSArray::createStructure): + * runtime/JSByteArray.cpp: + (JSC::JSByteArray::createStructure): + * runtime/JSByteArray.h: + (JSC::JSByteArray::JSByteArray): + * runtime/JSCell.h: + (JSC::JSCell::JSCell::createDummyStructure): + * runtime/JSFunction.h: + (JSC::JSFunction::createStructure): + * runtime/JSGlobalData.cpp: + (JSC::JSGlobalData::storeVPtrs): + (JSC::JSGlobalData::JSGlobalData): + * runtime/JSGlobalObject.cpp: + (JSC::JSGlobalObject::reset): + * runtime/JSGlobalObject.h: + (JSC::JSGlobalObject::JSGlobalObject): + (JSC::JSGlobalObject::createStructure): + * runtime/JSNotAnObject.h: + (JSC::JSNotAnObject::createStructure): + * runtime/JSONObject.h: + (JSC::JSONObject::createStructure): + * runtime/JSObject.cpp: + (JSC::JSObject::createInheritorID): + * runtime/JSObject.h: + (JSC::JSObject::createStructure): + (JSC::JSNonFinalObject::createStructure): + (JSC::JSFinalObject::createStructure): + (JSC::createEmptyObjectStructure): + (JSC::JSObject::inheritorID): + * runtime/JSObjectWithGlobalObject.h: + (JSC::JSObjectWithGlobalObject::createStructure): + * runtime/JSPropertyNameIterator.h: + (JSC::JSPropertyNameIterator::createStructure): + * runtime/JSStaticScopeObject.h: + (JSC::JSStaticScopeObject::createStructure): + * runtime/JSString.h: + (JSC::RopeBuilder::createStructure): + * runtime/JSVariableObject.h: + (JSC::JSVariableObject::createStructure): + * runtime/JSWrapperObject.h: + (JSC::JSWrapperObject::createStructure): + * runtime/JSZombie.h: + (JSC::JSZombie::createStructure): + * runtime/MathObject.h: + (JSC::MathObject::createStructure): + * runtime/NativeErrorConstructor.cpp: + (JSC::NativeErrorConstructor::NativeErrorConstructor): + * runtime/NativeErrorConstructor.h: + (JSC::NativeErrorConstructor::createStructure): + * runtime/NumberConstructor.h: + (JSC::NumberConstructor::createStructure): + * runtime/NumberObject.h: + (JSC::NumberObject::createStructure): + * runtime/ObjectConstructor.h: + (JSC::ObjectConstructor::createStructure): + * runtime/RegExpConstructor.h: + (JSC::RegExpConstructor::createStructure): + * runtime/RegExpObject.h: + (JSC::RegExpObject::createStructure): + * runtime/ScopeChain.h: + (JSC::ScopeChainNode::createStructure): + * runtime/StringObject.h: + (JSC::StringObject::createStructure): + * runtime/StringObjectThatMasqueradesAsUndefined.h: + (JSC::StringObjectThatMasqueradesAsUndefined::createStructure): + * runtime/StringPrototype.h: + (JSC::StringPrototype::createStructure): + * runtime/Structure.h: + (JSC::Structure::create): + +2011-03-16 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Oliver Hunt. + + Some conservative root gathering cleanup + https://bugs.webkit.org/show_bug.cgi?id=56447 + + SunSpider says 0.5% - 1.8% faster. + + * interpreter/RegisterFile.cpp: + (JSC::RegisterFile::gatherConservativeRoots): + * interpreter/RegisterFile.h: New helper function for doing the + conservative gathering of the register file. It's still conservative, + since the register file may contain uninitialized values, but it's + moving-safe, because it only visits values tagged as pointers, so there's + no risk of mistaking an integer for a pointer and accidentally changing it. + + * runtime/ConservativeSet.cpp: + (JSC::ConservativeRoots::add): + * runtime/ConservativeSet.h: Added a single-value add function, used above. + + * runtime/Heap.cpp: + (JSC::Heap::markRoots): Separated machine stack conservative roots from + register file conservative roots because machine stack roots must be + pinned, but register file roots need not be pinned. + + Adopted new interface for passing the current stack extent to the machine + stack root gathering routine. This allows us to exclude marking-related + data structures on the stack, and thus avoid double-marking the set of + machine roots. + + * runtime/MachineStackMarker.cpp: + (JSC::MachineThreads::gatherFromCurrentThread): + (JSC::MachineThreads::gatherConservativeRoots): + * runtime/MachineStackMarker.h: Added new interface, described above. + + * runtime/MarkedBlock.h: + (JSC::MarkedBlock::firstAtom): + * wtf/StdLibExtras.h: + (WTF::roundUpToMultipleOf): Moved roundUpToMultipleOf so it could be used + by MachineStacks. + +2011-03-16 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Oliver Hunt. + + A little bit of MarkStack cleanup + https://bugs.webkit.org/show_bug.cgi?id=56443 + + Moved MarkStack functions into MarkStack.h/.cpp. + + SunSpider reports no change. + + * runtime/JSArray.h: + * runtime/JSCell.h: Moved from here... + * runtime/MarkStack.cpp: + (JSC::MarkStack::markChildren): + (JSC::MarkStack::drain): ...to here. Also, no need to inline drain. It's + a huge function, and not called many times. + + * runtime/MarkStack.h: + (JSC::MarkStack::~MarkStack): Moved near constructor, per style guide. + (JSC::MarkStack::append): + (JSC::MarkStack::deprecatedAppend): + (JSC::MarkStack::internalAppend): Moved to here. + +2011-03-15 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Oliver Hunt. + + Removed another deprecatedAppend + https://bugs.webkit.org/show_bug.cgi?id=56429 + + * collector/handles/HandleHeap.cpp: + (JSC::HandleHeap::markStrongHandles): + * collector/handles/HandleHeap.h: Use HeapRootMarker, since handles are + marked directly by the Heap. + + * runtime/Heap.cpp: + (JSC::Heap::markRoots): Ditto. + +2011-03-15 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Oliver Hunt. + + Removed some more deprecated / unsafe append + https://bugs.webkit.org/show_bug.cgi?id=56428 + + * collector/handles/HandleStack.cpp: + (JSC::HandleStack::mark): + * collector/handles/HandleStack.h: Mark the handle stack using a HeapRoot + marker, since it's a heap root. + + * runtime/ArgList.cpp: + (JSC::MarkedArgumentBuffer::markLists): + (JSC::MarkedArgumentBuffer::slowAppend): + * runtime/ArgList.h: Ditto. + + * runtime/Heap.cpp: + (JSC::Heap::markRoots): Added a mark call for marking the handle stack. + It seems like Oliver forgot this in his last patch. (!) + + * runtime/MarkStack.h: Removed appendSlots, since it would allow an + object to embed JSValues directly instead of using WriteBarrier. + + (JSC::MarkStack::append): Added a private append for a list of values. + + (JSC::HeapRootMarker::mark): Access to the above. + +2011-03-15 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Oliver Hunt. + + Removed a few more deprecatedAppends, and removed HeapRoot<T> + https://bugs.webkit.org/show_bug.cgi?id=56422 + + Added HeapRootMarker, a privileged class for marking direct heap roots + that are iterated during each garbage collection. This is easier to use + and more reliable than HeapRoot<T>, so I've removed HeapRoot<T>. + + * debugger/Debugger.cpp: + (JSC::evaluateInGlobalCallFrame): + * debugger/DebuggerCallFrame.cpp: + (JSC::DebuggerCallFrame::evaluate): + * interpreter/CallFrame.h: + (JSC::ExecState::exception): + * jit/JITStubs.cpp: + (JSC::DEFINE_STUB_FUNCTION): + * runtime/Completion.cpp: + (JSC::evaluate): exception is no longer a HeapRoot<T>, so no need to + call .get() on it. + + * runtime/Heap.cpp: + (JSC::Heap::markProtectedObjects): + (JSC::Heap::markTempSortVectors): + (JSC::Heap::markRoots): + * runtime/Heap.h: Updated to use HeapRootMarker. + + * runtime/JSCell.h: + (JSC::JSCell::MarkStack::append): Added private functions for + HeapRootMarker to use. + + * runtime/JSGlobalData.h: exception is no longer a HeapRoot<T>. + + * runtime/MarkStack.h: + (JSC::HeapRootMarker::HeapRootMarker): + (JSC::HeapRootMarker::mark): Added private functions for + HeapRootMarker to use. + + * runtime/SmallStrings.cpp: + (JSC::SmallStrings::markChildren): Updated to use HeapRootMarker. + + * runtime/SmallStrings.h: + (JSC::SmallStrings::emptyString): + (JSC::SmallStrings::singleCharacterString): + (JSC::SmallStrings::singleCharacterStrings): Updated to use HeapRootMarker. + + * runtime/WriteBarrier.h: Removed HeapRoot<T>. + +2011-03-14 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Oliver Hunt. + + Made the global object moving-GC-safe + https://bugs.webkit.org/show_bug.cgi?id=56348 + + SunSpider reports no change. + + * runtime/JSGlobalObject.cpp: + (JSC::JSGlobalObject::markChildren): Removed a dubious comment that + suggested we do not need to visit all our references during GC, since + that is not true in a moving GC. + + Re-sorted data members by type, removed one duplicate, and added back + the one missing mark I found. + + * runtime/JSGlobalObject.h: Re-sorted data members by type. + +2011-03-15 Oliver Hunt <oliver@apple.com> + + Reviewed by Geoffrey Garen. + + Introduce Local<T> to allow us to start moving to precise marking of locals + https://bugs.webkit.org/show_bug.cgi?id=56394 + + Introduce a new handle type, Local<T> and a scoping mechanism + LocalScope to allow us to start moving towards precise marking + of temporaries and local variables. + + We also start to use the new Local<> type in the JSON stringifier + so that we can have some coverage of their behaviour in the initial + checkin. + + * GNUmakefile.am: + * JavaScriptCore.gypi: + * JavaScriptCore.pro: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * collector/handles/Handle.h: + (JSC::::asObject): + * collector/handles/HandleStack.cpp: Added. + (JSC::HandleStack::HandleStack): + (JSC::HandleStack::mark): + (JSC::HandleStack::grow): + * collector/handles/HandleStack.h: Added. + (JSC::HandleStack::enterScope): + (JSC::HandleStack::zapTo): + (JSC::HandleStack::leaveScope): + (JSC::HandleStack::push): + * collector/handles/Local.h: Added. + (JSC::Local::internalSet): + (JSC::::Local): + (JSC::::operator): + (JSC::LocalStack::LocalStack): + (JSC::LocalStack::peek): + (JSC::LocalStack::pop): + (JSC::LocalStack::push): + (JSC::LocalStack::isEmpty): + (JSC::LocalStack::size): + * collector/handles/LocalScope.h: Added. + (JSC::LocalScope::LocalScope): + (JSC::LocalScope::~LocalScope): + (JSC::LocalScope::release): + * runtime/Heap.cpp: + (JSC::Heap::markRoots): + * runtime/Heap.h: + (JSC::Heap::allocateLocalHandle): + (JSC::Heap::handleStack): + * runtime/JSCell.h: + (JSC::JSCell::::getString): + * runtime/JSGlobalData.cpp: + (JSC::JSGlobalData::JSGlobalData): + * runtime/JSGlobalData.h: + (JSC::JSGlobalData::allocateLocalHandle): + * runtime/JSONObject.cpp: + (JSC::Stringifier::Stringifier): + (JSC::Stringifier::stringify): + (JSC::Stringifier::appendStringifiedValue): + (JSC::Stringifier::Holder::Holder): + (JSC::Walker::Walker): + (JSC::Walker::walk): + (JSC::JSONProtoFuncParse): + (JSC::JSONProtoFuncStringify): + (JSC::JSONStringify): + * runtime/JSONObject.h: + * runtime/MarkStack.h: + (JSC::MarkStack::appendValues): + (JSC::MarkStack::appendSlots): + +2011-03-15 Gavin Barraclough <barraclough@apple.com> + + Rubber Stamped by Sam Weinig. + + Bug 56420 - Remove ENABLE(JIT) code from ByteCompiler + Some methods have unnecessary differences in name/arguments for interpreter/JIT. + + * bytecode/CodeBlock.cpp: + * bytecode/CodeBlock.h: + (JSC::HandlerInfo::HandlerInfo): + (JSC::CodeBlock::addPropertyAccessInfo): + (JSC::CodeBlock::addGlobalResolveInfo): + (JSC::CodeBlock::addCallLinkInfo): + (JSC::CodeBlock::globalResolveInfo): + * bytecode/Opcode.h: + * bytecode/StructureStubInfo.h: + * bytecompiler/BytecodeGenerator.cpp: + (JSC::BytecodeGenerator::emitResolve): + (JSC::BytecodeGenerator::emitResolveWithBase): + (JSC::BytecodeGenerator::emitGetById): + (JSC::BytecodeGenerator::emitPutById): + (JSC::BytecodeGenerator::emitDirectPutById): + (JSC::BytecodeGenerator::emitCall): + (JSC::BytecodeGenerator::emitConstruct): + (JSC::BytecodeGenerator::emitCatch): + +2011-03-15 Gavin Barraclough <barraclough@apple.com> + + Reviewed by Sam Weinig. + + Fix broken assert in new code. + + * dfg/DFGAliasTracker.h: + (JSC::DFG::AliasTracker::recordPutByVal): + - recordPutByVal is called for both PutByVal & PutByValAlias. + +2011-03-15 Gavin Barraclough <barraclough@apple.com> + + Rubber stamped by Sam Weinig. + + Removed redundant code from BytecodeGenerator. + + * bytecompiler/BytecodeGenerator.cpp: + * bytecompiler/BytecodeGenerator.h: + - delete uncalled code missed when reparsing was removed. + +2011-03-15 Kevin Ollivier <kevino@theolliviers.com> + + Reviewed by Darin Adler. + + Introduce WTF_USE_EXPORT_MACROS, which will allow us to put shared library import/export + info into the headers rather than in export symbol definition files, but disable it on + all platforms initially so we can deal with port build issues one port at a time. + + https://bugs.webkit.org/show_bug.cgi?id=27551 + + * API/JSBase.h: + * config.h: + * wtf/Assertions.h: + * wtf/ExportMacros.h: Added. + * wtf/Platform.h: + +2011-03-14 Laszlo Gombos <laszlo.1.gombos@nokia.com> + + Unreviewed build fix. + + Buildfix when JIT is not enabled after r81079 + https://bugs.webkit.org/show_bug.cgi?id=56361 + + * runtime/Executable.cpp: + +2011-03-14 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Oliver Hunt. + + Made the global object moving-GC-safe + https://bugs.webkit.org/show_bug.cgi?id=56348 + + SunSpider reports no change. + + * runtime/JSGlobalObject.cpp: + (JSC::JSGlobalObject::markChildren): Removed a dubious comment that + suggested we do not need to visit all our references during GC, since + that is not true in a moving GC. + + Re-sorted data members by type, removed one duplicate, and added back + the one missing mark I found. + + * runtime/JSGlobalObject.h: Re-sorted data members by type. + +2011-03-14 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Oliver Hunt. + + Made JSWrapperObject and subclasses moving-GC-safe + https://bugs.webkit.org/show_bug.cgi?id=56346 + + SunSpider reports no change. + + * runtime/BooleanObject.cpp: + (JSC::BooleanObject::BooleanObject): + * runtime/DateInstance.cpp: + (JSC::DateInstance::DateInstance): No more need for JSGlobalData, since + we don't initialize the wrapped value in our constructor. + + * runtime/DateInstance.h: Don't set the OverridesMarkChildren flag because + we do not in fact override markChildren. + + * runtime/DatePrototype.h: Declare an anonymous slot, since wrapper object + no longer does so for us. Also added an ASSERT to catch a latent bug, + where DatePrototype stomped on its base class's anonymous slot. Hard-coded + anonymous slots are a plague on our code. This doesn't cause any problems + in our existing code since the base class never reads the anonymous slot + it declares, but it caused crashes when I tried to start using the slot + in an initial version of this patch. + + * runtime/JSWrapperObject.h: + (JSC::JSWrapperObject::JSWrapperObject): + (JSC::JSWrapperObject::internalValue): + (JSC::JSWrapperObject::setInternalValue): Resolved a problem where + our internal value was stored in two places: an anonymous slot, and a + data member which was not always visited during GC. Now, we only use the + data member, and we always visit it. (Instead of relying on certain + subclasses to set the OverridesMarkChildren bit, we set it ourselves.) + + * runtime/NumberObject.cpp: + (JSC::NumberObject::NumberObject): No more need for JSGlobalData, since + we don't initialize the wrapped value in our constructor. + + * runtime/NumberObject.h: Removed meaningless declaration. + + * runtime/StringObject.cpp: + (JSC::StringObject::StringObject): No more need for JSGlobalData, since + we don't initialize the wrapped value in our constructor. + + * runtime/StringObject.h: Don't set the OverridesMarkChildren flag because + we do not in fact override markChildren. + + * runtime/StringPrototype.h: Declare an anonymous slot, since wrapper object + no longer does so for us. Also added an ASSERT to catch a latent bug, + where DatePrototype stomped on its base class's anonymous slot. Hard-coded + anonymous slots are a plague on our code. + +2011-03-14 Michael Saboff <msaboff@apple.com> + + Reviewed by Gavin Barraclough. + + Look-ahead assertions with back references don’t work as expected + https://bugs.webkit.org/show_bug.cgi?id=56082 + + Changed parentheses assertion processing to temporarily back out the + number of known characters after the assertion while processing the + assertion. This was done so that assertions don't fail due to + checking the number of required characters as additional to the + rest of the express since assertions don't "consume" input. + Added a byte code to uncheck characters to support the change. + + * yarr/YarrInterpreter.cpp: + (JSC::Yarr::Interpreter::matchDisjunction): + (JSC::Yarr::ByteCompiler::uncheckInput): + (JSC::Yarr::ByteCompiler::emitDisjunction): + * yarr/YarrInterpreter.h: + (JSC::Yarr::ByteTerm::UncheckInput): + +2011-03-14 Viatcheslav Ostapenko <ostapenko.viatcheslav@nokia.com> + + Reviewed by Laszlo Gombos. + + [Qt] Warning that round/roundf functions are already defined when compiled with RVCT 4 on symbian. + https://bugs.webkit.org/show_bug.cgi?id=56133 + + Add condition to not compile webkit internal math round functions on RVCT compiler versions + from 3.0.0 because they are already defined in compiler math library. + + * wtf/MathExtras.h: + +2011-03-14 Gavin Barraclough <barraclough@apple.com> + + Reviewed by Geoffrey Garen & Oliver Hunt. + + Bug 56284 - Add a dataflow intermediate representation for use in JIT generation. + + The JSC JIT presently generates code directly from the bytecode used by the interpreter. + This is not an optimal intermediate representation for JIT code generation, since it does + not capture liveness information of values, and provides little opportunity to perform + any static analysis for even primitive types. The JIT currently generates two code paths, + a fast path handling common cases, and a slower path handling less common operand types. + However the slow path jumps back into the fast path, meaning that information arising + from the earlier type checks cannot be propagated to later operations. + + This patch adds: + * a dataflow intermediate representation capable of describing a single basic block + of operations, + * a mechanism to convert a simple, single-block bytecode functions to the new IR, + * and a JIT code generator capable of generating code from this representation. + + The JIT generates two code paths, with the slower path not reentering the fast path + mid-block, allowing speculative optimizations to be made on the hot path, with type + information arising from these speculative decisions able to be propagated through the + dataflow. Code generation of both speculative and non-speculative paths exploits the type + and liveness information represented in the dataflow graph to attempt to avoid redundant + boxing and type-checking of values, and to remove unnecessary spills of temporary values + to the RegisterFile. + + The dataflow JIT currently can only support a subset of bytecode operations, limited to + arithmetic, bit-ops, and basic property access. Functions that cannot be compiled by the + dataflow JIT will be run using the existing JIT. The coverage of the dataflow JIT will be + expanded to include, control-flow, function calls, and then the long-tail of remaining + bytecode instructions. The JIT presently only support JSVALUE64, and as a consequence of + this only supports x86-64. + + The status of the dataflow JIT is currently work-in-progress. Limitations of the present + JIT code generation may cause performance regressions, particularly: + * the policy to only generate arithmetic code on the speculative path using integer + instructions, never using floating point. + * the policy to only generate arithmetic code on the non-speculative path using + floating point instructions, never using integer. + * always generating JSValue adds on the non-speculative path as a call out to a + C-function, never handling this in JIT code. + * always assuming by-Value property accesses on the speculative path to be array + accesses. + * generating all by-Value property accesses from the non-speculative path as a call + out to a C-function. + * generating all by-Indentifer property accesses as a call out to a C-function. + Due to these regressions, the code is landed in a state where it is disabled in most + cases by the ENABLE_DFG_JIT_RESTRICTIONS guard in Platform.h. As these regressions are + addressed, the JIT will be allowed to trigger in more cases. + + * JavaScriptCore.xcodeproj/project.pbxproj: + - Added new files to Xcode project. + * dfg: Added. + - Added directory for new code. + * dfg/DFGByteCodeParser.cpp: Added. + * dfg/DFGByteCodeParser.h: Added. + - Contruct a DFG::Graph representation from a bytecode CodeBlock. + * dfg/DFGGenerationInfo.h: Added. + - Track type & register information for VirtualRegisters during JIT code generation. + * dfg/DFGGraph.cpp: Added. + * dfg/DFGGraph.h: Added. + - Dataflow graph intermediate representation for code generation. + * dfg/DFGJITCodeGenerator.cpp: Added. + * dfg/DFGJITCodeGenerator.h: Added. + - Base class for SpeculativeJIT & NonSpeculativeJIT to share common functionality. + * dfg/DFGJITCompiler.cpp: Added. + * dfg/DFGJITCompiler.h: Added. + - Class responsible for driving code generation of speculativeJIT & non-speculative + code paths from the dataflow graph. + * dfg/DFGNonSpeculativeJIT.cpp: Added. + * dfg/DFGNonSpeculativeJIT.h: Added. + - Used to generate the non-speculative code path, this make no assumptions + about operand types. + * dfg/DFGOperations.cpp: Added. + * dfg/DFGOperations.h: Added. + - Helper functions called from the JIT generated code. + * dfg/DFGRegisterBank.h: Added. + - Used to track contents of physical registers during JIT code generation. + * dfg/DFGSpeculativeJIT.cpp: Added. + * dfg/DFGSpeculativeJIT.h: Added. + - Used to generate the speculative code path, this make assumptions about + operand types to enable optimization. + * runtime/Executable.cpp: + - Add code to attempt to use the DFG JIT to compile a function, with fallback + to the existing JIT. + * wtf/Platform.h: + - Added compile guards to enable the DFG JIT. + +2011-03-14 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Oliver Hunt. + + Removed more cases of DeprecatedPtr (exception, SmallStrings) + https://bugs.webkit.org/show_bug.cgi?id=56332 + + * runtime/Identifier.cpp: + (JSC::Identifier::add): + (JSC::Identifier::addSlowCase): Use a variable instead of a hard-coded + constant, to make this code less brittle. + + * runtime/JSGlobalData.h: Use HeapRoot instead of DeprecatedPtr because + this reference is owned and managed directly by the heap. + + * runtime/JSString.cpp: + (JSC::JSString::substringFromRope): + * runtime/JSString.h: + (JSC::jsSingleCharacterString): + (JSC::jsSingleCharacterSubstring): + (JSC::jsString): + (JSC::jsStringWithFinalizer): + (JSC::jsSubstring): + (JSC::jsOwnedString): Use a variable instead of a hard-coded + constant, to make this code less brittle. + + * runtime/SmallStrings.cpp: + (JSC::SmallStringsStorage::rep): + (JSC::SmallStringsStorage::SmallStringsStorage): + (JSC::SmallStrings::SmallStrings): + (JSC::SmallStrings::markChildren): + (JSC::SmallStrings::clear): + (JSC::SmallStrings::count): Use a variable instead of a hard-coded + constant, to make this code less brittle. + + * runtime/SmallStrings.h: + (JSC::SmallStrings::singleCharacterString): Use HeapRoot instead of + DeprecatedPtr because these references are owned and managed directly by + the heap. + + Stop using FixedArray because we only want a very limited set + of classes to be able to use HeapRoot. (Replaced with manual ASSERTs.) + + * runtime/WriteBarrier.h: + (JSC::operator==): + (JSC::WriteBarrier::WriteBarrier): + (JSC::HeapRoot::HeapRoot): + (JSC::HeapRoot::operator=): Added HeapRoot, which is allowed to set + without write barrier because we assume all HeapRoots are scanned during + all GC passes. + +2011-03-14 Brian Weinstein <bweinstein@apple.com> + + Reviewed by Adam Roben and Gavin Barraclough. + + FileSystemWin.cpp needs listDirectory() implementation + https://bugs.webkit.org/show_bug.cgi?id=56331 + <rdar://problem/9126635> + + Give StringConcatenate the ability to deal with const UChar*'s as a String type to append. + + * wtf/text/StringConcatenate.h: + +2011-03-14 Mark Rowe <mrowe@apple.com> + + Reviewed by Oliver Hunt. + + <http://webkit.org/b/56304> REGRESSION(r80892): 100,000+ leaks seen on the build bot + + * API/JSClassRef.cpp: + (OpaqueJSClass::OpaqueJSClass): Don't leak any existing entry for the given name if + the class definition contains duplicates. This also removes what look to be leaks + of the StringImpl instances that are used as keys: the HashMap key type is a RefPtr + which retains / releases the instances at the appropriate time, so explicitly calling + ref is not necessary. + +2011-03-14 Oliver Hunt <oliver@apple.com> + + Fix windows build + + * jit/JSInterfaceJIT.h: + (JSC::JSInterfaceJIT::emitLoadInt32): + (JSC::JSInterfaceJIT::tagFor): + (JSC::JSInterfaceJIT::payloadFor): + (JSC::JSInterfaceJIT::intPayloadFor): + (JSC::JSInterfaceJIT::intTagFor): + (JSC::JSInterfaceJIT::addressFor): + +2011-03-11 Oliver Hunt <oliver@apple.com> + + Reviewed by Gavin Barraclough. + + Ensure all values are correctly tagged in the registerfile + https://bugs.webkit.org/show_bug.cgi?id=56214 + + This patch makes sure that all JSCell pointers written to + the registerfile are correctly tagged as JSCells, and replaces + raw int usage with the immediate representation. + + For performance, register pressure, and general saneness reasons + I've added abstractions for reading and writing the tag + and payload of integer registers directly for the JSVALUE64 + encoding. + + * interpreter/Register.h: + (JSC::Register::withInt): + (JSC::Register::withCallee): + (JSC::Register::operator=): + (JSC::Register::i): + (JSC::Register::activation): + (JSC::Register::function): + (JSC::Register::propertyNameIterator): + (JSC::Register::scopeChain): + * jit/JIT.h: + * jit/JITCall.cpp: + (JSC::JIT::compileOpCallInitializeCallFrame): + (JSC::JIT::compileOpCallVarargs): + (JSC::JIT::compileOpCall): + * jit/JITCall32_64.cpp: + (JSC::JIT::compileOpCallInitializeCallFrame): + (JSC::JIT::compileOpCallVarargs): + (JSC::JIT::compileOpCall): + (JSC::JIT::compileOpCallSlowCase): + * jit/JITInlineMethods.h: + (JSC::JIT::emitPutToCallFrameHeader): + (JSC::JIT::emitPutCellToCallFrameHeader): + (JSC::JIT::emitPutIntToCallFrameHeader): + * jit/JITOpcodes.cpp: + (JSC::JIT::privateCompileCTINativeCall): + (JSC::JIT::emit_op_get_pnames): + (JSC::JIT::emit_op_next_pname): + (JSC::JIT::emit_op_load_varargs): + (JSC::JIT::emitSlow_op_load_varargs): + * jit/JITOpcodes32_64.cpp: + (JSC::JIT::privateCompileCTINativeCall): + (JSC::JIT::emit_op_get_pnames): + (JSC::JIT::emit_op_next_pname): + * jit/JSInterfaceJIT.h: + (JSC::JSInterfaceJIT::intPayloadFor): + (JSC::JSInterfaceJIT::intTagFor): + * jit/SpecializedThunkJIT.h: + (JSC::SpecializedThunkJIT::returnJSValue): + (JSC::SpecializedThunkJIT::returnDouble): + (JSC::SpecializedThunkJIT::returnInt32): + (JSC::SpecializedThunkJIT::returnJSCell): + +2011-03-13 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Sam Weinig. + + A few Heap-related renames (sans file moves, which should come next) + https://bugs.webkit.org/show_bug.cgi?id=56283 + + ConservativeSet => ConservativeRoots. "Set" was misleading, since items + are not uniqued. Also, "Roots" is more specific about what's in the set. + + MachineStackMarker => MachineThreads. "Threads" is more descriptive of + the fact that this class maintains a set of all threads using JSC. + "Stack" was misleading, since this class traverses stacks and registers. + "Mark" was misleading, since this class doesn't mark anything anymore. + + registerThread => addCurrentThread. "Current" is more specific. + unregisterThread => removeCurrentThread. "Current" is more specific. + + "currentThreadRegistrar" => threadSpecific. The only point of this data + structure is to register a thread-specific destructor with a pointer to + this. + + "mark...Conservatively" => "gather". "Mark" is not true, since these + functions don't mark anything. "Conservatively" is redundant, since they + take "ConservativeRoots" as an argument. + + * API/APIShims.h: + (JSC::APIEntryShimWithoutLock::APIEntryShimWithoutLock): + * JavaScriptCore.exp: + * runtime/ConservativeSet.cpp: + (JSC::ConservativeRoots::grow): + (JSC::ConservativeRoots::add): + * runtime/ConservativeSet.h: + (JSC::ConservativeRoots::ConservativeRoots): + (JSC::ConservativeRoots::~ConservativeRoots): + (JSC::ConservativeRoots::size): + (JSC::ConservativeRoots::roots): + * runtime/Heap.cpp: + (JSC::Heap::Heap): + (JSC::Heap::markRoots): + * runtime/Heap.h: + (JSC::Heap::machineThreads): + * runtime/JSGlobalData.h: + (JSC::JSGlobalData::makeUsableFromMultipleThreads): + * runtime/MachineStackMarker.cpp: + (JSC::MachineThreads::MachineThreads): + (JSC::MachineThreads::~MachineThreads): + (JSC::MachineThreads::makeUsableFromMultipleThreads): + (JSC::MachineThreads::addCurrentThread): + (JSC::MachineThreads::removeThread): + (JSC::MachineThreads::removeCurrentThread): + (JSC::MachineThreads::gatherFromCurrentThreadInternal): + (JSC::MachineThreads::gatherFromCurrentThread): + (JSC::MachineThreads::gatherFromOtherThread): + (JSC::MachineThreads::gatherConservativeRoots): + * runtime/MachineStackMarker.h: + * runtime/MarkStack.h: + (JSC::MarkStack::append): + +2011-03-13 David Kilzer <ddkilzer@apple.com> + + BUILD FIX for armv7 after r80969 + + Bug 56270 - The JIT 'friend's many classes in JSC; start unwinding this. + <https://bugs.webkit.org/show_bug.cgi?id=56270> + + * assembler/MacroAssemblerARMv7.h: + (JSC::MacroAssemblerARMv7::load32): Made void* address argument + const. + (JSC::MacroAssemblerARMv7::store32): Ditto. + +2011-03-13 Geoffrey Garen <ggaren@apple.com> + + Not reviewed. + + Try to fix the Mac build. + + * JavaScriptCore.xcodeproj/project.pbxproj: Make sure to forward + ConervativeSet.h, since it's now visible when compiling other projects. + +2011-03-13 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Oliver Hunt. + + Removed another case of DeprecatedPtr (ConservativeSet) + https://bugs.webkit.org/show_bug.cgi?id=56281 + + The ConservativeSet is an internal data structure used during marking, + so direct pointers are fine. + + * runtime/ConservativeSet.cpp: + (JSC::ConservativeSet::grow): + * runtime/ConservativeSet.h: Added some accessors, for use by MarkStack::append. + (JSC::ConservativeSet::~ConservativeSet): Fixed a typo where we calculated + the size of the set based on sizeof(DeprecatedPtr<T>*) instead of + sizeof(DeprecatedPtr<T>). I'm not sure if this had real-world implications or not. + (JSC::ConservativeSet::size): + (JSC::ConservativeSet::set): Use direct pointers, as stated above. + + * runtime/Heap.cpp: + (JSC::Heap::markRoots): + * runtime/MarkStack.h: + (JSC::MarkStack::append): Created a special case of append for + ConservativeSet. I didn't want to add back a generic "append JSCell*" + function, since other class might start using that wrong. (In the end, + this function might go away, since the Heap will want to do something + slightly more interesting with the conservative set, but this is OK for + now.) + +2011-03-13 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Oliver Hunt. + + Removed another case of DeprecatedPtr (PutPropertySlot) + https://bugs.webkit.org/show_bug.cgi?id=56278 + + * runtime/PutPropertySlot.h: + (JSC::PutPropertySlot::setExistingProperty): + (JSC::PutPropertySlot::setNewProperty): + (JSC::PutPropertySlot::base): Direct pointer is fine for PutPropertySlot, + since it's a stack-allocated temporary. + +2011-03-13 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Oliver Hunt. + + Removed one case of DeprecatedPtr (ScopeChainIterator) + https://bugs.webkit.org/show_bug.cgi?id=56277 + + * runtime/ScopeChain.h: Direct pointer is fine for ScopeChainIterator, + since it's a stack-allocated temporary. + +2011-03-13 Gavin Barraclough <barraclough@apple.com> + + Reviewed by Sam Weinig. + + Bug 56273 - Add three operand forms to MacroAssember operations. + + Adding for X86(_64) for now, should be rolled out to other backends as necessary. + These may allow more efficient code generation in some cases, avoiding the need + for unnecessary register-register move instructions. + + * assembler/AbstractMacroAssembler.h: + (JSC::AbstractMacroAssembler::Jump::link): + (JSC::AbstractMacroAssembler::Jump::linkTo): + - marked these methods const. + (JSC::AbstractMacroAssembler::Jump::isSet): + - add a method to check whether a Jump object has been set to + reference an instruction, or is in a null, unset state. + * assembler/MacroAssemblerCodeRef.h: + (JSC::FunctionPtr::FunctionPtr): + - add non-explicit constructor, for FunctionPtr's to C/C++ functions. + * assembler/MacroAssemblerX86Common.h: + (JSC::MacroAssemblerX86Common::and32): + (JSC::MacroAssemblerX86Common::lshift32): + (JSC::MacroAssemblerX86Common::or32): + (JSC::MacroAssemblerX86Common::rshift32): + (JSC::MacroAssemblerX86Common::urshift32): + (JSC::MacroAssemblerX86Common::xor32): + (JSC::MacroAssemblerX86Common::moveDouble): + (JSC::MacroAssemblerX86Common::addDouble): + (JSC::MacroAssemblerX86Common::divDouble): + (JSC::MacroAssemblerX86Common::subDouble): + (JSC::MacroAssemblerX86Common::mulDouble): + (JSC::MacroAssemblerX86Common::branchTruncateDoubleToInt32): + (JSC::MacroAssemblerX86Common::branchTest32): + (JSC::MacroAssemblerX86Common::branchTest8): + (JSC::MacroAssemblerX86Common::branchAdd32): + (JSC::MacroAssemblerX86Common::branchMul32): + (JSC::MacroAssemblerX86Common::branchSub32): + - add three operand forms of these instructions. + * assembler/MacroAssemblerX86_64.h: + (JSC::MacroAssemblerX86_64::addDouble): + (JSC::MacroAssemblerX86_64::convertInt32ToDouble): + (JSC::MacroAssemblerX86_64::loadPtr): + (JSC::MacroAssemblerX86_64::branchTestPtr): + * assembler/X86Assembler.h: + (JSC::X86Assembler::JmpSrc::isSet): + - add a method to check whether a JmpSrc object has been set to + reference an instruction, or is in a null, unset state. + (JSC::X86Assembler::movsd_rr): + - added FP register-register move. + (JSC::X86Assembler::linkJump): + - Add an assert to check jumps aren't linked more than once. + * jit/JITInlineMethods.h: + (JSC::JIT::emitLoadInt32ToDouble): + - load integers to the FPU via regsiters on x86-64. + +2011-03-13 Gavin Barraclough <barraclough@apple.com> + + ARM build fix. + + * assembler/MacroAssemblerARM.h: + (JSC::MacroAssemblerARM::load32): + +2011-03-13 Gavin Barraclough <barraclough@apple.com> + + Reviewed by Sam Weinig. + + Bug 56270 - The JIT 'friend's many classes in JSC; start unwinding this. + + The JIT need to 'friend' other classes in order to be able to calculate offsets + of various properties, or the absolute addresses of members within specific objects, + in order to JIT generate code that will access members within the class when run. + + Instead of using friends in these cases, switch to providing specific accessor + methods to provide this information. In the case of offsets, these can be static + functions, and in the case of pointers to members within a specific object these can + be const methods returning pointers to const values, to prevent clients from + modifying values otherwise encapsulated within classes. + + * bytecode/SamplingTool.h: + * interpreter/Register.h: + * interpreter/RegisterFile.h: + * runtime/JSArray.h: + * runtime/JSCell.h: + * runtime/JSTypeInfo.h: + * runtime/JSVariableObject.h: + * runtime/Structure.h: + * wtf/RefCounted.h: + - Change these classes to no longer friend the JIT, add accessors for member offsets. + * jit/JIT.cpp: + * jit/JITCall32_64.cpp: + * jit/JITInlineMethods.h: + * jit/JITOpcodes.cpp: + * jit/JITOpcodes32_64.cpp: + * jit/JITPropertyAccess.cpp: + * jit/JITPropertyAccess32_64.cpp: + - Change the JIT to use class accessors, rather than taking object ofsets directly. + * assembler/AbstractMacroAssembler.h: + * assembler/MacroAssemblerX86_64.h: + * assembler/X86Assembler.h: + - Since the accessors for objects members return const pointers to retain encapsulation, + methods generating code with absolute addresses must be able to handle const pointers + (the JIT doesn't write to these values, do dies treat the pointer to value as const + from within the C++ code of the JIT, if not at runtime!). + +2011-03-12 Sheriff Bot <webkit.review.bot@gmail.com> + + Unreviewed, rolling out r80919. + http://trac.webkit.org/changeset/80919 + https://bugs.webkit.org/show_bug.cgi?id=56251 + + all windows bots failed to compile this change (Requested by + loislo on #webkit). + + * JavaScriptCore.xcodeproj/project.pbxproj: + * bytecode/StructureStubInfo.cpp: + * interpreter/Register.h: + (JSC::Register::withInt): + (JSC::Register::withCallee): + (JSC::Register::operator=): + (JSC::Register::i): + (JSC::Register::activation): + (JSC::Register::function): + (JSC::Register::propertyNameIterator): + (JSC::Register::scopeChain): + * jit/JIT.h: + * jit/JITCall.cpp: + (JSC::JIT::compileOpCallInitializeCallFrame): + (JSC::JIT::compileOpCallVarargs): + (JSC::JIT::compileOpCall): + * jit/JITCall32_64.cpp: + (JSC::JIT::compileOpCallInitializeCallFrame): + (JSC::JIT::compileOpCallVarargs): + (JSC::JIT::compileOpCall): + (JSC::JIT::compileOpCallSlowCase): + * jit/JITInlineMethods.h: + (JSC::JIT::emitPutToCallFrameHeader): + * jit/JITOpcodes.cpp: + (JSC::JIT::privateCompileCTINativeCall): + (JSC::JIT::emit_op_get_pnames): + (JSC::JIT::emit_op_next_pname): + (JSC::JIT::emit_op_load_varargs): + (JSC::JIT::emitSlow_op_load_varargs): + * jit/JITOpcodes32_64.cpp: + (JSC::JIT::privateCompileCTINativeCall): + (JSC::JIT::emit_op_get_pnames): + (JSC::JIT::emit_op_next_pname): + * jit/JSInterfaceJIT.h: + (JSC::JSInterfaceJIT::payloadFor): + * jit/SpecializedThunkJIT.h: + (JSC::SpecializedThunkJIT::returnJSValue): + (JSC::SpecializedThunkJIT::returnDouble): + (JSC::SpecializedThunkJIT::returnInt32): + (JSC::SpecializedThunkJIT::returnJSCell): + * runtime/ArgList.cpp: + * runtime/DateConversion.cpp: + * runtime/GCActivityCallbackCF.cpp: + * runtime/Identifier.cpp: + * runtime/JSActivation.h: + (JSC::asActivation): + * runtime/JSLock.cpp: + * runtime/JSNumberCell.cpp: + * runtime/JSObject.h: + * runtime/JSPropertyNameIterator.h: + * runtime/JSValue.h: + * runtime/JSZombie.cpp: + * runtime/MarkedBlock.cpp: + * runtime/MarkedSpace.cpp: + * runtime/PropertyNameArray.cpp: + * runtime/ScopeChain.h: + (JSC::ExecState::globalThisValue): + * wtf/DateMath.cpp: + +2011-03-11 Oliver Hunt <oliver@apple.com> + + Reviewed by Gavin Barraclough. + + Ensure all values are correctly tagged in the registerfile + https://bugs.webkit.org/show_bug.cgi?id=56214 + + This patch makes sure that all JSCell pointers written to + the registerfile are correctly tagged as JSCells, and replaces + raw int usage with the immediate representation. + + For performance, register pressure, and general saneness reasons + I've added abstractions for reading and writing the tag + and payload of integer registers directly for the JSVALUE64 + encoding. + + * interpreter/Register.h: + (JSC::Register::withInt): + (JSC::Register::withCallee): + (JSC::Register::operator=): + (JSC::Register::i): + (JSC::Register::activation): + (JSC::Register::function): + (JSC::Register::propertyNameIterator): + (JSC::Register::scopeChain): + * jit/JIT.h: + * jit/JITCall.cpp: + (JSC::JIT::compileOpCallInitializeCallFrame): + (JSC::JIT::compileOpCallVarargs): + (JSC::JIT::compileOpCall): + * jit/JITCall32_64.cpp: + (JSC::JIT::compileOpCallInitializeCallFrame): + (JSC::JIT::compileOpCallVarargs): + (JSC::JIT::compileOpCall): + (JSC::JIT::compileOpCallSlowCase): + * jit/JITInlineMethods.h: + (JSC::JIT::emitPutToCallFrameHeader): + (JSC::JIT::emitPutCellToCallFrameHeader): + (JSC::JIT::emitPutIntToCallFrameHeader): + * jit/JITOpcodes.cpp: + (JSC::JIT::privateCompileCTINativeCall): + (JSC::JIT::emit_op_get_pnames): + (JSC::JIT::emit_op_next_pname): + (JSC::JIT::emit_op_load_varargs): + (JSC::JIT::emitSlow_op_load_varargs): + * jit/JITOpcodes32_64.cpp: + (JSC::JIT::privateCompileCTINativeCall): + (JSC::JIT::emit_op_get_pnames): + (JSC::JIT::emit_op_next_pname): + * jit/JSInterfaceJIT.h: + (JSC::JSInterfaceJIT::intPayloadFor): + (JSC::JSInterfaceJIT::intTagFor): + * jit/SpecializedThunkJIT.h: + (JSC::SpecializedThunkJIT::returnJSValue): + (JSC::SpecializedThunkJIT::returnDouble): + (JSC::SpecializedThunkJIT::returnInt32): + (JSC::SpecializedThunkJIT::returnJSCell): + +2011-03-11 Dimitri Glazkov <dglazkov@chromium.org> + + Reviewed by Eric Seidel. + + Introduce project_dir variable and make paths a whole lot saner. Ok, a little bit saner. + https://bugs.webkit.org/show_bug.cgi?id=56231 + + * JavaScriptCore.gypi: Added project_dir variable. + * gyp/JavaScriptCore.gyp: Changed to use project_dir, rather than DEPTH/JavaScriptCore. + * gyp/generate-dtrace-header.sh: Changed to use project_dir. + +2011-03-11 Dimitri Glazkov <dglazkov@chromium.org> + + Reviewed by Adam Barth. + + Start using derived sources correctly and link minidom with JavaScriptCore gyp project. + https://bugs.webkit.org/show_bug.cgi?id=56217 + + * gyp/JavaScriptCore.gyp: Added derived source files and passing of shared directory + to the scripts. + * gyp/generate-derived-sources.sh: Changed to use passed directory. + * gyp/generate-dtrace-header.sh: Ditto. + +2011-03-11 Eric Carlson <eric.carlson@apple.com> + + Reviewed by Sam Weinig. + + <rdar://problem/8955589> Adopt AVFoundation media back end on Lion. + + No new tests, existing media tests cover this. + + * JavaScriptCore.exp: Export cancelCallOnMainThread + * wtf/Platform.h: Define WTF_USE_AVFOUNDATION. + +2011-03-11 Dimitri Glazkov <dglazkov@chromium.org> + + Reviewed by Adam Barth. + + Tweak dylib paths and add dtrace header generation action to JavaScriptCore gyp project. + https://bugs.webkit.org/show_bug.cgi?id=56207 + + * JavaScriptCore.gypi: Added Tracing.d to the sources. + * gyp/generate-dtrace-header.sh: Added. + * gyp/JavaScriptCore.gyp: Updated dylib paths (now the project can see them), + and added DTrace header generating step. + +2011-03-10 Oliver Hunt <oliver@apple.com> + + Reviewed by Gavin Barraclough. + + Fix allocation of native function with a cached thunk + https://bugs.webkit.org/show_bug.cgi?id=56127 + + Fix this race condition found while fixing zombies. + + * collector/handles/HandleHeap.cpp: + (JSC::HandleHeap::clearWeakPointers): + * runtime/Heap.cpp: + (JSC::Heap::reset): + * runtime/JSFunction.cpp: + (JSC::JSFunction::JSFunction): + (JSC::JSFunction::markChildren): + * runtime/JSValue.h: + (JSC::JSValue::decode): + * runtime/JSZombie.cpp: + (JSC::JSZombie::leakedZombieStructure): + * runtime/JSZombie.h: + (JSC::JSZombie::createStructure): + * runtime/MarkedBlock.cpp: + +2011-03-10 Luiz Agostini <luiz.agostini@openbossa.org> + + Reviewed by Andreas Kling. + + [Qt] fast/workers/stress-js-execution.html is crashing on Qt bot (intermittently) + https://bugs.webkit.org/show_bug.cgi?id=33008 + + Defining WTF_USE_PTHREAD_BASED_QT=1 for platforms where QThread uses pthread internally. + Symbian is excluded because pthread_kill does not work on it. Mac is excluded because + it has its own ways to do JSC threading. + + Defining WTF_USE_PTHREADS inside MachineStackMarker.cpp if USE(PTHREAD_BASED_QT) is true. + + * runtime/MachineStackMarker.cpp: + * wtf/Platform.h: + +2011-03-10 Gavin Barraclough <barraclough@apple.com> + + Reviewed by Oliver Hunt. + + Bug 56077 - ES5 conformance issues with RegExp.prototype + + There are three issues causing test failures in sputnik. + + (1) lastIndex should be converted at the point it is used, not the point it is set (this is visible if valueOf is overridden). + (2) The 'length' property of the test/exec functions should be 1. + (3) If no input is specified, the input to test()/exec() is "undefined" (i.e. ToString(undefined)) - not RegExp.input. + + * runtime/RegExpObject.cpp: + (JSC::RegExpObject::markChildren): + - Added to mark lastIndex + (JSC::regExpObjectLastIndex): + (JSC::setRegExpObjectLastIndex): + - lastIndex is now stored as a JSValue. + (JSC::RegExpObject::match): + - Use accessor methods to get/set lastIndex, add fast case for isUInt32 (don't convert to double). + * runtime/RegExpObject.h: + (JSC::RegExpObject::setLastIndex): + (JSC::RegExpObject::setLastIndex): + - Set lastIndex, either from a size_t or a JSValue. + (JSC::RegExpObject::getLastIndex): + - Get lastIndex. + (JSC::RegExpObject::RegExpObjectData::RegExpObjectData): + - Initialize as a JSValue. + * runtime/RegExpPrototype.cpp: + (JSC::RegExpPrototype::RegExpPrototype): + - Add test/exec properties with length 1. + * runtime/StringPrototype.cpp: + (JSC::stringProtoFuncMatch): + (JSC::stringProtoFuncSearch): + - Do not read RegExp.input if none is provided. + * tests/mozilla/js1_2/regexp/RegExp_input.js: + * tests/mozilla/js1_2/regexp/RegExp_input_as_array.js: + - Update these tests (they relied on non-ES5 behaviour). + +2011-03-10 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Oliver Hunt. + + Rolled back in 80277 and 80280 with event handler layout test failures fixed. + https://bugs.webkit.org/show_bug.cgi?id=55653 + + The failures were caused by a last minute typo: assigning to currentEvent + instead of m_currentEvent. + + * JavaScriptCore.exp: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * JavaScriptCore.xcodeproj/project.pbxproj: + * bytecompiler/BytecodeGenerator.cpp: + * jit/JITOpcodes.cpp: + * jit/JITOpcodes32_64.cpp: + * runtime/Arguments.h: + * runtime/JSActivation.cpp: + * runtime/JSActivation.h: + * runtime/JSCell.h: + * runtime/JSGlobalObject.cpp: + * runtime/JSGlobalObject.h: + * runtime/JSObject.cpp: + * runtime/JSStaticScopeObject.cpp: + * runtime/JSStaticScopeObject.h: + * runtime/JSVariableObject.h: + * runtime/MarkedSpace.cpp: + * runtime/MarkedSpace.h: + +2011-03-09 Oliver Hunt <oliver@apple.com> + + Reviewed by Gavin Barraclough. + + jquery/manipulation.html fails after r80598 + https://bugs.webkit.org/show_bug.cgi?id=56019 + + When linking a call, codeblock now takes ownership of the linked function + This removes the need for unlinking, and thus the incorrectness that was + showing up in these tests. + + * bytecode/CodeBlock.cpp: + (JSC::CodeBlock::~CodeBlock): + (JSC::CodeBlock::markAggregate): + * bytecode/CodeBlock.h: + (JSC::CallLinkInfo::CallLinkInfo): + (JSC::CallLinkInfo::setUnlinked): + (JSC::CodeBlock::addCaller): + * jit/JIT.cpp: + (JSC::JIT::privateCompile): + (JSC::JIT::linkCall): + (JSC::JIT::linkConstruct): + * jit/JIT.h: + * runtime/Executable.cpp: + * runtime/Executable.h: + +2011-03-09 Daniel Bates <dbates@rim.com> + + Attempt to fix the WinCE build after changeset 80684 <http://trac.webkit.org/changeset/80684> + (Bug #56041<https://bugs.webkit.org/show_bug.cgi?id=56041>). + + * interpreter/Interpreter.cpp: + (JSC::Interpreter::privateExecute): Substitute variable callFrame for exec in call to createSyntaxError(). + +2011-03-09 Gavin Barraclough <barraclough@apple.com> + + Reviewed by Sam Weinig. + + Bug 56041 - RexExp constructor should only accept flags "gim" + Fix for issues introduced in r80667. + + Invalid flags to a RegExp literal are a late syntax error! + + * bytecode/CodeBlock.h: + (JSC::CodeBlock::addRegExp): + - Pass a PassRefPtr<RegExp> + * bytecompiler/BytecodeGenerator.cpp: + (JSC::BytecodeGenerator::addRegExp): + (JSC::BytecodeGenerator::emitNewRegExp): + * bytecompiler/BytecodeGenerator.h: + - Pass a PassRefPtr<RegExp> + * bytecompiler/NodesCodegen.cpp: + (JSC::RegExpNode::emitBytecode): + - Should not be ASSERTing that the flags are valid - this is a late(er) error. + * interpreter/Interpreter.cpp: + (JSC::Interpreter::privateExecute): + - Need to check for error from RegExp constructor. + * jit/JITStubs.cpp: + (JSC::DEFINE_STUB_FUNCTION): + - Need to check for error from RegExp constructor. + * runtime/RegExp.h: + (JSC::RegExp::isValid): + - Make isValid check that the regexp was created with valid flags. + * runtime/RegExpKey.h: + - Since we'll not create RegExp objects with invalid flags, separate out the deleted value. + +2011-03-09 Gavin Barraclough <barraclough@apple.com> + + Windows build fix part 2. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + +2011-03-09 Gavin Barraclough <barraclough@apple.com> + + Windows build fix part 1. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + +2011-03-09 Gavin Barraclough <barraclough@apple.com> + + Reviewed by Darin Adler. + + Bug 56041 - RexExp constructor should only accept flags "gim" + We also should be passing the flags around as a bitfield rather than a string, + and should not have redundant, incompatible code for converting the string to a bitfield! + + * JavaScriptCore.exp: + * bytecompiler/NodesCodegen.cpp: + (JSC::RegExpNode::emitBytecode): + - Need to parse flags string to enum. + * runtime/RegExp.cpp: + (JSC::regExpFlags): + (JSC::RegExp::RegExp): + (JSC::RegExp::create): + - Add method to parse flags string to enum, change constructor/create args to take enum. + * runtime/RegExp.h: + (JSC::RegExp::global): + (JSC::RegExp::ignoreCase): + (JSC::RegExp::multiline): + - Change to use new enum values. + * runtime/RegExpCache.cpp: + (JSC::RegExpCache::lookupOrCreate): + (JSC::RegExpCache::create): + * runtime/RegExpCache.h: + - Changed to use regExpFlags enum instead of int/const UString&. + * runtime/RegExpConstructor.cpp: + (JSC::constructRegExp): + - Add use new enum parsing, check for error. + * runtime/RegExpKey.h: + (JSC::RegExpKey::RegExpKey): + * runtime/RegExpPrototype.cpp: + (JSC::RegExpPrototype::RegExpPrototype): + - Pass NoFlags value instead of empty string. + (JSC::regExpProtoFuncCompile): + - Add use new enum parsing, check for error. + * runtime/StringPrototype.cpp: + (JSC::stringProtoFuncMatch): + (JSC::stringProtoFuncSearch): + - Pass NoFlags value instead of empty string. + +2011-03-08 Gavin Barraclough <barraclough@apple.com> + + Reviewed by Sam Weinig + + Bug 55994 - Functions on Array.prototype should check length first. + These methods are designed to work on generic objects too, and if 'length' + is a getter that throws an exception, ensure this is correctly thrown + (even if other exceptions would be thrown, too). + + Make the length check the first thing we do. + This change shows a progression on SunSpider on my machine, but this is likely bogus. + + * runtime/ArrayPrototype.cpp: + (JSC::arrayProtoFuncToString): + (JSC::arrayProtoFuncToLocaleString): + (JSC::arrayProtoFuncJoin): + (JSC::arrayProtoFuncPop): + (JSC::arrayProtoFuncPush): + (JSC::arrayProtoFuncReverse): + (JSC::arrayProtoFuncShift): + (JSC::arrayProtoFuncSlice): + (JSC::arrayProtoFuncSort): + (JSC::arrayProtoFuncSplice): + (JSC::arrayProtoFuncUnShift): + (JSC::arrayProtoFuncFilter): + (JSC::arrayProtoFuncMap): + (JSC::arrayProtoFuncEvery): + (JSC::arrayProtoFuncForEach): + (JSC::arrayProtoFuncSome): + (JSC::arrayProtoFuncReduce): + (JSC::arrayProtoFuncReduceRight): + (JSC::arrayProtoFuncIndexOf): + (JSC::arrayProtoFuncLastIndexOf): + +2011-03-07 Oliver Hunt <oliver@apple.com> + + Reviewed by Gavin Barraclough. + + Make CodeBlock GC write barrier safe + https://bugs.webkit.org/show_bug.cgi?id=55910 + + In order to make CodeBlock WriteBarrier safe it was necessary + to make it have a single GC owner, and for that reason I have + made ExecutableBase a GC allocated object. This required + updating their creation routines as well as all sites that hold + a reference to them. GC objects that held Executable's have been + converted to WriteBarriers, and all other sites now use Global<>. + + As an added benefit this gets rid of JSGlobalData's list of + GlobalCodeBlocks. + + Perf testing shows a 0.5% progression on v8, vs. a 0.3% regression + on SunSpider. Given none of the tests that show regressions + demonstrate a regression on their own, and sampling shows up nothing. + I suspect we're just getting one or two additional gc passes at + the end of the run. + + * bytecode/CodeBlock.cpp: + (JSC::CodeBlock::dump): + (JSC::CodeBlock::CodeBlock): + (JSC::EvalCodeCache::markAggregate): + (JSC::CodeBlock::markAggregate): + * bytecode/CodeBlock.h: + (JSC::CodeBlock::ownerExecutable): + (JSC::CodeBlock::addConstant): + (JSC::CodeBlock::constantRegister): + (JSC::CodeBlock::getConstant): + (JSC::CodeBlock::addFunctionDecl): + (JSC::CodeBlock::addFunctionExpr): + (JSC::GlobalCodeBlock::GlobalCodeBlock): + (JSC::ExecState::r): + * bytecode/EvalCodeCache.h: + (JSC::EvalCodeCache::get): + * bytecode/SamplingTool.h: + (JSC::ScriptSampleRecord::ScriptSampleRecord): + * bytecompiler/BytecodeGenerator.cpp: + (JSC::BytecodeGenerator::addConstantValue): + (JSC::BytecodeGenerator::emitEqualityOp): + * bytecompiler/BytecodeGenerator.h: + (JSC::BytecodeGenerator::makeFunction): + * debugger/Debugger.cpp: + (JSC::evaluateInGlobalCallFrame): + * debugger/DebuggerCallFrame.cpp: + (JSC::DebuggerCallFrame::evaluate): + * interpreter/Interpreter.cpp: + (JSC::Interpreter::callEval): + * jit/JITInlineMethods.h: + (JSC::JIT::emitLoadDouble): + (JSC::JIT::emitLoadInt32ToDouble): + * jit/JITStubs.cpp: + (JSC::JITThunks::JITThunks): + (JSC::JITThunks::hostFunctionStub): + (JSC::JITThunks::clearHostFunctionStubs): + * jit/JITStubs.h: + * runtime/Completion.cpp: + (JSC::checkSyntax): + (JSC::evaluate): + * runtime/Executable.cpp: + (JSC::EvalExecutable::EvalExecutable): + (JSC::ProgramExecutable::ProgramExecutable): + (JSC::FunctionExecutable::FunctionExecutable): + (JSC::FunctionExecutable::~FunctionExecutable): + (JSC::EvalExecutable::markChildren): + (JSC::ProgramExecutable::markChildren): + (JSC::FunctionExecutable::markChildren): + (JSC::FunctionExecutable::fromGlobalCode): + * runtime/Executable.h: + (JSC::ExecutableBase::ExecutableBase): + (JSC::ExecutableBase::createStructure): + (JSC::NativeExecutable::create): + (JSC::NativeExecutable::NativeExecutable): + (JSC::VPtrHackExecutable::VPtrHackExecutable): + (JSC::ScriptExecutable::ScriptExecutable): + (JSC::EvalExecutable::create): + (JSC::EvalExecutable::createStructure): + (JSC::ProgramExecutable::create): + (JSC::ProgramExecutable::createStructure): + (JSC::FunctionExecutable::create): + (JSC::FunctionExecutable::createStructure): + * runtime/FunctionConstructor.cpp: + (JSC::constructFunction): + * runtime/Heap.cpp: + (JSC::Heap::destroy): + (JSC::Heap::markRoots): + * runtime/Heap.h: + * runtime/JSActivation.cpp: + (JSC::JSActivation::JSActivation): + (JSC::JSActivation::markChildren): + * runtime/JSActivation.h: + (JSC::JSActivation::JSActivationData::JSActivationData): + * runtime/JSCell.h: + * runtime/JSFunction.cpp: + (JSC::JSFunction::JSFunction): + (JSC::JSFunction::~JSFunction): + (JSC::JSFunction::markChildren): + * runtime/JSFunction.h: + * runtime/JSGlobalData.cpp: + (JSC::JSGlobalData::storeVPtrs): + (JSC::JSGlobalData::JSGlobalData): + (JSC::JSGlobalData::getHostFunction): + * runtime/JSGlobalData.h: + * runtime/JSGlobalObjectFunctions.cpp: + (JSC::globalFuncEval): + * runtime/JSObject.cpp: + * runtime/JSStaticScopeObject.cpp: + (JSC::JSStaticScopeObject::markChildren): + * runtime/JSStaticScopeObject.h: + (JSC::JSStaticScopeObject::JSStaticScopeObjectData::JSStaticScopeObjectData): + (JSC::JSStaticScopeObject::JSStaticScopeObject): + * runtime/JSZombie.cpp: + (JSC::JSZombie::leakedZombieStructure): + * runtime/JSZombie.h: + (JSC::JSZombie::createStructure): + * runtime/MarkedSpace.h: + +2011-03-07 Andy Estes <aestes@apple.com> + + Reviewed by Dan Bernstein. + + REGRESSION (r79060): Timestamp is missing from tweets in twitter. + https://bugs.webkit.org/show_bug.cgi?id=55228 + + A change to the date parser to handle the case where the year is + specified before the time zone inadvertently started accepting strings + such as '+0000' as valid years. Those strings actually represent time + zones in an offset of hours and minutes from UTC, not years. + + * wtf/DateMath.cpp: + (WTF::parseDateFromNullTerminatedCharacters): If the current character + in dateString is '+' or '-', do not try to parse the next token as a + year. + +2011-03-06 Yuta Kitamura <yutak@chromium.org> + + Reviewed by Kent Tamura. + + Add SHA-1 for new WebSocket protocol + https://bugs.webkit.org/show_bug.cgi?id=55039 + + The code is based on Chromium's portable SHA-1 implementation + (src/base/sha1_portable.cc). Modifications were made in order + to make the code comply with WebKit coding style. + + * GNUmakefile.am: + * JavaScriptCore.exp: + * JavaScriptCore.gypi: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * JavaScriptCore.vcproj/WTF/WTF.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * wtf/CMakeLists.txt: + * wtf/MD5.cpp: + (WTF::MD5::MD5): + * wtf/SHA1.cpp: Added. + (WTF::testSHA1): This function will be run the first time SHA1 + constructor is called. This function computes a few hash values + and checks the results in debug builds. However, constructor is + probably not a good place to run these tests, so we need to find + a good place for it (bug 55853). + (WTF::expectSHA1): + (WTF::f): + (WTF::k): + (WTF::rotateLeft): + (WTF::SHA1::SHA1): + (WTF::SHA1::addBytes): + (WTF::SHA1::computeHash): + (WTF::SHA1::finalize): + (WTF::SHA1::processBlock): + (WTF::SHA1::reset): + * wtf/SHA1.h: Added. + (WTF::SHA1::addBytes): + * wtf/wtf.pri: + +2011-03-05 Adam Barth <abarth@webkit.org> + + Reviewed by Dimitri Glazkov. + + Add Derived Sources to WebCore GYP build + https://bugs.webkit.org/show_bug.cgi?id=55813 + + Rename the action to be friendlier. + + * gyp/JavaScriptCore.gyp: + +2011-03-04 Viatcheslav Ostapenko <ostapenko.viatcheslav@nokia.com> + + Reviewed by Laszlo Gombos. + + [Qt] Need symbian version of cryptographicallyRandomValuesFromOS + https://bugs.webkit.org/show_bug.cgi?id=55782 + + Implement Symbian version of cryptographicallyRandomValuesFromOS + + * wtf/OSRandomSource.cpp: + (WTF::cryptographicallyRandomValuesFromOS): + +2011-03-04 Gavin Barraclough <barraclough@apple.com> + + Reviewed by Cameron Zwarich. + + Bug 55815 - Should throw an exception from JSObject::defineOwnProperty if !isExtensible(). + + * runtime/JSObject.cpp: + (JSC::JSObject::defineOwnProperty): + Add missing check. + +2011-03-04 Gavin Barraclough <barraclough@apple.com> + + Rubber stamped by olliej. + + Bug 54945 - The web page hangs towards the end of page load in Interpreter enabled javascript code in the latest webkit trunk. + + * interpreter/Interpreter.cpp: + (JSC::Interpreter::privateExecute): + (1) don't infinite loop. + (2) goto 1. + +2011-03-04 Gavin Barraclough <barraclough@apple.com> + + cmake build fix. + + * CMakeLists.txt: + +2011-03-04 Adam Barth <abarth@webkit.org> + + Reviewed by Dimitri Glazkov. + + Add Copy Files step to JavaScriptCore GYP build for apitest and minidom + https://bugs.webkit.org/show_bug.cgi?id=55798 + + * JavaScriptCore.gypi: + * gyp/JavaScriptCore.gyp: + +2011-03-04 Adam Barth <abarth@webkit.org> + + Reviewed by Dimitri Glazkov. + + Remove unneeded round-trips through ../Source in the Chromium GYP build + https://bugs.webkit.org/show_bug.cgi?id=55795 + + * JavaScriptCore.gyp/JavaScriptCore.gyp: + +2011-03-04 Adam Barth <abarth@webkit.org> + + Reviewed by Dimitri Glazkov. + + Use target_defaults to reduce boilerplate in GYP build system + https://bugs.webkit.org/show_bug.cgi?id=55790 + + Instead of setting up the configuration in each target, just defer to + target_defaults. Also, removed a define that was redundant with the + xcconfig. + + * gyp/JavaScriptCore.gyp: + +2011-03-03 Gavin Barraclough <barraclough@apple.com> + + Reviewed by Sam Weinig. + + Bug 55736 - Implement seal/freeze/preventExtensions for normal object types. + Provide basic functionallity from section 15.2.4 of ECMA-262. + This support will need expanding to cover arrays, too. + + Shows a 0.5% progression on SunSpidey, this seems to be due to changing + ObjectConstructor to use a static table. + + * DerivedSources.make: + * JavaScriptCore.exp: + * interpreter/CallFrame.h: + (JSC::ExecState::objectConstructorTable): + Add a static table for ObjectConstructor. + * runtime/CommonIdentifiers.h: + * runtime/JSGlobalData.cpp: + (JSC::JSGlobalData::JSGlobalData): + (JSC::JSGlobalData::~JSGlobalData): + Add a static table for ObjectConstructor. + * runtime/JSGlobalData.h: + * runtime/JSGlobalObject.cpp: + (JSC::JSGlobalObject::reset): + Add a static table for ObjectConstructor. + * runtime/JSObject.cpp: + (JSC::JSObject::seal): + (JSC::JSObject::freeze): + (JSC::JSObject::preventExtensions): + Transition the object's structure. + (JSC::JSObject::defineOwnProperty): + Check isExtensible. + * runtime/JSObject.h: + (JSC::JSObject::isSealed): + (JSC::JSObject::isFrozen): + (JSC::JSObject::isExtensible): + These wrap method on structure. + (JSC::JSObject::putDirectInternal): + Check isExtensible. + * runtime/ObjectConstructor.cpp: + (JSC::ObjectConstructor::ObjectConstructor): + (JSC::ObjectConstructor::getOwnPropertySlot): + (JSC::ObjectConstructor::getOwnPropertyDescriptor): + Change ObjectConstructor to use a static table. + (JSC::objectConstructorSeal): + (JSC::objectConstructorFreeze): + (JSC::objectConstructorPreventExtensions): + (JSC::objectConstructorIsSealed): + (JSC::objectConstructorIsFrozen): + (JSC::objectConstructorIsExtensible): + Add new methods on Object. + * runtime/ObjectConstructor.h: + (JSC::ObjectConstructor::createStructure): + * runtime/Structure.cpp: + (JSC::Structure::Structure): + init/propagate m_preventExtensions + (JSC::Structure::sealTransition): + (JSC::Structure::freezeTransition): + (JSC::Structure::preventExtensionsTransition): + transition the structure, materializing the property map, setting m_preventExtensions & changing attributes. + (JSC::Structure::isSealed): + (JSC::Structure::isFrozen): + check attributes to detect if object is sealed/frozen. + * runtime/Structure.h: + (JSC::Structure::isExtensible): + checks the m_preventExtensions flag. + +2011-03-04 Steve Falkenburg <sfalken@apple.com> + + Reviewed by Jon Honeycutt. + + Adopt VersionStamper tool for Windows WebKit DLLs + https://bugs.webkit.org/show_bug.cgi?id=55784 + <rdar://problem/9021273> + + We now use a tool to stamp the version number onto the Apple WebKit DLLs + during the post-build step. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.rc: Removed. + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCorePostBuild.cmd: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCorePreBuild.cmd: + +2011-03-04 Adam Barth <abarth@webkit.org> + + Reviewed by Dimitri Glazkov. + + JavaScriptCore GYP build should use a header map + https://bugs.webkit.org/show_bug.cgi?id=55712 + + This patch moves the os-win32 files into their own variable so that we + can use a header map in the Apple Mac Xcode build. The problem is that + the header map searches the whole project rather than just the files + included in a given target. Another solution to this problem is to + make GYP smarter about filtering out what files are added to the + project file. + + * JavaScriptCore.gypi: + * gyp/JavaScriptCore.gyp: + +2011-03-03 Ryosuke Niwa <rniwa@webkit.org> + + Reviewed by Darin Adler. + + Remove LOOSE_PASS_OWN_ARRAY_PTR from PassOwnArrayPtr.h + https://bugs.webkit.org/show_bug.cgi?id=55554 + + * runtime/JSGlobalObject.cpp: + (JSC::JSGlobalObject::copyGlobalsTo): Pass nullptr instead of 0. + (JSC::JSGlobalObject::resizeRegisters): Ditto; also use OwnArrayPtr instead of a raw pointer. + * runtime/JSGlobalObject.h: + (JSC::JSGlobalObject::addStaticGlobals): Ditto. + * wtf/PassOwnArrayPtr.h: Removed #define LOOSE_PASS_OWN_ARRAY_PTR + (WTF::PassOwnArrayPtr::PassOwnArrayPtr): Added a constructor that takes nullptr_t. + +2011-03-03 Adam Barth <abarth@webkit.org> + + Reviewed by Dimitri Glazkov. + + Add jsc to JavaScriptCore GYP build + https://bugs.webkit.org/show_bug.cgi?id=55711 + + * JavaScriptCore.gypi: + - Move jsc.cpp into jsc_files because it's really part of the jsc + target. + * JavaScriptCore.xcodeproj/project.pbxproj: + - Remove extraneous files from the normal jsc build. I probably + added these by mistake at some point. + * gyp/JavaScriptCore.gyp: + - Add the jsc target to the GYP file. + +2011-03-03 Adam Barth <abarth@webkit.org> + + Reviewed by Dimitri Glazkov. + + Add testapi to JavaScriptCore GYP build + https://bugs.webkit.org/show_bug.cgi?id=55707 + + The new testapi target is slightly incomplete. There's a resource + copying step that we don't quite have yet. + + This patch also cleans up some of the configuration issues in + JavaScriptCore.xcodeproj. It seems kind of wordy to repeat these for + each target. I suspect there's a more compact way of defining the + configurations, but this removes the "Default" configuration, which is + progress. + + * JavaScriptCore.gypi: + * gyp/JavaScriptCore.gyp: + +2011-03-03 Adam Barth <abarth@webkit.org> + + Reviewed by Eric Seidel. + + Teach JavaScriptCore GYP build about private headers + https://bugs.webkit.org/show_bug.cgi?id=55532 + + This patch distinguishes between public and private framework headers + so that public headers are copied into the Headers directory and + private headers are copied into the PrivateHeaders directory. + + * gyp/JavaScriptCore.gyp: + +2011-03-03 Geoffrey Garen <ggaren@apple.com> + + Rolled out 80277 and 80280 because they caused event handler layout test + failures. + + * JavaScriptCore.exp: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * JavaScriptCore.xcodeproj/project.pbxproj: + * bytecompiler/BytecodeGenerator.cpp: + * jit/JITOpcodes.cpp: + * jit/JITOpcodes32_64.cpp: + * runtime/Arguments.h: + * runtime/JSActivation.cpp: + * runtime/JSActivation.h: + * runtime/JSCell.h: + * runtime/JSGlobalObject.cpp: + * runtime/JSGlobalObject.h: + * runtime/JSObject.cpp: + * runtime/JSStaticScopeObject.cpp: + * runtime/JSStaticScopeObject.h: + * runtime/JSVariableObject.h: + * runtime/MarkedSpace.cpp: + * runtime/MarkedSpace.h: + +2011-03-03 Kevin Ollivier <kevino@theolliviers.com> + + [wx] Build fix. Alter order of headers included to make sure windows.h + is configured by wx, and skip Posix implementation file we don't use on Win. + + * wscript: + * wtf/wx/StringWx.cpp: + +2011-03-03 Oliver Hunt <oliver@apple.com> + + Reviewed by Geoffrey Garen. + + JSVariableObject needs to use WriteBarrier for symboltable property storage + https://bugs.webkit.org/show_bug.cgi?id=55698 + + Replace the direct usage of Register in JSVariableObject (and descendents) + with WriteBarrier. This requires updating the Arguments object to use + WriteBarrier as well. + + * interpreter/Interpreter.cpp: + (JSC::Interpreter::unwindCallFrame): + (JSC::Interpreter::privateExecute): + (JSC::Interpreter::retrieveArguments): + * jit/JITStubs.cpp: + (JSC::DEFINE_STUB_FUNCTION): + * runtime/ArgList.h: + (JSC::MarkedArgumentBuffer::initialize): + * runtime/Arguments.cpp: + (JSC::Arguments::markChildren): + (JSC::Arguments::copyToRegisters): + (JSC::Arguments::fillArgList): + (JSC::Arguments::getOwnPropertySlot): + (JSC::Arguments::getOwnPropertyDescriptor): + (JSC::Arguments::put): + * runtime/Arguments.h: + (JSC::Arguments::setActivation): + (JSC::Arguments::Arguments): + (JSC::Arguments::copyRegisters): + (JSC::JSActivation::copyRegisters): + * runtime/JSActivation.cpp: + (JSC::JSActivation::markChildren): + (JSC::JSActivation::symbolTableGet): + (JSC::JSActivation::symbolTablePut): + (JSC::JSActivation::symbolTablePutWithAttributes): + (JSC::JSActivation::put): + (JSC::JSActivation::putWithAttributes): + (JSC::JSActivation::argumentsGetter): + * runtime/JSActivation.h: + * runtime/JSGlobalObject.cpp: + (JSC::JSGlobalObject::put): + (JSC::JSGlobalObject::putWithAttributes): + (JSC::JSGlobalObject::markChildren): + (JSC::JSGlobalObject::copyGlobalsFrom): + (JSC::JSGlobalObject::copyGlobalsTo): + (JSC::JSGlobalObject::resizeRegisters): + * runtime/JSGlobalObject.h: + (JSC::JSGlobalObject::setRegisters): + (JSC::JSGlobalObject::addStaticGlobals): + * runtime/JSStaticScopeObject.cpp: + (JSC::JSStaticScopeObject::put): + (JSC::JSStaticScopeObject::putWithAttributes): + * runtime/JSVariableObject.cpp: + (JSC::JSVariableObject::symbolTableGet): + * runtime/JSVariableObject.h: + (JSC::JSVariableObject::registerAt): + (JSC::JSVariableObject::JSVariableObjectData::JSVariableObjectData): + (JSC::JSVariableObject::symbolTableGet): + (JSC::JSVariableObject::symbolTablePut): + (JSC::JSVariableObject::symbolTablePutWithAttributes): + (JSC::JSVariableObject::copyRegisterArray): + (JSC::JSVariableObject::setRegisters): + +2011-03-03 Geoffrey Garen <ggaren@apple.com> + + Try to fix Windows build. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Removed obsolete symbol. + + * runtime/JSStaticScopeObject.cpp: + (JSC::JSStaticScopeObject::getOwnPropertySlot): Don't mark this function + inline -- it's virtual. + +2011-03-02 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Darin Adler. + + Moved all variable object storage inline -- upping the object size limit to 1K + https://bugs.webkit.org/show_bug.cgi?id=55653 + + * JavaScriptCore.exp: + * bytecompiler/BytecodeGenerator.cpp: + * jit/JITOpcodes.cpp: + * runtime/Arguments.h: + * runtime/JSActivation.h: Removed out-of-line storage. Changed d-> to m_. + + * runtime/JSCell.h: + (JSC::JSCell::MarkedSpace::sizeClassFor): Added an imprecise size class + to accomodate objects up to 1K. + + * runtime/JSGlobalObject.cpp: + * runtime/JSGlobalObject.h: Removed out-of-line storage. Changed d-> to m_. + + * runtime/JSObject.cpp: Don't ASSERT that JSFinalObject fills the maximum + object size, since it doesn't anymore. + + * runtime/JSStaticScopeObject.cpp: + * runtime/JSStaticScopeObject.h: + * runtime/JSVariableObject.h: Removed out-of-line storage. Changed d-> to m_. + + * runtime/MarkedSpace.cpp: + (JSC::MarkedSpace::MarkedSpace): + (JSC::MarkedSpace::reset): + * runtime/MarkedSpace.h: Added an imprecise size class to accomodate objects up to 1K. + +2011-03-03 Timothy Hatcher <timothy@apple.com> + + Make APIShims usable from WebCore. + + Reviewed by Oliver Hunt. + + * ForwardingHeaders/JavaScriptCore/APIShims.h: Added. + * GNUmakefile.am: + * JavaScriptCore.exp: + * JavaScriptCore.gypi: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.make: + * JavaScriptCore.xcodeproj/project.pbxproj: + +2011-03-03 Peter Varga <pvarga@webkit.org> + + Reviewed by Oliver Hunt. + + Begin Characters Optimization Causes YARR Interpreter Errors + https://bugs.webkit.org/show_bug.cgi?id=55479 + + The addBeginTerm function is removed because it doesn't correctly handle those + cases when an "invalid" term has been + collected (e.g. CharacterClass). Move the removed function to the + setupAlternativeBeginTerms method's switch-case + where the non-allowed cases are correctly handled. + + Reenable the Beginning Character Optimization in the YARR Interpreter again. + + * yarr/YarrPattern.cpp: + (JSC::Yarr::YarrPatternConstructor::setupAlternativeBeginTerms): + (JSC::Yarr::YarrPattern::compile): + +2011-03-02 Jessie Berlin <jberlin@apple.com> + + Reviewed by Adam Roben. + + WebKit2: Use CFNetwork Sessions API. + https://bugs.webkit.org/show_bug.cgi?id=55435 + + Add the ability to create a Private Browsing storage session. + + * wtf/Platform.h: + Add a new #define for using CF Storage Sessions. + +2011-03-02 Oliver Hunt <oliver@apple.com> + + Reviewed by Gavin Barraclough. + + Remove "register slot" concept from PropertySlot + https://bugs.webkit.org/show_bug.cgi?id=55621 + + PropertySlot had already stopped storing Register "slots" + so this patch is simply removing that api entirely. + This exposed a problem in the ProgramNode constructor for + BytecodeGenerator where it reads from the registerfile + before it has initialised it. + + This bug wasn't a problem before as we were merely testing + for property existence rather than the actual value, and + used to work because setRegisterSlot didn't check that the + provided slot contained an initialised value. + + To get around this issue we now use symbolTableHasProperty + to do the symbol table check without trying to read the + RegisterFile. + + * JavaScriptCore.xcodeproj/project.pbxproj: + * bytecompiler/BytecodeGenerator.cpp: + (JSC::BytecodeGenerator::BytecodeGenerator): + * runtime/Arguments.cpp: + (JSC::Arguments::getOwnPropertySlot): + * runtime/JSActivation.cpp: + (JSC::JSActivation::symbolTableGet): + * runtime/JSGlobalObject.h: + (JSC::JSGlobalObject::symbolTableHasProperty): + * runtime/JSVariableObject.h: + (JSC::JSVariableObject::symbolTableGet): + * runtime/PropertySlot.h: + +2011-03-02 Daniel Cheng <dcheng@chromium.org> + + Reviewed by David Levin. + + Add feature define for data transfer items + https://bugs.webkit.org/show_bug.cgi?id=55510 + + * Configurations/FeatureDefines.xcconfig: + * wtf/Platform.h: + +2011-03-02 Adam Roben <aroben@apple.com> + + Delete old .res files whenever any .vsprops file changes + + Prospective fix for <http://webkit.org/b/55599> r80079 caused incremental Windows builds to + fail + + Reviewed by Tony Chang. + + * JavaScriptCore.vcproj/JavaScriptCore/react-to-vsprops-changes.py: + (main): Restructured code to loop over a set of file extensions, deleting any old files that + have that extension. Now deletes .res files, too. (We previously deleted any file matching + *.manifest*, but that turned out to just be the union of *.manifest and *.res.) + +2011-03-02 Adam Barth <abarth@webkit.org> + + Reviewed by Dimitri Glazkov. + + Teach JavaScriptCore GYP build how to build minidom + https://bugs.webkit.org/show_bug.cgi?id=55536 + + * JavaScriptCore.gypi: + * gyp/JavaScriptCore.gyp: + +2011-03-01 Adam Barth <abarth@webkit.org> + + Reviewed by Eric Seidel. + + JavaScriptCore GYP build should copy some headers into the target framework + https://bugs.webkit.org/show_bug.cgi?id=55524 + + After this patch, all the framework headers are exported as public + headers. We need to teach GYP how to handle private headers. + + I struggled to determine how to store the information about whether a + header was public, private, or project (i.e., not exported). + Generally, the GYPI should just list the files, but it seemed siliy to + have an almost duplicated list of files in the GYP file itself. If + this design doesn't scale, we might have to revisit it in the future. + + * JavaScriptCore.gyp/JavaScriptCore.gyp: + * JavaScriptCore.gypi: + * gyp/JavaScriptCore.gyp: + +2011-03-01 Sheriff Bot <webkit.review.bot@gmail.com> + + Unreviewed, rolling out r80079. + http://trac.webkit.org/changeset/80079 + https://bugs.webkit.org/show_bug.cgi?id=55547 + + "Broke the Win debug build?" (Requested by dcheng on #webkit). + + * wtf/Platform.h: + +2011-03-01 Daniel Cheng <dcheng@chromium.org> + + Reviewed by David Levin. + + Add feature define for data transfer items + https://bugs.webkit.org/show_bug.cgi?id=55510 + + * wtf/Platform.h: + +2011-03-01 Oliver Hunt <oliver@apple.com> + + Reviewed by Joseph Pecoraro. + + Misaligned memory access in CloneDeserializer on all ARM arch. + https://bugs.webkit.org/show_bug.cgi?id=48742 + + Add a CPU class for architectures that need aligned addresses + for memory access. + + * wtf/Platform.h: + +2011-03-01 Adam Barth <abarth@webkit.org> + + Reviewed by Dimitri Glazkov. + + Add pre- and post-build actions for JavaScriptCore GYP build + https://bugs.webkit.org/show_bug.cgi?id=55507 + + After this patch, we have all the steps for building the main + JavaScriptCore framework except the "copy headers" step, which I'll do + next. + + * gyp/JavaScriptCore.gyp: + +2011-03-01 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Sam Weinig. + + Rolled back in r79627 now that the underlying cause for it crashing is fixed. + https://bugs.webkit.org/show_bug.cgi?id=55159 + + * JavaScriptCore.exp: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * JavaScriptCore.xcodeproj/project.pbxproj: + * runtime/Heap.cpp: + (JSC::Heap::allocateSlowCase): + * runtime/Heap.h: + * runtime/JSCell.h: + (JSC::JSCell::MarkedSpace::sizeClassFor): + (JSC::JSCell::Heap::allocate): + (JSC::JSCell::JSCell::operator new): + * runtime/MarkedBlock.h: + * runtime/MarkedSpace.cpp: + (JSC::MarkedSpace::MarkedSpace): + (JSC::MarkedSpace::allocateBlock): + (JSC::MarkedSpace::reset): + * runtime/MarkedSpace.h: + (JSC::MarkedSpace::SizeClass::SizeClass): + +2011-03-01 Mark Rowe <mrowe@apple.com> + + Reviewed by Sam Weinig. + + Replace two script phases that do nothing but copy files with copy files build phases. + + This speeds up the build by a few seconds on high-end Mac Pros. + + * JavaScriptCore.xcodeproj/project.pbxproj: + +2011-03-01 David Kilzer <ddkilzer@apple.com> + + Spring cleaning! + + Rubber-stamped by Mark Rowe. + + * JavaScriptCore.xcodeproj/project.pbxproj: + (Copy Into Framework): Remove "set -x" and its comment. + +2011-03-01 Michael Saboff <msaboff@apple.com> + + Reviewed by Darin Adler. + + TinyMCE not working in nightlies + https://bugs.webkit.org/show_bug.cgi?id=54978 + + Disabling setupBeginChars() to temporarily work arround the test + failure. Filed https://bugs.webkit.org/show_bug.cgi?id=55479 + to track fixing the issue. + + * yarr/YarrPattern.cpp: + (JSC::Yarr::YarrPattern::compile): + +2011-02-23 Joseph Pecoraro <joepeck@webkit.org> + + Reviewed by Kenneth Rohde Christiansen. + + Viewport parsing no longer accepts "1.0;" value as valid. + https://bugs.webkit.org/show_bug.cgi?id=53705 + + Include a didReadNumber parameter to String -> float / double + conversion functions. This way, if the "ok" boolean out + parameter is false, you can check to see if there in fact + was a valid number parsed with garbage at the end. Examples + of that would be parsing "123x456" would have ok = false, + but didReadNumber = true. + + * JavaScriptCore.exp: + * wtf/text/StringImpl.cpp: + (WTF::StringImpl::toDouble): + (WTF::StringImpl::toFloat): + * wtf/text/StringImpl.h: + * wtf/text/WTFString.cpp: + (WTF::String::toDouble): + (WTF::String::toFloat): + (WTF::charactersToDouble): + (WTF::charactersToFloat): + * wtf/text/WTFString.h: + +2011-02-28 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Gavin Barraclough. + + Past-the-end writes in VM exceptions (caused crashes in r79627) + https://bugs.webkit.org/show_bug.cgi?id=55448 + + Some exceptions had the wrong structures, so they misoverestimated their + inline storage sizes. + + * runtime/JSGlobalData.cpp: + (JSC::JSGlobalData::JSGlobalData): Use the right structure. + + * runtime/JSObject.h: + (JSC::JSNonFinalObject::JSNonFinalObject): + (JSC::JSFinalObject::JSFinalObject): ASSERT that our structure capacity + is correct to verify this doesn't happen again. + +2011-03-01 Andras Becsi <abecsi@webkit.org> + + Reviewed by Csaba Osztrogonác. + + [Qt] Clean up the project files and move common options to WebKit.pri. + + * JavaScriptCore.pri: Move options also needed in WebCore into WebKit.pri. + * JavaScriptCore.pro: Deduplicate options. + * jsc.pro: Ditto. + +2011-03-01 Adam Barth <abarth@webkit.org> + + Reviewed by Eric Seidel. + + Teach JavaScriptCore GYP build about DEPTH + https://bugs.webkit.org/show_bug.cgi?id=55425 + + In addition to teaching the JavaScriptCore GYP build about DEPTH, this + change overrides the GCC warning configuration to disable a warning + that's causing probems in Assertions.cpp. With that warning disabled, + JavaScriptCore builds again. + + * gyp/JavaScriptCore.gyp: + +2011-02-28 Gavin Barraclough <barraclough@apple.com> + + Windows build fix. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + +2011-02-28 Sheriff Bot <webkit.review.bot@gmail.com> + + Unreviewed, rolling out r79948. + http://trac.webkit.org/changeset/79948 + https://bugs.webkit.org/show_bug.cgi?id=55439 + + "caused crashes on the SL release bot" (Requested by ggaren on + #webkit). + + * runtime/JSGlobalData.h: + * runtime/WriteBarrier.h: + +2011-02-28 Gavin Barraclough <barraclough@apple.com> + + Windows build fix. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + +2011-02-28 Gavin Barraclough <barraclough@apple.com> + + Reviewed by Sam Weinig & Darin Adler. + + Bug 55423 - Clean up property tables in Structure + + Encapsulate, reduce duplication of table search code, + and reduce the size of the tables (remove the index, + just maintain the tables in the correct order). + + Shows a 0.5% - 1% progression on sunspider. + + * JavaScriptCore.exp: + * runtime/PropertyMapHashTable.h: + (JSC::isPowerOf2): + (JSC::nextPowerOf2): + bit ops used to calculate table size. + (JSC::PropertyMapEntry::PropertyMapEntry): + (JSC::PropertyTable::ordered_iterator::operator++): + (JSC::PropertyTable::ordered_iterator::operator==): + (JSC::PropertyTable::ordered_iterator::operator!=): + (JSC::PropertyTable::ordered_iterator::operator*): + (JSC::PropertyTable::ordered_iterator::operator->): + (JSC::PropertyTable::ordered_iterator::ordered_iterator): + implementation of the iterator types + (JSC::PropertyTable::PropertyTable): + (JSC::PropertyTable::~PropertyTable): + constructors take an initial capacity for the table, + a table to copy, or both. + (JSC::PropertyTable::begin): + (JSC::PropertyTable::end): + create in-order iterators. + (JSC::PropertyTable::find): + search the hash table + (JSC::PropertyTable::add): + add a value to the hash table + (JSC::PropertyTable::remove): + remove a value from the hash table + (JSC::PropertyTable::size): + (JSC::PropertyTable::isEmpty): + accessors. + (JSC::PropertyTable::propertyStorageSize): + (JSC::PropertyTable::clearDeletedOffsets): + (JSC::PropertyTable::hasDeletedOffset): + (JSC::PropertyTable::getDeletedOffset): + (JSC::PropertyTable::addDeletedOffset): + cache deleted (available) offsets in the property storage array. + (JSC::PropertyTable::copy): + take a copy of the PropertyTable, potentially expanding the capacity. + (JSC::PropertyTable::sizeInMemory): + used for DEBUG build statistics + (JSC::PropertyTable::reinsert): + (JSC::PropertyTable::rehash): + (JSC::PropertyTable::tableCapacity): + (JSC::PropertyTable::deletedEntryIndex): + (JSC::PropertyTable::skipDeletedEntries): + (JSC::PropertyTable::table): + (JSC::PropertyTable::usedCount): + (JSC::PropertyTable::dataSize): + (JSC::PropertyTable::sizeForCapacity): + (JSC::PropertyTable::canInsert): + these methods provide internal implementation. + * runtime/Structure.cpp: + (JSC::Structure::dumpStatistics): + (JSC::Structure::~Structure): + (JSC::Structure::materializePropertyMap): + (JSC::Structure::despecifyDictionaryFunction): + (JSC::Structure::addPropertyTransition): + (JSC::Structure::flattenDictionaryStructure): + (JSC::Structure::copyPropertyTable): + (JSC::Structure::get): + (JSC::Structure::despecifyFunction): + (JSC::Structure::despecifyAllFunctions): + (JSC::Structure::put): + (JSC::Structure::remove): + (JSC::Structure::createPropertyMap): + (JSC::Structure::getPropertyNames): + (JSC::PropertyTable::checkConsistency): + (JSC::Structure::checkConsistency): + factored out code to PropertyMapHashTable.h + * runtime/Structure.h: + (JSC::Structure::propertyStorageSize): + (JSC::Structure::isEmpty): + (JSC::Structure::get): + factored out code to PropertyMapHashTable.h + +2011-02-28 Xan Lopez <xlopez@igalia.com> + + Another fix build :( + + Fix typo. + + * runtime/MachineStackMarker.cpp: + (JSC::freePlatformThreadRegisters): + +2011-02-28 Xan Lopez <xlopez@igalia.com> + + Unreviewed build fix for Snow Leopard. + + * runtime/MachineStackMarker.cpp: + (JSC::freePlatformThreadRegisters): + +2011-02-28 Alejandro G. Castro <alex@igalia.com> + + Unreviewed, fix SnowLeopard compilation after r79952. + + * runtime/MachineStackMarker.cpp: + (JSC::freePlatformThreadRegisters): + +2011-02-28 Mark Rowe <mrowe@apple.com> + + Reviewed by Darin Adler. + + <http://webkit.org/b/55430> OwnArrayPtr.h's LOOSE_OWN_ARRAY_PTR results in link errors. + + * wtf/OwnArrayPtr.h: + (WTF::::set): Implement OwnArrayPtr::set. + +2011-02-28 Martin Zoubek <martin.zoubek@acision.com> and Alejandro G. Castro <alex@igalia.com> + + Reviewed by Martin Robinson. + + Multithread support for JSC on UNIX + https://bugs.webkit.org/show_bug.cgi?id=26838 + + Implement suspendThread() and resumeThread() for systems with + pthread.h using thread signal handler. + + * runtime/MachineStackMarker.cpp: + (JSC::pthreadSignalHandlerSuspendResume): + (JSC::MachineStackMarker::Thread::Thread): + (JSC::getCurrentPlatformThread): + (JSC::suspendThread): + (JSC::resumeThread): + (JSC::getPlatformThreadRegisters): + (JSC::otherThreadStackPointer): + (JSC::freePlatformThreadRegisters): + (JSC::MachineStackMarker::markOtherThreadConservatively): + * wtf/Platform.h: Added Gtk port to use + ENABLE_JSC_MULTIPLE_THREADS. + +2011-02-28 Oliver Hunt <oliver@apple.com> + + Reviewed by Darin Adler. + + Stop using DeprecatedPtr for the global exception slot + https://bugs.webkit.org/show_bug.cgi?id=55424 + + Create GCRootPtr to signify that the exception slot is + a gcroot, and so is exempt from the usual writebarrier + restrictions. + + * runtime/JSGlobalData.h: + * runtime/WriteBarrier.h: + (JSC::GCRootPtr::GCRootPtr): + (JSC::GCRootPtr::operator=): + +2011-02-28 Adam Barth <abarth@webkit.org> + + Reviewed by Dimitri Glazkov. + + Use more xcconfig files in JavaScriptCore gyp build + https://bugs.webkit.org/show_bug.cgi?id=55391 + + The GYP experts tell me that we have have a total of two xcconfig + files: one for the xcodeproj as a whole and one for each target. This + patch uses that technique to re-use the existing xcconfig files and + eliminate the duplication. + + Technically, this patch introduces some build errors because the + xcconfig files assume that the xcodeproj file is one level higher in + the directory hierarchy. Specifically, the xcodeproj file can no + longer find the Info.plist or the prefix header. I plan to fix that in + a subsequent patch. + + Also, this patch introduces the Release and Production configurations, + which should work correctly now. + + * gyp/JavaScriptCore.gyp: + +2011-02-28 Jon Honeycutt <jhoneycutt@apple.com> + + Windows build fix. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + Add symbol to export. + +2011-02-28 Oliver Hunt <oliver@apple.com> + + Reviewed by Gavin Barraclough. + + Make ScopeChainNode GC allocated + https://bugs.webkit.org/show_bug.cgi?id=55283 + + Simplify lifetime and other issues with the scopechain + by making it gc allocated. This allows us to simplify + function exit and unwinding, as well as making the + current iterative refcounting go away. + + * JavaScriptCore.exp: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * bytecode/CodeBlock.cpp: + (JSC::CodeBlock::createActivation): + * bytecode/StructureStubInfo.cpp: + * bytecompiler/BytecodeGenerator.cpp: + (JSC::BytecodeGenerator::generate): + (JSC::BytecodeGenerator::BytecodeGenerator): + (JSC::BytecodeGenerator::emitJumpIfNotFunctionCall): + (JSC::BytecodeGenerator::emitJumpIfNotFunctionApply): + * bytecompiler/BytecodeGenerator.h: + * debugger/Debugger.cpp: + (JSC::Recompiler::operator()): + * debugger/DebuggerCallFrame.h: + (JSC::DebuggerCallFrame::scopeChain): + * interpreter/CachedCall.h: + (JSC::CachedCall::CachedCall): + * interpreter/CallFrame.h: + * interpreter/Interpreter.cpp: + (JSC::depth): + (JSC::Interpreter::unwindCallFrame): + (JSC::Interpreter::throwException): + (JSC::Interpreter::execute): + (JSC::Interpreter::executeCall): + (JSC::Interpreter::executeConstruct): + (JSC::Interpreter::privateExecute): + * jit/JITCall.cpp: + (JSC::JIT::compileOpCallInitializeCallFrame): + (JSC::JIT::compileOpCall): + * jit/JITCall32_64.cpp: + (JSC::JIT::compileOpCallInitializeCallFrame): + (JSC::JIT::emit_op_ret): + (JSC::JIT::emit_op_ret_object_or_this): + (JSC::JIT::compileOpCall): + * jit/JITOpcodes.cpp: + (JSC::JIT::emit_op_end): + (JSC::JIT::emit_op_ret): + (JSC::JIT::emit_op_ret_object_or_this): + * jit/JITOpcodes32_64.cpp: + (JSC::JIT::emit_op_end): + * jit/JITStubs.cpp: + (JSC::DEFINE_STUB_FUNCTION): + * jit/JITStubs.h: + * runtime/ArgList.cpp: + * runtime/Completion.cpp: + (JSC::evaluate): + * runtime/Completion.h: + * runtime/DateConversion.cpp: + * runtime/Executable.cpp: + (JSC::EvalExecutable::compileInternal): + (JSC::ProgramExecutable::compileInternal): + (JSC::FunctionExecutable::compileForCallInternal): + (JSC::FunctionExecutable::compileForConstructInternal): + * runtime/FunctionConstructor.cpp: + (JSC::constructFunction): + * runtime/GCActivityCallbackCF.cpp: + * runtime/Identifier.cpp: + * runtime/JSCell.h: + * runtime/JSChunk.cpp: Added. + * runtime/JSChunk.h: Added. + * runtime/JSFunction.cpp: + (JSC::JSFunction::JSFunction): + (JSC::JSFunction::markChildren): + (JSC::JSFunction::getCallData): + (JSC::JSFunction::getOwnPropertySlot): + (JSC::JSFunction::getConstructData): + * runtime/JSFunction.h: + (JSC::JSFunction::scope): + (JSC::JSFunction::setScope): + * runtime/JSGlobalData.cpp: + (JSC::JSGlobalData::JSGlobalData): + * runtime/JSGlobalData.h: + * runtime/JSGlobalObject.cpp: + (JSC::JSGlobalObject::init): + (JSC::JSGlobalObject::markChildren): + * runtime/JSGlobalObject.h: + (JSC::JSGlobalObject::JSGlobalObjectData::JSGlobalObjectData): + (JSC::JSGlobalObject::globalScopeChain): + * runtime/JSGlobalObjectFunctions.cpp: + (JSC::globalFuncEval): + * runtime/JSLock.cpp: + * runtime/JSNumberCell.cpp: + * runtime/JSZombie.cpp: + * runtime/MarkedBlock.cpp: + * runtime/MarkedSpace.cpp: + * runtime/PropertyNameArray.cpp: + * runtime/ScopeChain.cpp: + (JSC::ScopeChainNode::print): + (JSC::ScopeChainNode::localDepth): + (JSC::ScopeChainNode::markChildren): + * runtime/ScopeChain.h: + (JSC::ScopeChainNode::ScopeChainNode): + (JSC::ScopeChainNode::createStructure): + (JSC::ScopeChainNode::push): + (JSC::ScopeChainNode::pop): + (JSC::ScopeChainIterator::ScopeChainIterator): + (JSC::ScopeChainIterator::operator*): + (JSC::ScopeChainIterator::operator->): + (JSC::ScopeChainIterator::operator++): + (JSC::ScopeChainNode::begin): + (JSC::ScopeChainNode::end): + (JSC::ExecState::globalData): + (JSC::ExecState::lexicalGlobalObject): + (JSC::ExecState::globalThisValue): + * runtime/ScopeChainMark.h: + * wtf/DateMath.cpp: + +2011-02-27 Adam Barth <abarth@webkit.org> + + Reviewed by Eric Seidel. + + Implement WTF::randomNumber in terms of WTF::cryptographicallyRandomNumber when possible + https://bugs.webkit.org/show_bug.cgi?id=55326 + + Currently, randomNumber does a bunch of platform-specific work that to + get a cryptographic randomness when available. Instead, we should use + cryptographicallyRandomNumber, which abstracts this work. + Unfortunately, we can't remove all of the WTF::randomNumber + implementation because not every port has access to cryptographically + random numbers. + + * wtf/RandomNumber.cpp: + (WTF::randomNumber): + +2011-02-27 Benjamin Poulain <ikipou@gmail.com> + + Reviewed by Darin Adler. + + Eliminate DeprecatedPtrList from RenderBlock + https://bugs.webkit.org/show_bug.cgi?id=54972 + + Add methods find() and contains() using an adaptor to ListHashSet. + Those method are like the one of HashSet, they allow to find objects + based on a different key than the one used to define the set. + + Add convenience methods for direct access to the head and tail of the list. + Those methods are providing similar API/behavior as Vector. + + * wtf/ListHashSet.h: + (WTF::::first): + (WTF::::last): + (WTF::::removeLast): + (WTF::ListHashSetTranslatorAdapter::hash): + (WTF::ListHashSetTranslatorAdapter::equal): + (WTF::::find): + (WTF::::contains): + +2011-02-26 Patrick Gansterer <paroga@webkit.org> + + Reviewed by Andreas Kling. + + Add support for DragonFly BSD + https://bugs.webkit.org/show_bug.cgi?id=54407 + + DragonFly BSD is based on FreeBSD, so handle it like FreeBSD. + + * wtf/Platform.h: + +2011-02-26 Adam Barth <abarth@webkit.org> + + Reviewed by Dimitri Glazkov. + + JavaScriptCore should use the xcconfig file instead of importing that information into GYP + https://bugs.webkit.org/show_bug.cgi?id=55282 + + Technically, this breaks the build because I had removed one of the + warnings in this config file, but this change seems like an + improvement. + + * gyp/JavaScriptCore.gyp: + +2011-02-26 Thouraya ANDOLSI <thouraya.andolsi@st.com> + + Reviewed by Nikolas Zimmermann. + + SH4 JIT SUPPORT + https://bugs.webkit.org/show_bug.cgi?id=44329 + + Provide an ExecutableAllocater::cacheFlush() implementation for + Linux/SH4. + + * jit/ExecutableAllocator.h: + (JSC::ExecutableAllocator::cacheFlush): + +2011-02-25 Sheriff Bot <webkit.review.bot@gmail.com> + + Unreviewed, rolling out r79627. + http://trac.webkit.org/changeset/79627 + https://bugs.webkit.org/show_bug.cgi?id=55274 + + broke worker tests (Requested by olliej on #webkit). + + * JavaScriptCore.exp: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * runtime/Heap.cpp: + (JSC::Heap::allocate): + * runtime/Heap.h: + * runtime/JSCell.h: + (JSC::JSCell::JSCell::operator new): + (JSC::JSCell::MarkedSpace::sizeClassFor): + (JSC::JSCell::MarkedSpace::allocate): + * runtime/MarkedBlock.h: + * runtime/MarkedSpace.cpp: + (JSC::MarkedSpace::MarkedSpace): + (JSC::MarkedSpace::allocateBlock): + (JSC::MarkedSpace::reset): + * runtime/MarkedSpace.h: + (JSC::MarkedSpace::SizeClass::SizeClass): + +2011-02-25 Michael Saboff <msaboff@apple.com> + + Reviewed by Darin Adler. + + Leak in JSParser::Scope of ScopeLabelInfo Vector + https://bugs.webkit.org/show_bug.cgi?id=55249 + + Changed m_labels to be an OwnPtr<>. Added VectorTraits + and Scope copy constructor to support this change. + + * parser/JSParser.cpp: + (JSC::JSParser::Scope::~Scope): + +2011-02-25 Fumitoshi Ukai <ukai@chromium.org> + + Reviewed by Adam Barth. + + WebSocket uses insecure random numbers + https://bugs.webkit.org/show_bug.cgi?id=54714 + + * JavaScriptCore.exp: Export WTF::cryptographicallyRandomNumber() + +2011-02-25 Patrick Gansterer <paroga@webkit.org> + + Reviewed by Adam Roben. + + Move timeBeginPeriod into OS(WINDOWS) section + https://bugs.webkit.org/show_bug.cgi?id=55247 + + * jsc.cpp: + (main): timeBeginPeriod is available on all Windows versions and not compiler specific. + +2011-02-25 Patrick Gansterer <paroga@webkit.org> + + Unreviewed WinCE build fix for r79695. + + * jsc.cpp: + (main): SetErrorMode isn't available on WinCE. + +2011-02-25 Adam Roben <aroben@apple.com> + + Work around Cygwin's crash-suppression behavior + + Cygwin calls ::SetErrorMode(SEM_FAILCRITICALERRORS), which any processes it launches will + inherit. This is bad for testing/debugging, as it causes the post-mortem debugger not to be + invoked. (Cygwin does this because it makes crashes more UNIX-y.) We reset the error mode + when our test apps launch to work around Cygwin's behavior. + + Fixes <http://webkit.org/b/55222> Test apps crash silently (without invoking post-mortem + debugger) when launched from Cygwin 1.7 + + Reviewed by Darin Adler. + + * API/tests/testapi.c: Added a now-needed #include. + (main): + * jsc.cpp: + (main): + Call ::SetErrorMode(0) to undo Cygwin's folly. + + * JavaScriptCore.vcproj/testapi/testapiCommon.vsprops: Define NOMINMAX like many of our + other projects do so that windows.h won't define min/max macros that interfere with + std::numeric_limits<T>::min/max. + +2011-02-24 Adam Barth <abarth@webkit.org> + + Reviewed by Eric Seidel. + + Add GYP project for JavaScriptCore + https://bugs.webkit.org/show_bug.cgi?id=55027 + + Again, this GYP files is very rough, but it succeeds in building + JavaScriptCore. There's a lot more work to do here, especially in the + area of sharing with JavaScriptGlue.gyp. This patch is more of a + checkpoint so that other folks can help out if they wish. + + * gyp: Added. + * gyp/JavaScriptCore.gyp: Added. + * gyp/generate-derived-sources.sh: Added. + +2011-02-24 Adam Barth <abarth@webkit.org> + + Reviewed by Eric Seidel. + + Add missing files to JavaScriptCore.gypi + https://bugs.webkit.org/show_bug.cgi?id=55193 + + I forgot to add mm files in my previous patch. + + * JavaScriptCore.gyp/JavaScriptCore.gyp: + * JavaScriptCore.gypi: + +2011-02-24 Adam Barth <abarth@webkit.org> + + Reviewed by Eric Seidel. + + Remove unused parameter name in GCActivityCallback.cpp + https://bugs.webkit.org/show_bug.cgi?id=55194 + + This change is not strictly required for the GYP-based build system, + but I noticed this error when working on the new build system. + + * runtime/GCActivityCallback.cpp: + (JSC::DefaultGCActivityCallback::DefaultGCActivityCallback): + +2011-02-24 James Robinson <jamesr@chromium.org> + + Reviewed by Darin Fisher. + + Add a USE() macro to control use of the built-in UTF8 codec + https://bugs.webkit.org/show_bug.cgi?id=55189 + + Defaults USE(BUILTIN_UTF8_CODEC) to true for all platforms except chromium, which controls the flag via features.gypi. + + * wtf/Platform.h: + +2011-02-24 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Darin Adler. + + Variable-sized allocation (but still capped at 64 bytes) + https://bugs.webkit.org/show_bug.cgi?id=55159 + + SunSpider reports no change. + + * JavaScriptCore.exp: Some day, I hope not to have to edit this file. + + * runtime/Heap.cpp: + (JSC::Heap::allocateSlowCase): Split allocation into a fast and slow + case, so the fast case can inline size class selection and turn it into + a compile-time constant. + + Changed the collect-on-every allocation debugging switch to collect only + on every slow allocation, so you can still flip the switch without + recompiling the world. This may also be preferable for debugging purposes, + since collecting after every single allocation can be unusably slow, + and can mask problems by running destructors early. + + * runtime/Heap.h: Ditto. + + * runtime/JSCell.h: + (JSC::JSCell::MarkedSpace::sizeClassFor): + (JSC::JSCell::Heap::allocate): + (JSC::JSCell::JSCell::operator new): The inlining mentioned above. + + * runtime/MarkedBlock.h: Dropped the block size from 256KB to 16KB. With + multiple size classes, allocating a full 256KB for the first allocation + in a given class can be pathologically wasteful. (8KB, or 4KB Mac and + 8KB Windows, would be even better, but that seems to be a peformance + regression for now.) + + * runtime/MarkedSpace.cpp: + (JSC::MarkedSpace::MarkedSpace): + (JSC::MarkedSpace::allocateBlock): + (JSC::MarkedSpace::reset): There's more than one size class now, and its + cell size is not constant. + + * runtime/MarkedSpace.h: + (JSC::MarkedSpace::SizeClass::SizeClass): Ditto. + +2011-02-23 Oliver Hunt <oliver@apple.com> + + Reviewed by Geoffrey Garen. + + Make WeakGCMap use new handle infrastructure + https://bugs.webkit.org/show_bug.cgi?id=55100 + + Remove old WeakGCMap implementation and move over to new handle + based logic. + + This has a number of benefits, most notably it makes a WeakGCMap + always reflect the true state of the world by as all entries are + removed at the first gc cycle that makes them dead. This allows + us to get rid of code in a wide variety of objects where the only + purpose was to remove themselves from maps. + + It also means that we no longer need to have special "unchecked" + versions of any functions on WeakGCMap. Alas in order to maintain + compatibility with the JSWeakObjectMapClear API it is still + necessary to have an api that resembles uncheckedRemove, this is + now deprecatedRemove and will be dealt with in a later patch. + + In order to get correct semantics in WeakGCMap we need more + contextual information in the finalizer, so we've added an + abstract class based finaliser and a context parameter to the + calls. + + The new an improved WeakGCMap also results in sigificantly more + churn in the weak handle lists so exposed some potential problems + during the post mark phase which have been rectified as well. + + * API/JSWeakObjectMapRefPrivate.cpp: + * API/JSWeakObjectMapRefPrivate.h: + * runtime/Heap.cpp: + (JSC::Heap::globalObjectCount): + (JSC::Heap::protectedGlobalObjectCount): + * runtime/JSGlobalData.cpp: + (JSC::JSGlobalData::JSGlobalData): + * runtime/JSGlobalData.h: + * runtime/JSGlobalObject.cpp: + (JSC::JSGlobalObject::~JSGlobalObject): + (JSC::JSGlobalObject::init): + * runtime/WeakGCMap.h: + (JSC::WeakGCMap::iterator::iterator): + (JSC::WeakGCMap::iterator::get): + (JSC::WeakGCMap::iterator::getSlot): + (JSC::WeakGCMap::iterator::operator++): + (JSC::WeakGCMap::iterator::operator==): + (JSC::WeakGCMap::iterator::operator!=): + (JSC::WeakGCMap::WeakGCMap): + (JSC::WeakGCMap::isEmpty): + (JSC::WeakGCMap::clear): + (JSC::WeakGCMap::get): + (JSC::WeakGCMap::getSlot): + (JSC::WeakGCMap::set): + (JSC::WeakGCMap::take): + (JSC::WeakGCMap::size): + (JSC::WeakGCMap::deprecatedRemove): + (JSC::WeakGCMap::begin): + (JSC::WeakGCMap::end): + (JSC::WeakGCMap::~WeakGCMap): + (JSC::WeakGCMap::finalize): + * runtime/WeakGCPtr.h: + (JSC::WeakGCPtr::WeakGCPtr): + (JSC::WeakGCPtr::set): + +2011-02-24 Oliver Hunt <oliver@apple.com> + + Reviewed by Gavin Barraclough. + + Make weaklist processing deal with weak handles being removed during the iteration + https://bugs.webkit.org/show_bug.cgi?id=55105 + + It is possible for the handle heap to end up in a broken state if + a handle's finalizer removes either the current or next handle + to be visited during the post-gc cleanup. This patch removes that + problem by allowing the deallocate(Node*) routine to update the + iterator if it is called during finalization. + + * collector/handles/HandleHeap.cpp: + (JSC::HandleHeap::HandleHeap): + (JSC::HandleHeap::updateAfterMark): + (JSC::HandleHeap::clearWeakPointers): + (JSC::HandleHeap::writeBarrier): + (JSC::HandleHeap::protectedGlobalObjectCount): + * collector/handles/HandleHeap.h: + (JSC::Finalizer::~Finalizer): + (JSC::HandleHeap::getFinalizer): + (JSC::HandleHeap::deallocate): + (JSC::HandleHeap::makeWeak): + (JSC::HandleHeap::makeSelfDestroying): + (JSC::HandleHeap::Node::Node): + (JSC::HandleHeap::Node::setFinalizer): + (JSC::HandleHeap::Node::finalizer): + (JSC::HandleHeap::Node::finalizerContext): + * interpreter/RegisterFile.cpp: + (JSC::RegisterFile::setGlobalObject): + (JSC::GlobalObjectNotifier::finalize): + (JSC::RegisterFile::globalObjectCollectedNotifier): + * interpreter/RegisterFile.h: + (JSC::RegisterFile::RegisterFile): + * runtime/Heap.cpp: + (JSC::Heap::destroy): + * runtime/WeakGCPtr.h: + (JSC::WeakGCPtr::WeakGCPtr): + (JSC::WeakGCPtr::set): + +2011-02-24 Michael Saboff <msaboff@apple.com> + + Reviewed by Oliver Hunt. + + PatternAlternative leaked in YarrPatternConstructor::atomParenthesesEnd() + https://bugs.webkit.org/show_bug.cgi?id=55156 + + Added code to delete unneeded PatternAlternative after it is removed + from m_alternatives Vector. + + * yarr/YarrPattern.cpp: + (JSC::Yarr::YarrPatternConstructor::atomParenthesesEnd): + +2011-02-24 Eric Seidel <eric@webkit.org> + + Reviewed by Anders Carlsson. + + VectorBuffer should not call malloc(0) + https://bugs.webkit.org/show_bug.cgi?id=55091 + + Turns out the malloc() call which was so hot in: + https://bugs.webkit.org/show_bug.cgi?id=55005 + was actually just malloc(0). + + We shouldn't be calling malloc(0) anyway, since there is no need to + and it might actually do work on some systems. + I believe on Mac it ends up taking the standard spinlocks (expensive) + and the code on Brew actually does a malloc(1) instead. Neither is desirable. + + * wtf/Vector.h: + (WTF::VectorBufferBase::allocateBuffer): + (WTF::VectorBufferBase::tryAllocateBuffer): + +2011-02-24 Patrick Gansterer <paroga@webkit.org> + + Reviewed by Darin Adler. + + Remove obsolete PLATFORM(CI) + https://bugs.webkit.org/show_bug.cgi?id=55082 + + * wtf/Platform.h: + +2011-02-24 Martin Robinson <mrobinson@igalia.com> + + Reviewed by Xan Lopez. + + [GTK] Remove the GFile GOwnPtr specialization + https://bugs.webkit.org/show_bug.cgi?id=55154 + + Remove the GFile specialization of GOwnPtr. It's sufficient to use GRefPtr + to track GFiles since they are just regular reference-counted GObjects. + + * wtf/gobject/GOwnPtr.cpp: Remove GFile specialization. + * wtf/gobject/GOwnPtr.h: Ditto. + +2011-02-24 Patrick Gansterer <paroga@webkit.org> + + Reviewed by Eric Seidel. + + Rename PLATFORM(SKIA) to USE(SKIA) + https://bugs.webkit.org/show_bug.cgi?id=55090 + + * wtf/Platform.h: + +2011-02-24 Patrick Gansterer <paroga@webkit.org> + + Reviewed by Alexey Proskuryakov. + + Remove pthreads dependecy for JSLock + https://bugs.webkit.org/show_bug.cgi?id=54832 + + JSLock is only needed to support an obsolete execution model where JavaScriptCore + automatically protected against concurrent access from multiple threads. + So it's safe to disable it on non-mac platforms where we don't have native pthreads. + + * runtime/JSLock.cpp: + +2011-02-24 Chao-ying Fu <fu@mips.com> + + Reviewed by Eric Seidel. + + Fix MIPS build with new patchOffsetPut/GetByIdPropertyMapOffset1/2 values + https://bugs.webkit.org/show_bug.cgi?id=54997 + + * jit/JIT.h: + * jit/JITStubs.cpp: + (JSC::JITThunks::JITThunks): + +2011-02-24 Andras Becsi <abecsi@webkit.org> + + Reviewed by Laszlo Gombos. + + [Qt] MinGW build fails to link + https://bugs.webkit.org/show_bug.cgi?id=55050 + + Prepend the libraries of subcomponents instead of appending them + to fix the library order according to the dependency of the libraries + + * JavaScriptCore.pri: rename addJavaScriptCore to prependJavaScriptCore + * jsc.pro: ditto + +2011-02-24 Eric Seidel <eric@webkit.org> + + Reviewed by Adam Barth. + + Deque<T> should support inline capacity + https://bugs.webkit.org/show_bug.cgi?id=55032 + + The title says it all. There are currently no places + which use this code yet, however it's been tested in conjunction + with code for bug 55005. + + This also adds an ASSERT that capacity is never 1. If you were able + to set the capacity equal to 1, the Deque would just get confused + and happily append your item but still think it had size 0. + + * wtf/Deque.h: + (WTF::DequeIterator::DequeIterator): + (WTF::DequeConstIterator::DequeConstIterator): + (WTF::DequeReverseIterator::DequeReverseIterator): + (WTF::DequeConstReverseIterator::DequeConstReverseIterator): + (WTF::::checkValidity): + (WTF::::checkIndexValidity): + (WTF::::invalidateIterators): + (WTF::::Deque): + (WTF::deleteAllValues): + (WTF::::operator): + (WTF::::destroyAll): + (WTF::::~Deque): + (WTF::::swap): + (WTF::::clear): + (WTF::::findIf): + (WTF::::expandCapacityIfNeeded): + (WTF::::expandCapacity): + (WTF::::takeFirst): + (WTF::::append): + (WTF::::prepend): + (WTF::::removeFirst): + (WTF::::remove): + (WTF::::addToIteratorsList): + (WTF::::removeFromIteratorsList): + (WTF::::DequeIteratorBase): + (WTF::::~DequeIteratorBase): + (WTF::::isEqual): + (WTF::::increment): + (WTF::::decrement): + (WTF::::after): + (WTF::::before): + * wtf/Vector.h: + +2011-02-22 Adam Barth <abarth@webkit.org> + + Reviewed by Ojan Vafai. + + Add missing files to JavaScriptCore.gypi + https://bugs.webkit.org/show_bug.cgi?id=55020 + + gypi files are supposed to list every file under the sun. This patch + adds some missing files and sorts the rest. + + * JavaScriptCore.gypi: + +2011-02-23 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Darin Adler. + + Refactored MarkedSpace to operate in terms of size classes + https://bugs.webkit.org/show_bug.cgi?id=55106 + + SunSpider reports no change. + + * runtime/JSCell.h: + (JSC::JSCell::MarkedSpace::sizeClassFor): + (JSC::JSCell::MarkedSpace::allocate): Delegate allocation based on size + class. Since these functions are inline, the compiler can constant fold + them. + + * runtime/MarkedBlock.h: + (JSC::MarkedBlock::cellSize): + (JSC::MarkedBlock::size): Factored out a cellSize() helper. + + * runtime/MarkedSpace.cpp: + (JSC::MarkedSpace::allocateBlock): + (JSC::MarkedSpace::allocateFromSizeClass): + (JSC::MarkedSpace::shrink): + (JSC::MarkedSpace::reset): + * runtime/MarkedSpace.h: + (JSC::MarkedSpace::SizeClass::SizeClass): + (JSC::MarkedSpace::SizeClass::reset): Changed to operate in terms of + abstract SizeClass objects, which are independent linked lists of blocks + of a certain size class, instead of a single m_heap object. + +2011-02-23 Adam Barth <abarth@webkit.org> + + Reviewed by James Robinson. + + [Chromium] Use WebKitClient for OSRandomSource instead of trying to talk to the file system in the sandbox + https://bugs.webkit.org/show_bug.cgi?id=55093 + + Exclude OSRandomSource.cpp from the Chromium build. This function is + implemented in WebKit/chromium/src instead. + + * JavaScriptCore.gyp/JavaScriptCore.gyp: + +2011-02-23 Oliver Hunt <oliver@apple.com> + + Roll out r64156 as it introduces incorrect behaviour. + + * runtime/JSByteArray.h: + (JSC::JSByteArray::setIndex): + +2011-02-23 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Oliver Hunt. + + Moved the "nextAtom" allocation pointer into MarkedBlock for better encapsulation + https://bugs.webkit.org/show_bug.cgi?id=55079 + + SunSpider reports no change. + + * runtime/Heap.cpp: + (JSC::Heap::reset): Moved Zombie sweeping here, up from MarkedSpace, + since we want Heap to logically control MarkedSpace. MarkedSpace should + never choose to sweep itself. + + * runtime/JSCell.h: + (JSC::JSCell::MarkedBlock::allocate): Updated for nextAtom becoming a + member of MarkedBlock. No need to reset nextAtom to firstAtom() when + we reach the end of a block, since there's now an explicit reset pass + during GC. + + * runtime/MarkedBlock.cpp: + (JSC::MarkedBlock::MarkedBlock): + * runtime/MarkedBlock.h: + (JSC::MarkedBlock::reset): Added the nextAtom data member, and reordered + some data members to improve cache locality. + + * runtime/MarkedSpace.cpp: + (JSC::MarkedSpace::MarkedSpace): + (JSC::MarkedSpace::allocate): + (JSC::MarkedSpace::reset): + * runtime/MarkedSpace.h: + (JSC::CollectorHeap::CollectorHeap): Removed nextAtom, and added an + explicit reset pass. + +2011-02-23 James Robinson <jamesr@chromium.org> + + Unreviewed, rolling out r79428. + http://trac.webkit.org/changeset/79428 + https://bugs.webkit.org/show_bug.cgi?id=54714 + + Does not work in the Chromium sandbox + + * JavaScriptCore.exp: + +2011-02-23 Adam Roben <aroben@apple.com> + + Fix an off-by-one error in JSC::appendSourceToError + + Looks like this bug has been around since the code was first added in r35245. + + Fixes <http://webkit.org/b/55052> <rdar://problem/9043512> Crash in JSC::appendSourceToError + when running fast/dom/objc-big-method-name.html on Windows with full page heap enabled + + Reviewed by Darin Adler. + + * interpreter/Interpreter.cpp: + (JSC::appendSourceToError): When trimming whitespace off the end of the string, examine the + character at stop-1 rather than at stop. At this point in the code, stop represents the + index just past the end of the characters we care about, and can even be just past the end + of the entire data buffer. + +2011-02-23 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Darin Adler. + + Rolled back in r79367 with SnowLeopard Release bot crash fixed. + https://bugs.webkit.org/show_bug.cgi?id=54999 + + The crash was caused by failure to update the "nextBlock" pointer when + removing a block from the list while shrinking. The fix is to update the + "nextBlock" pointer. + + This crash was very rare because it only happened in cases where the very + first block in the heap contained no marked cells. + +2011-02-23 Dan Bernstein <mitz@apple.com> + + Reviewed by Gavin Barraclough. + + Include frame numbers in backtraces. + https://bugs.webkit.org/show_bug.cgi?id=55060 + + * wtf/Assertions.cpp: + +2011-02-23 Xan Lopez <xlopez@igalia.com> + + Reviewed by Gavin Barraclough. + + latest jsc for armv7 crashes in sunspider tests + https://bugs.webkit.org/show_bug.cgi?id=54667 + + Update JIT offset values in ARMv7 after r78732. Fixes crashes in + SunSpider and JavaScript tests. + + * jit/JIT.h: update values. + +2011-02-23 Sheriff Bot <webkit.review.bot@gmail.com> + + Unreviewed, rolling out r79418. + http://trac.webkit.org/changeset/79418 + https://bugs.webkit.org/show_bug.cgi?id=55043 + + "breaks shlib linux build" (Requested by morrita on #webkit). + + * JavaScriptCore.gyp/JavaScriptCore.gyp: + * JavaScriptCore.gypi: + +2011-02-23 Patrick Gansterer <paroga@webkit.org> + + Reviewed by Alexey Proskuryakov. + + Use DEFINE_STATIC_LOCAL for ignoreSetMutex in Structure.cpp + https://bugs.webkit.org/show_bug.cgi?id=54831 + + * runtime/InitializeThreading.cpp: + (JSC::initializeThreadingOnce): + * runtime/Structure.cpp: + (JSC::ignoreSetMutex): + (JSC::Structure::Structure): + (JSC::Structure::~Structure): + (JSC::Structure::initializeThreading): + * runtime/Structure.h: + +2011-02-23 Patrick Gansterer <paroga@webkit.org> + + Reviewed by Darin Adler. + + Rename PLATFORM(CF) to USE(CF) + https://bugs.webkit.org/show_bug.cgi?id=53540 + + * runtime/DatePrototype.cpp: + * runtime/GCActivityCallbackCF.cpp: + * runtime/JSGlobalData.cpp: + (JSC::JSGlobalData::JSGlobalData): + * wtf/CurrentTime.cpp: + * wtf/Platform.h: + * wtf/text/AtomicString.h: + * wtf/text/StringImpl.h: + (WTF::StringImpl::computeHash): + * wtf/text/WTFString.h: + * wtf/unicode/icu/CollatorICU.cpp: + (WTF::Collator::userDefault): + +2011-02-23 Fumitoshi Ukai <ukai@chromium.org> + + Unreviewed build fix for Windows. + + WebSocket uses insecure random numbers + https://bugs.webkit.org/show_bug.cgi?id=54714 + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Export WTF::cryptographicallyRandomNumber() + +2011-02-23 Fumitoshi Ukai <ukai@chromium.org> + + Reviewed by Adam Barth. + + WebSocket uses insecure random numbers + https://bugs.webkit.org/show_bug.cgi?id=54714 + + * JavaScriptCore.exp: Export WTF::cryptographicallyRandomNumber() + +2011-02-22 Adam Barth <abarth@webkit.org> + + Reviewed by Ojan Vafai. + + Add missing files to JavaScriptCore.gypi + https://bugs.webkit.org/show_bug.cgi?id=55020 + + gypi files are supposed to list every file under the sun. This patch + adds some missing files and sorts the rest. + + * JavaScriptCore.gypi: + +2011-02-22 Sheriff Bot <webkit.review.bot@gmail.com> + + Unreviewed, rolling out r79367. + http://trac.webkit.org/changeset/79367 + https://bugs.webkit.org/show_bug.cgi?id=55012 + + all layout tests are crashing on Snow Leopard (Requested by + rniwa on #webkit). + + * GNUmakefile.am: + * JavaScriptCore.gypi: + * JavaScriptCore.vcproj/WTF/WTF.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * runtime/MarkedBlock.cpp: + (JSC::MarkedBlock::MarkedBlock): + * runtime/MarkedBlock.h: + * runtime/MarkedSpace.cpp: + (JSC::MarkedSpace::destroy): + (JSC::MarkedSpace::allocateBlock): + (JSC::MarkedSpace::freeBlock): + (JSC::MarkedSpace::allocate): + (JSC::MarkedSpace::shrink): + (JSC::MarkedSpace::reset): + * runtime/MarkedSpace.h: + (JSC::CollectorHeap::collectorBlock): + * wtf/CMakeLists.txt: + * wtf/DoublyLinkedList.h: Removed. + +2011-02-22 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Oliver Hunt. + + Manage MarkedBlocks in a linked list instead of a vector, so arbitrary removal is O(1) + https://bugs.webkit.org/show_bug.cgi?id=54999 + + SunSpider reports no change. + + * GNUmakefile.am: + * JavaScriptCore.gypi: + * JavaScriptCore.vcproj/WTF/WTF.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: So many build systems, so little time. + * wtf/CMakeLists.txt: + + * runtime/MarkedBlock.cpp: + (JSC::MarkedBlock::MarkedBlock): + * runtime/MarkedBlock.h: + (JSC::MarkedBlock::setPrev): + (JSC::MarkedBlock::setNext): + (JSC::MarkedBlock::prev): + (JSC::MarkedBlock::next): Added linked list data members and accessors. + + * runtime/MarkedSpace.cpp: + (JSC::MarkedSpace::destroy): + (JSC::MarkedSpace::allocateBlock): Stop using vector, since it doesn't exist anymore. + + (JSC::MarkedSpace::freeBlocks): New helper function for updating relevant + data structures when freeing blocks. + + (JSC::MarkedSpace::allocate): Updated for nextBlock being a pointer and + not a vector index. + + (JSC::MarkedSpace::shrink): Construct a temporary list of empties and + then free them, to avoid modifying our hash table while iterating it. + This wasn't a concern before because we were using indirect array + indexing, not direct pointer indexing. + + (JSC::MarkedSpace::reset): Updated for nextBlock being a pointer and + not a vector index. + + * runtime/MarkedSpace.h: + (JSC::CollectorHeap::CollectorHeap): Changed data type from vector to linked list. + + * wtf/DoublyLinkedList.h: Added. New linked list class. + (WTF::::DoublyLinkedList): + (WTF::::isEmpty): + (WTF::::head): + (WTF::::append): + (WTF::::remove): + +2011-02-22 Gavin Barraclough <barraclough@apple.com> + + Windows build fix. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + +2011-02-22 Gavin Barraclough <barraclough@apple.com> + + Reviewed by Sam Weinig. + + Bug 54988 - Re-create StructureTransitionTable class, encapsulate transition table + + The Structure class keeps a table of transitions to derived Structure types. Since + this table commonly contains a single entry we employ an optimization where instead + of holding a map, we may hold a pointer directly to a single instance of the mapped + type. We use an additional bit of data to flag whether the pointer is currently + pointing to a table of transitions, or a singleton transition. Previously we had + commonly used a pattern of storing data in the low bits of pointers, but had moved + away from this since it causes false leaks to be reported by the leaks tool. However + in this case, the entries in the map are weak links - this pointer will never be + responsible for keeping an object alive. As such we can use this approach provided + that the bit is set when a table is not in use (otherwise the table would appear to + be leaked). + + Additionally, the transition table currently allows two entries to exist for a given + key - one specialized to a particular value, and one not specialized. This is + unnecessary, wasteful, and a little inconsistent. (If you create an entry for a + specialized value, then a non-specialized entry, both will exist. If you create an + entry for a non-specialized value, then try to create a specialized entry, only a + non-specialized form will be allowed.) + + This shows a small progression on v8. + + * JavaScriptCore.exp: + * runtime/JSObject.h: + (JSC::JSObject::putDirectInternal): + * runtime/Structure.cpp: + (JSC::StructureTransitionTable::contains): + (JSC::StructureTransitionTable::get): + (JSC::StructureTransitionTable::remove): + (JSC::StructureTransitionTable::add): + (JSC::Structure::dumpStatistics): + (JSC::Structure::Structure): + (JSC::Structure::~Structure): + (JSC::Structure::addPropertyTransitionToExistingStructure): + (JSC::Structure::addPropertyTransition): + * runtime/Structure.h: + (JSC::Structure::get): + * runtime/StructureTransitionTable.h: + (JSC::StructureTransitionTable::Hash::hash): + (JSC::StructureTransitionTable::Hash::equal): + (JSC::StructureTransitionTable::HashTraits::emptyValue): + (JSC::StructureTransitionTable::HashTraits::constructDeletedValue): + (JSC::StructureTransitionTable::HashTraits::isDeletedValue): + (JSC::StructureTransitionTable::StructureTransitionTable): + (JSC::StructureTransitionTable::~StructureTransitionTable): + (JSC::StructureTransitionTable::isUsingSingleSlot): + (JSC::StructureTransitionTable::map): + (JSC::StructureTransitionTable::setMap): + (JSC::StructureTransitionTable::singleTransition): + (JSC::StructureTransitionTable::setSingleTransition): + +2011-02-22 Andras Becsi <abecsi@webkit.org> + + Reviewed by Laszlo Gombos. + + [Qt] Redesign the build system + https://bugs.webkit.org/show_bug.cgi?id=51339 + + Part 2. + + Build WebCore as a static library, compile the WebKit API and WebKit2 API + in a final step and link to WebKit2, WebCore and JSC libraries to fix + linking issues resulting from stripped away symbols. + + * JavaScriptCore.pri: Remove the workaround. + +2011-02-21 Adam Roben <aroben@apple.com> + + Fix linker warning on Windows + + r79135 tried to export JSObject::s_info by adding it to JavaScriptCore.def. This is the + obvious way (since it's how we export functions), but unfortunately it doesn't work correct. + r79222 made us export it the right way (using the JS_EXPORTDATA macro), but forgot to remove + it from JavaScriptCore.def. This caused us to get linker warnings about exporting the symbol + multiple times. + + Rubber-stamped by Anders Carlsson. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Removed JSObject::s_info. + +2011-02-21 Brian Weinstein <bweinstein@apple.com> + + Reviewed by Adam Roben. + + WebResourceCacheManager should be responsible for managing the CFURLCache as well + as the WebCore memory cache. + https://bugs.webkit.org/show_bug.cgi?id=54886 + Part of <rdar://problem/8971738> + + Add a new use flag for using the CFURLCache. + + * wtf/Platform.h: + +2011-02-21 Xan Lopez <xlopez@igalia.com> + + Reviewed by Gavin Barraclough. + + Use ASSERT_JIT_OFFSET in JITPropertyAccess32_64.cpp + https://bugs.webkit.org/show_bug.cgi?id=54901 + + * jit/JIT.h: swap actual and expected values in message, they were + reversed. + * jit/JITCall32_64.cpp: + (JSC::JIT::compileOpCall): use ASSERT_JIT_OFFSET instead of + a simple ASSERT. + * jit/JITPropertyAccess32_64.cpp: + (JSC::JIT::emit_op_method_check): ditto. + (JSC::JIT::compileGetByIdHotPath): ditto. + (JSC::JIT::compileGetByIdSlowCase): ditto. + (JSC::JIT::emit_op_put_by_id): ditto. + +2011-02-21 Gavin Barraclough <barraclough@apple.com> + + Ruber stamped by Sam Weinig + + Bug 54899 - Math.LOG10E should be 0.4342944819032518 + This value is quoted in section 15.8.1.5 of the spec. + + * runtime/MathObject.cpp: + (JSC::MathObject::MathObject): + +2011-02-21 Gavin Barraclough <barraclough@apple.com> + + Reviewed by Sam Weinig. + + Bug 54894 - Make inheritance structure described by ClassInfo match C++ class hierarchy. + + The ClassInfo objects describe an inheritance hierarchy, with each ClassInfo instance + containing a pointer to its parent class. These links should reflect the inheritance + hierarchy of C++ classes below JSObject. For the large part it does, but in some cases + entries in the C++ hierarchy are skipped over. This presently likely doesn't matter, + since intervening C++ classes may not have ClassInfo - but would be a potential bug + were ClassInfo were to be added. + + * API/JSCallbackConstructor.cpp: + * API/JSCallbackFunction.cpp: + * API/JSCallbackObjectFunctions.h: + * runtime/Arguments.h: + * runtime/ArrayPrototype.cpp: + * runtime/BooleanObject.cpp: + * runtime/DateInstance.cpp: + * runtime/DatePrototype.cpp: + * runtime/ErrorInstance.cpp: + * runtime/InternalFunction.cpp: + * runtime/JSActivation.cpp: + * runtime/JSArray.cpp: + * runtime/JSFunction.cpp: + * runtime/JSONObject.cpp: + * runtime/JSObject.h: + * runtime/JSZombie.h: + * runtime/MathObject.cpp: + * runtime/NativeErrorConstructor.cpp: + * runtime/NumberConstructor.cpp: + * runtime/NumberObject.cpp: + * runtime/RegExpConstructor.cpp: + * runtime/RegExpObject.cpp: + * runtime/StringObject.cpp: + * runtime/StringPrototype.cpp: + +2011-02-21 Adam Roben <aroben@apple.com> + + Export JSObject::s_info from JavaScriptCore.dll + + This matches what we do for all other ClassInfo objects that WebCore needs access to. + + Fixes <http://webkit.org/b/54881> REGRESSION (r79132): Lots of tests crashing in + JSCell::inherits on Windows + + Reviewed by Sam Weinig. + + * runtime/JSObject.h: Added JS_EXPORTDATA to s_info. + +2011-02-21 Kristian Amlie <kristian.amlie@nokia.com> + + Reviewed by Andreas Kling. + + Switched to compiler based detection, where the error actually is. + + It is not the platform that needs the workaround, it is the compiler. + + QtWebKit fails to compile on Windows XP with msvc-2008 + https://bugs.webkit.org/show_bug.cgi?id=54746 + + * bytecode/CodeBlock.h: + * runtime/RegExpObject.h: + +2011-02-20 Gavin Barraclough <barraclough@apple.com> + + Reviewed by Oliver Hunt. + + https://bugs.webkit.org/show_bug.cgi?id=54839 + Remove PrototypeFunction, NativeFunctionWrapper, and GlobalEvalFunction. + + Historically, Native functions used to be represented by PrototypeFunctions, however + since introducing call optimizations to the JIT this has used JSFunctions for host + calls too. At the point this change was made, the interpreter continued to use + PrototypeFunctions, however since fallback from the JIT to interpreter was introduced + the interpreter has had to be able to run using host functions represented using + JSFunctions - leading to an unnecessary and redundant divergence in behaviour between + interpreter only builds, and situations where the JIT has fallen back to interpreting. + + NativeFunctionWrapper only existed to select between PrototypeFunction and JSFunction + for wrappers for host functions, and as such can also be removed. + + GlobalEvalFunction is a redundant wrapper that happens to be derived from + PrototypeFunction. It existed to hold a reference to the global object - but since all + functions how derive from JSObjectWithGlobalObject, this no longer requires an + additional class to provide this functionality. + + * JavaScriptCore.JSVALUE32_64only.exp: + * JavaScriptCore.JSVALUE64only.exp: + * JavaScriptCore.xcodeproj/project.pbxproj: + Removed symbols / references to files. + + * runtime/GlobalEvalFunction.cpp: Removed. + * runtime/GlobalEvalFunction.h: Removed. + * runtime/NativeFunctionWrapper.h: Removed. + * runtime/PrototypeFunction.cpp: Removed. + * runtime/PrototypeFunction.h: Removed. + Removed. + + * runtime/Executable.cpp: + (JSC::NativeExecutable::~NativeExecutable): + * runtime/Executable.h: + (JSC::NativeExecutable::create): + (JSC::NativeExecutable::NativeExecutable): + (JSC::JSFunction::nativeFunction): + * runtime/JSFunction.cpp: + (JSC::callHostFunctionAsConstructor): + (JSC::JSFunction::JSFunction): + (JSC::JSFunction::getCallData): + * runtime/JSFunction.h: + * runtime/JSGlobalData.cpp: + (JSC::JSGlobalData::getHostFunction): + * runtime/JSGlobalData.h: + (JSC::JSGlobalData::getCTIStub): + Added interpreter-friendly constructors for NativeExecutables. + + * bytecompiler/BytecodeGenerator.cpp: + * interpreter/Interpreter.cpp: + * jit/JITStubs.cpp: + * jsc.cpp: + * runtime/ArrayConstructor.cpp: + * runtime/BooleanPrototype.cpp: + * runtime/BooleanPrototype.h: + * runtime/CallData.h: + * runtime/DateConstructor.cpp: + * runtime/DateConstructor.h: + * runtime/ErrorPrototype.cpp: + * runtime/ErrorPrototype.h: + * runtime/FunctionPrototype.cpp: + * runtime/FunctionPrototype.h: + * runtime/JSGlobalObject.cpp: + * runtime/JSGlobalObject.h: + * runtime/JSGlobalObjectFunctions.cpp: + * runtime/Lookup.cpp: + * runtime/NumberPrototype.cpp: + * runtime/NumberPrototype.h: + * runtime/ObjectConstructor.cpp: + * runtime/ObjectConstructor.h: + * runtime/ObjectPrototype.cpp: + * runtime/ObjectPrototype.h: + * runtime/RegExpPrototype.cpp: + * runtime/RegExpPrototype.h: + * runtime/SmallStrings.h: + * runtime/StringConstructor.cpp: + * runtime/StringConstructor.h: + Removed use of redundant classes. + +2011-02-19 Laszlo Gombos <laszlo.1.gombos@nokia.com> + + Unreviewed build fix for Symbian. + + [Symbian] Revert the removal of linking + against hal after r79126. + + Dependency on the hal library can not be removed + as it is still used (e.g. in MarkStackSymbian.cpp). + + * JavaScriptCore.pri: + +2011-02-19 Gavin Barraclough <barraclough@apple.com> + + Interpreter build fix. + + * runtime/ArrayConstructor.cpp: + * runtime/BooleanPrototype.cpp: + * runtime/DateConstructor.cpp: + * runtime/ErrorPrototype.cpp: + * runtime/FunctionPrototype.cpp: + * runtime/Lookup.cpp: + * runtime/NumberPrototype.cpp: + * runtime/ObjectConstructor.cpp: + * runtime/ObjectPrototype.cpp: + * runtime/RegExpPrototype.cpp: + * runtime/StringConstructor.cpp: + +2011-02-19 Gavin Barraclough <barraclough@apple.com> + + Build fix!! + + * JavaScriptCore.exp: + +2011-02-19 Gavin Barraclough <barraclough@apple.com> + + Windows build fix!! + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + +2011-02-19 Gavin Barraclough <barraclough@apple.com> + + Windows build fix! + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + +2011-02-19 Gavin Barraclough <barraclough@apple.com> + + Build fix! + + * JavaScriptCore.exp: + +2011-02-18 Gavin Barraclough <barraclough@apple.com> + + Reviewed by Sam Weinig. + + Bug 54786 - Devirtualize JSCell::classInfo() + + Instead of making a virtual function call, add a pointer to the ClassInfo + onto Structure. + + This removes a virtual function call, and paves the way towards removing all + the createStructure methods, and StructureFlags/AnonymousSlotCount properties + (these should be able to move onto ClassInfo). + + Calls to Structure::create must now pass a pointer to the ClassInfo for the + structure. All objects now have a ClassInfo pointer, non-object cell types + still do not. + + Changes are most mechanical, involving three steps: + * Remove virtual classInfo() methods. + * Add &s_info parameter to calls to Structure::create. + * Rename ClassInfo static members on classes from 'info' to 's_info', + for consistency. + + * API/JSCallbackConstructor.cpp: + * API/JSCallbackConstructor.h: + * API/JSCallbackFunction.cpp: + * API/JSCallbackFunction.h: + * API/JSCallbackObject.cpp: + * API/JSCallbackObject.h: + * API/JSCallbackObjectFunctions.h: + * API/JSObjectRef.cpp: + * API/JSValueRef.cpp: + * API/JSWeakObjectMapRefPrivate.cpp: + * JavaScriptCore.exp: + * debugger/Debugger.cpp: + * debugger/DebuggerActivation.h: + * debugger/DebuggerCallFrame.cpp: + * interpreter/Interpreter.cpp: + * jit/JITCall32_64.cpp: + * jit/JITOpcodes.cpp: + * jit/JITStubs.cpp: + * profiler/Profiler.cpp: + * runtime/Arguments.cpp: + * runtime/Arguments.h: + * runtime/ArrayConstructor.cpp: + * runtime/ArrayPrototype.cpp: + * runtime/ArrayPrototype.h: + * runtime/BooleanObject.cpp: + * runtime/BooleanObject.h: + * runtime/BooleanPrototype.cpp: + * runtime/DateConstructor.cpp: + * runtime/DateInstance.cpp: + * runtime/DateInstance.h: + * runtime/DatePrototype.cpp: + * runtime/DatePrototype.h: + * runtime/ErrorInstance.cpp: + * runtime/ErrorInstance.h: + * runtime/ErrorPrototype.cpp: + * runtime/FunctionPrototype.cpp: + * runtime/FunctionPrototype.h: + * runtime/GetterSetter.h: + * runtime/GlobalEvalFunction.h: + * runtime/InternalFunction.cpp: + * runtime/InternalFunction.h: + * runtime/JSAPIValueWrapper.h: + * runtime/JSActivation.cpp: + * runtime/JSActivation.h: + * runtime/JSArray.cpp: + * runtime/JSArray.h: + * runtime/JSByteArray.cpp: + * runtime/JSByteArray.h: + * runtime/JSCell.cpp: + * runtime/JSCell.h: + * runtime/JSFunction.cpp: + * runtime/JSFunction.h: + * runtime/JSGlobalData.cpp: + * runtime/JSGlobalObject.cpp: + * runtime/JSGlobalObject.h: + * runtime/JSNotAnObject.h: + * runtime/JSONObject.cpp: + * runtime/JSONObject.h: + * runtime/JSObject.cpp: + * runtime/JSObject.h: + * runtime/JSObjectWithGlobalObject.h: + * runtime/JSPropertyNameIterator.h: + * runtime/JSStaticScopeObject.h: + * runtime/JSString.h: + * runtime/JSVariableObject.h: + * runtime/JSWrapperObject.h: + * runtime/JSZombie.cpp: + * runtime/JSZombie.h: + * runtime/Lookup.cpp: + * runtime/MathObject.cpp: + * runtime/MathObject.h: + * runtime/NativeErrorConstructor.cpp: + * runtime/NativeErrorConstructor.h: + * runtime/NumberConstructor.cpp: + * runtime/NumberConstructor.h: + * runtime/NumberObject.cpp: + * runtime/NumberObject.h: + * runtime/NumberPrototype.cpp: + * runtime/ObjectConstructor.cpp: + * runtime/ObjectPrototype.cpp: + * runtime/RegExpConstructor.cpp: + * runtime/RegExpConstructor.h: + * runtime/RegExpObject.cpp: + * runtime/RegExpObject.h: + * runtime/RegExpPrototype.cpp: + * runtime/ScopeChain.cpp: + * runtime/StringConstructor.cpp: + * runtime/StringObject.cpp: + * runtime/StringObject.h: + * runtime/StringObjectThatMasqueradesAsUndefined.h: + * runtime/StringPrototype.cpp: + * runtime/StringPrototype.h: + * runtime/Structure.cpp: + * runtime/Structure.h: + +2011-02-19 David Kilzer <ddkilzer@apple.com> + + <http://webkit.org/b/54808> Change jsc target to build directly into JavaScriptCore.framework/Resources/jsc + + Reviewed by Dan Bernstein. + + * Configurations/Base.xcconfig: Added + JAVASCRIPTCORE_FRAMEWORKS_DIR variable. + * Configurations/JavaScriptCore.xcconfig: Used + JAVASCRIPTCORE_FRAMEWORKS_DIR to define INSTALL_PATH. + * JavaScriptCore.xcodeproj/project.pbxproj: Set the INSTALL_PATH + for Production configuration of jsc target. + (Copy Into Framework): Removed old build phase. + (Fix Framework Reference): Renamed build phase to "Copy Into + Framework". Added "set -x" call to make the script print the + commands it is running. Added code to exit early for Production + builds since this was never intended for them. Added code to + copy jsc into the JavaScriptCore.framework/Resources directory. + +2011-02-19 Siddharth Mathur <siddharth.mathur@nokia.com> + + Reviewed by Laszlo Gombos. + + [Symbian] OSAllocator implementation for Symbian OS. + Manages both data and code region requests. V8 and Sunspider tested + OK with interpreter. Not tested with JSC JIT yet as it has unrelated + failures. Also no thread safety yet. + https://bugs.webkit.org/show_bug.cgi?id=51128 + + * JavaScriptCore.pri: removed HAL linkage + * wtf/Bitmap.h: + (WTF::::findRunOfZeros): find run of zeros in a bitmap. quick n dirty + * wtf/OSAllocator.h: + (WTF::OSAllocator::decommitAndRelease): decommit explicitly + * wtf/OSAllocatorSymbian.cpp: Impl. of OSAllocator interface + (WTF::allocateCodeChunk): utility for code chunks + (WTF::deallocateCodeChunk): utility for code chunks + (WTF::dataAllocatorInstance): getter for data allocator instance + (WTF::OSAllocator::reserveUncommitted): + (WTF::OSAllocator::releaseDecommitted): + (WTF::OSAllocator::commit): + (WTF::OSAllocator::decommit): + (WTF::OSAllocator::reserveAndCommit): + (WTF::PageAllocatorSymbian::PageAllocatorSymbian): maps requests + to one underlying Symbian chunk + (WTF::PageAllocatorSymbian::~PageAllocatorSymbian): + (WTF::PageAllocatorSymbian::reserve): + (WTF::PageAllocatorSymbian::release): + (WTF::PageAllocatorSymbian::commit): + (WTF::PageAllocatorSymbian::decommit): + (WTF::PageAllocatorSymbian::contains): + * wtf/PageAllocatorSymbian.h: Added. + (WTF::SymbianChunk::SymbianChunk): wrapper around RChunk + (WTF::SymbianChunk::~SymbianChunk): + (WTF::SymbianChunk::contains): + +2011-02-19 Yong Li <yoli@rim.com> + + Reviewed by Eric Seidel. + + https://bugs.webkit.org/show_bug.cgi?id=54687 + When being built with armcc, "int" bit fields are treated as + unsigned integers, which will fail the comparisons like "m_offset == -1". + Using "signed" fixes the problem. + + * assembler/ARMAssembler.h: + * assembler/ARMv7Assembler.h: + +2011-02-18 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Sam Weinig. + + Made MarkedSpace block iteration size-class agnostic + https://bugs.webkit.org/show_bug.cgi?id=54792 + + SunSpider reports no change. + + * runtime/MarkedSpace.cpp: + (JSC::MarkedSpace::clearMarks): + (JSC::MarkedSpace::sweep): + (JSC::MarkedSpace::objectCount): + (JSC::MarkedSpace::size): + (JSC::MarkedSpace::capacity): + * runtime/MarkedSpace.h: + (JSC::MarkedSpace::forEach): Iterate blocks in hashing order instead of + size class list order. This is a much simpler convention in a world + of many different size classes. + +2011-02-18 Kristian Amlie <kristian.amlie@nokia.com> + + Reviewed by Andreas Kling. + + Added friend exception to Qt platform, which also compiles Windows. + + QtWebKit fails to compile on Windows XP with msvc-2008 + https://bugs.webkit.org/show_bug.cgi?id=54746 + + * bytecode/CodeBlock.h: + * runtime/RegExpObject.h: + +2011-02-18 Geoffrey Garen <ggaren@apple.com> + + (Rolled back in r79022 with crash fixed.) + + Reviewed by Sam Weinig. + + Use hashing instead of linear search in the conservative pointer test + https://bugs.webkit.org/show_bug.cgi?id=54767 + + SunSpider reports no change. + + * runtime/MarkedSpace.cpp: + (JSC::MarkedSpace::destroy): No need to explicitly clear the blocks array, + since freeBlock removes items for us. + + (JSC::MarkedSpace::freeBlock): Fixed a typo that always removed the last + block from the block set instead of the block being freed. Changed to + remove a block from our data structures before deallocating it, since + this is slightly cleaner. + + * runtime/MarkedSpace.h: + (JSC::MarkedSpace::contains): Variable-sized objects will use more, + smaller blocks, so it's important for the contains check not to be O(n) + in the number of blocks. + +2011-02-18 chris reiss <christopher.reiss@nokia.com> + + Reviewed by Andreas Kling. + + REGRESSION: Date.parse("Tue Nov 23 20:40:05 2010 GMT") returns NaN + https://bugs.webkit.org/show_bug.cgi?id=49989 + + updated test fast/js/script-tests/date-parse-test.js + + * wtf/DateMath.cpp: + (WTF::parseDateFromNullTerminatedCharacters): + +2011-02-18 Sheriff Bot <webkit.review.bot@gmail.com> + + Unreviewed, rolling out r79022. + http://trac.webkit.org/changeset/79022 + https://bugs.webkit.org/show_bug.cgi?id=54775 + + It broke the whole world (Requested by Ossy on #webkit). + + * runtime/MarkedSpace.h: + (JSC::MarkedSpace::contains): + +2011-02-18 Yael Aharon <yael.aharon@nokia.com> + + Reviewed by Dave Hyatt. + + Add support for dir=auto + https://bugs.webkit.org/show_bug.cgi?id=50916 + + Change defaultWritingDirection() to return if the writing direction + was determined from a letter with strong directionality or not. + + * JavaScriptCore.exp: + * JavaScriptCore.order: + * wtf/text/StringImpl.cpp: + (WTF::StringImpl::defaultWritingDirection): + * wtf/text/StringImpl.h: + * wtf/text/WTFString.h: + (WTF::String::defaultWritingDirection): + +2011-02-18 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Sam Weinig. + + Use hashing instead of linear search in the conservative pointer test + https://bugs.webkit.org/show_bug.cgi?id=54767 + + SunSpider reports no change. + + * runtime/MarkedSpace.h: + (JSC::MarkedSpace::contains): Variable-sized objects will use more, + smaller blocks, so it's important for the contains check not to be O(n) + in the number of blocks. + +2011-02-18 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Sam Weinig. + + Tightened some usage accounting code in MarkedSpace + https://bugs.webkit.org/show_bug.cgi?id=54761 + + SunSpider reports no change. + + * runtime/Heap.cpp: + (JSC::Heap::Heap): Initialize the marked space high water mark on + construction, instead of relying on some implicit subtleties to make + not initializing it work out OK. + + * runtime/Heap.h: Fixed up includes. + + * runtime/MarkedBlock.h: Made firstAtom() static so clients can call it + even without having allocated a block. + + * runtime/MarkedSpace.cpp: + (JSC::MarkedSpace::MarkedSpace): Don't pre-allocate a block, since this + would be prohibitively expensive with multiple size classes. + + (JSC::MarkedSpace::allocateBlock): + (JSC::MarkedSpace::freeBlock): Track allocated blocks in a hash set, + since linear search in the contains check will be prohibitively + expensive once we're using lots of smaller blocks. + + (JSC::MarkedSpace::allocate): Don't assume that we always have a block + allocated, since we don't anymore. (See above.) + + (JSC::MarkedSpace::reset): + * runtime/MarkedSpace.h: Updated for changes mentioned above. + +2011-02-17 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Sam Weinig. + + Made object allocation secretly variable-sized (Shhhh!) + https://bugs.webkit.org/show_bug.cgi?id=54721 + + SunSpider reports no change. + + Internally, MarkedBlock now makes variable-sized allocations, even + though MarkedSpace doesn't take advantage of this yet. + + * runtime/MarkedBlock.cpp: + (JSC::MarkedBlock::MarkedBlock): No need to ASSERT that allocations are + fixed-sized. + + * runtime/MarkedBlock.h: Shrunk the atom size so we can allocate things + that are not multiples of 64 bytes. + +2011-02-17 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Sam Weinig. + + Fixed some math errors when when using variable-sized cells + https://bugs.webkit.org/show_bug.cgi?id=54717 + + SunSpider reports no change. + + Computer Science Barbie says, "Math is not so hard afterall!" + + * runtime/JSCell.h: + (JSC::JSCell::MarkedBlock::allocate): Round up when calculating the + minimum number of atoms required for a cell, since rounding down + will get you splinched. + + * runtime/MarkedBlock.cpp: + (JSC::MarkedBlock::MarkedBlock): + (JSC::MarkedBlock::sweep): + * runtime/MarkedBlock.h: + (JSC::MarkedBlock::forEach): Changed a bunch of != tests to < tests + because m_endAtom is actually a fuzzy end -- iterating from firstAtom() + may not hit m_endAtom exactly. + +2011-02-17 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Sam Weinig. + + A little more abstraction for MarkedSpace::contains + https://bugs.webkit.org/show_bug.cgi?id=54715 + + * runtime/MarkedBlock.h: + (JSC::MarkedBlock::contains): Added a contains function, so MarkedSpace + doesn't have to know how MarkedBlock tracks containment internally. + + * runtime/MarkedSpace.h: + (JSC::MarkedSpace::contains): Call through to MarkedBlock to figure out + if a cell that seems to be in a block is valid. + +2011-02-17 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Sam Weinig. + + Removed the invariant that the last cell in a block is always marked + https://bugs.webkit.org/show_bug.cgi?id=54713 + + SunSpider reports no change. + + This adds one branch to allocation, but simplifies the mark invariant, + especially in a world of variable-sized cells. Now, it really is true + that any cell whose mark bit is set is a valid, live cell whose + constructor has run and whose destructor has not run. + + * runtime/JSCell.h: + (JSC::JSCell::MarkedBlock::allocate): Changed this do-while into a while + since we can no longer rely on a set mark bit to break out of this loop + before it reaches the end of the block. + + * runtime/MarkedBlock.cpp: + (JSC::MarkedBlock::MarkedBlock): + (JSC::MarkedBlock::sweep): + * runtime/MarkedBlock.h: + (JSC::MarkedBlock::isEmpty): + (JSC::MarkedBlock::clearMarks): + (JSC::MarkedBlock::markCount): + (JSC::MarkedBlock::forEach): No need to set a special last mark bit. + +2011-02-17 Sheriff Bot <webkit.review.bot@gmail.com> + + Unreviewed, rolling out r78856 and r78907. + http://trac.webkit.org/changeset/78856 + http://trac.webkit.org/changeset/78907 + https://bugs.webkit.org/show_bug.cgi?id=54705 + + These seem to break tests on 32-bit builds. (Requested by + aroben on #webkit). + + * JavaScriptCore.xcodeproj/project.pbxproj: + * collector/handles/Global.h: + (JSC::Global::internalSet): + * collector/handles/Handle.h: + (JSC::HandleTypes::getFromSlot): + (JSC::HandleTypes::toJSValue): + (JSC::HandleTypes::validateUpcast): + (JSC::HandleConverter::operator->): + (JSC::HandleConverter::operator*): + (JSC::Handle::Handle): + (JSC::Handle::get): + * runtime/JSArray.cpp: + (JSC::JSArray::sortNumeric): + * runtime/JSObject.h: + (JSC::JSObject::inlineGetOwnPropertySlot): + * runtime/SlotAccessor.h: Removed. + * runtime/WeakGCPtr.h: + (JSC::WeakGCPtr::get): + (JSC::WeakGCPtr::internalSet): + * runtime/WriteBarrier.h: + (JSC::DeprecatedPtr::DeprecatedPtr): + (JSC::DeprecatedPtr::get): + (JSC::DeprecatedPtr::operator*): + (JSC::DeprecatedPtr::operator->): + (JSC::DeprecatedPtr::slot): + (JSC::DeprecatedPtr::operator UnspecifiedBoolType*): + (JSC::DeprecatedPtr::operator!): + (JSC::WriteBarrierBase::set): + (JSC::WriteBarrierBase::get): + (JSC::WriteBarrierBase::operator*): + (JSC::WriteBarrierBase::operator->): + (JSC::WriteBarrierBase::clear): + (JSC::WriteBarrierBase::slot): + (JSC::WriteBarrierBase::operator UnspecifiedBoolType*): + (JSC::WriteBarrierBase::operator!): + (JSC::WriteBarrierBase::setWithoutWriteBarrier): + (JSC::WriteBarrier::WriteBarrier): + +2011-02-17 Csaba Osztrogonác <ossy@webkit.org> + + Unreviewed. + + [Qt] Buildfix. + + * wtf/RetainPtr.h: Add missing PLATFORM(CF) guard. + +2011-02-17 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Oliver Hunt. + + Made MarkedBlock variable-sized + https://bugs.webkit.org/show_bug.cgi?id=54692 + + SunSpider reports no change. + + Each MarkedBlock is now composed of a set of fixed-sized atoms, with one + mark bit per atom. A given cell may be composed of one or more atoms. + + * runtime/Heap.cpp: + (JSC::Heap::allocate): Made fixed-sizedness a property of MarkedSpace, + bubbling it up from MarkedBlock, since MarkedBlock now supports variable- + sizedness. + + * runtime/JSCell.h: + (JSC::JSCell::MarkedBlock::allocate): Removed use of CELLS_PER_BLOCK and + (implicit) one constants -- these quantities are not constant anymore. + Updated for switch from cell to atom. + + * runtime/MarkedBlock.cpp: + (JSC::MarkedBlock::create): + (JSC::MarkedBlock::destroy): + (JSC::MarkedBlock::MarkedBlock): + (JSC::MarkedBlock::sweep): + * runtime/MarkedBlock.h: + (JSC::MarkedBlock::firstAtom): + (JSC::MarkedBlock::atoms): + (JSC::MarkedBlock::isAtomAligned): + (JSC::MarkedBlock::blockFor): + (JSC::MarkedBlock::isEmpty): + (JSC::MarkedBlock::clearMarks): + (JSC::MarkedBlock::size): + (JSC::MarkedBlock::capacity): + (JSC::MarkedBlock::atomNumber): + (JSC::MarkedBlock::isMarked): + (JSC::MarkedBlock::testAndSetMarked): + (JSC::MarkedBlock::setMarked): + (JSC::MarkedBlock::forEach): Same as above. Also removed use of CELL_SIZE + and BLOCK_SIZE, and switched away from calling arbitrary pointers cells. + + * runtime/MarkedSpace.cpp: + (JSC::MarkedSpace::MarkedSpace): + (JSC::MarkedSpace::allocateBlock): + (JSC::MarkedSpace::allocate): + (JSC::MarkedSpace::reset): + * runtime/MarkedSpace.h: + (JSC::CollectorHeap::CollectorHeap): + (JSC::MarkedSpace::contains): Updated for renames. Made fixed-sizedness + a property of MarkedSpace. + +2011-02-17 Oliver Hunt <oliver@apple.com> + + Attempt to fix windows build + + * runtime/WriteBarrier.h: + +2011-02-17 Oliver Hunt <oliver@apple.com> + + Reviewed by Geoffrey Garen. + + Refactor WriteBarrier and DeprecatedPtr to have less code duplication. + https://bugs.webkit.org/show_bug.cgi?id=54608 + + Make use of the tricks used for Handle, et al to avoid duplicating all + of the logic for DeprecatedPtr and WriteBarrier simply to support known + vs. unknown types. + + * JavaScriptCore.xcodeproj/project.pbxproj: + * collector/handles/Global.h: + (JSC::Global::internalSet): + * collector/handles/Handle.h: + (JSC::Handle::Handle): + (JSC::Handle::get): + * runtime/JSArray.cpp: + (JSC::JSArray::sortNumeric): + * runtime/JSObject.h: + (JSC::JSObject::inlineGetOwnPropertySlot): + * runtime/SlotAccessor.h: Added. + (JSC::SlotTypes::getFromBaseType): + (JSC::SlotTypes::convertToBaseType): + (JSC::SlotTypes::getFromSlot): + (JSC::SlotTypes::toJSValue): + (JSC::SlotTypes::validateUpcast): + (JSC::SlotAccessor::operator->): + (JSC::SlotAccessor::operator*): + * runtime/WeakGCPtr.h: + (JSC::WeakGCPtr::get): + (JSC::WeakGCPtr::internalSet): + * runtime/WriteBarrier.h: + (JSC::DeprecatedPtr::DeprecatedPtr): + (JSC::DeprecatedPtr::get): + (JSC::DeprecatedPtr::slot): + (JSC::DeprecatedPtr::operator=): + (JSC::WriteBarrierTranslator::convertToStorage): + (JSC::WriteBarrierTranslator::convertFromStorage): + (JSC::WriteBarrierBase::set): + (JSC::WriteBarrierBase::get): + (JSC::WriteBarrierBase::clear): + (JSC::WriteBarrierBase::slot): + (JSC::WriteBarrierBase::operator UnspecifiedBoolType*): + (JSC::WriteBarrierBase::operator!): + (JSC::WriteBarrierBase::setWithoutWriteBarrier): + (JSC::WriteBarrier::WriteBarrier): + +2011-02-17 Kevin Ollivier <kevino@theolliviers.com> + + [wx] Revert incorrect blind fix and restore previous working code. + + * wtf/wx/StringWx.cpp: + (WTF::String::String): + +2011-02-16 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Maciej Stachowiak. + + Intermittent crashes beneath MarkStack::drain + https://bugs.webkit.org/show_bug.cgi?id=54614 + <rdar://problem/8971070> + + The crashes were caused by a GC happening after the global object's + property table had grown (due to compilation), but before the properties + had been fully initialized by program execution. + + * bytecompiler/BytecodeGenerator.cpp: + (JSC::BytecodeGenerator::BytecodeGenerator): Explicitly resize the global + object's register storage immediately, without waiting for program + execution to do it for us. This ensures that the global object's count + of global variables is consistent with the size of its global variable + storage at all times, and it ensures that all global variables are + properly initialized from the get-go. + + * runtime/JSGlobalObject.cpp: + (JSC::JSGlobalObject::resizeRegisters): + * runtime/JSGlobalObject.h: Added a helper function for growing the + global object's register storage, and initializing new registers. + +== Rolled over to ChangeLog-2011-02-16 == |
