| === Safari-111 === | 
 |  | 
 | 2003-10-22  Maciej Stachowiak  <mjs@apple.com> | 
 |  | 
 |         Fix broken build. | 
 |  | 
 |         * kjs/simple_number.h: | 
 |  | 
 | 2003-10-22  Maciej Stachowiak  <mjs@apple.com> | 
 |  | 
 | 	Merged 64-bit compilation fixes, and fixes for handling negative 0 | 
 | 	from upstream kjs. | 
 | 	 | 
 |         * kjs/internal.cpp: | 
 |         * kjs/simple_number.h: | 
 |         (KJS::SimpleNumber): fixed constants; added negZero constant.  | 
 |         (KJS::SimpleNumber::is): adjusted to use long and not int. | 
 |         (KJS::SimpleNumber::value): ditto. | 
 | 	(KJS::SimpleNumber::fits): ditto; also don't allow -0 to fit, so | 
 | 	we don't lose the distinction between -0 and +0. | 
 |         (KJS::SimpleNumber::make): adjusted to use long. | 
 |  | 
 | 2003-10-18  Darin Adler  <darin@apple.com> | 
 |  | 
 |         Reviewed by Dave. | 
 |  | 
 |         - fixed 3367015 -- interdependent variable declarations in for loop don't work (they go backwards) | 
 |  | 
 |         * kjs/nodes.h: (KJS::ForNode::ForNode): Add a new overload of the constructor for when the | 
 |         first parameter is a variable declaration list. Call reverseList as we do in other constructors | 
 |         that take lists that are built backwards. | 
 |         * kjs/nodes.cpp: (ForNode::reverseList): Added. New helper function. | 
 |  | 
 | === Safari-110 === | 
 |  | 
 | === Safari-109 === | 
 |  | 
 | 2003-10-06  Darin Adler  <darin@apple.com> | 
 |  | 
 |         * kjs/create_hash_table: Remove stray semicolon. | 
 |  | 
 |         * kjs/array_object.lut.h: | 
 |         * kjs/date_object.lut.h: | 
 |         * kjs/lexer.lut.h: | 
 |         * kjs/math_object.lut.h: | 
 |         * kjs/number_object.lut.h: | 
 |         * kjs/string_object.lut.h: | 
 |         Regenerated. | 
 |  | 
 | === Safari-108 === | 
 |  | 
 | 2003-10-02  Darin Adler  <darin@apple.com> | 
 |  | 
 |         Reviewed by Dave. | 
 |  | 
 |         - fixed 3441656 -- constructor bad for objs created w/ function as prototype (www.moock.org/asdg/codedepot) | 
 |  | 
 |         * kjs/nodes.cpp: (FuncDeclNode::processFuncDecl): Set up the constructor as | 
 |         as specified in the JavaScript spec. We were already doing this right in the | 
 |         other place we make functions. | 
 |  | 
 | 2003-09-30  Darin Adler  <darin@apple.com> | 
 |  | 
 |         Reviewed by Dave. | 
 |  | 
 |         Rolled in Harri Porten's change to accept non-breaking space in JavaScript. | 
 |  | 
 |         * kjs/lexer.cpp: (Lexer::isWhiteSpace): Accept 00A0 as "whitespace". | 
 |  | 
 | 2003-09-25  Maciej Stachowiak  <mjs@apple.com> | 
 |  | 
 | 	Roll out build system change since it did not actually work. :-( | 
 | 	 | 
 |         * JavaScriptCore.pbproj/project.pbxproj: | 
 |         * Makefile.am: | 
 |  | 
 | 2003-09-25  Maciej Stachowiak  <mjs@apple.com> | 
 |  | 
 |         Reviewed by Darin. | 
 |  | 
 |         * JavaScriptCore.pbproj/project.pbxproj: Don't hack install name. Instead | 
 | 	of embedding into Safari, embed into WebKit as sub-umbrella. | 
 |         * Makefile.am: Don't forget to rebuild if the user removes | 
 | 	JavaScript.framework from symroots manually. | 
 |  | 
 | === Safari-107 === | 
 |  | 
 | 2003-09-24  Darin Adler  <darin@apple.com> | 
 |  | 
 |         Reviewed by Ken. | 
 |  | 
 |         - fixed 3421107 -- some dates that other browsers can parse can't be parsed by KJS's Date.parse() | 
 |  | 
 |         * kjs/date_object.cpp: (KJS::KRFCDate_parseDate): Added code to be more strict about month names, | 
 |         to allow a time zone after date even if the date omits the time, and to understand AM and PM. | 
 |  | 
 | 2003-09-22  Darin Adler  <darin@apple.com> | 
 |  | 
 |         * JavaScriptCore.pbproj/project.pbxproj: Rename Mixed build style to OptimizedWithSymbols. | 
 |  | 
 | 2003-09-22  Darin Adler  <darin@apple.com> | 
 |  | 
 |         Reviewed by Ken. | 
 |  | 
 |         * kjs/config.h: Added HAVE_SYS_PARAM_H, since KJS does look for this header, and we do | 
 |         indeed have it. Just something I noticed in passing while cleaning up configure.in. | 
 |  | 
 | 2003-09-20  Darin Adler  <darin@apple.com> | 
 |  | 
 |         Reviewed by Dave. | 
 |  | 
 |         - fixed 3419380 -- JavaScript Date.getTimezoneOffset is off by one hour (during daylight savings) | 
 |  | 
 |         * kjs/date_object.cpp: (DateProtoFuncImp::call): The daylight savings correction | 
 |         in here was incorrect. Perhaps I should have corrected it for the non-BSD case too, | 
 |         but I'm not sure the issue is the same. | 
 |  | 
 | 2003-09-17  Darin Adler  <darin@apple.com> | 
 |  | 
 |         Reviewed by Maciej. | 
 |  | 
 |         * kjs/date_object.cpp: Removed our CF-based implementations of gmtime, localtime, | 
 |         mktime, timegm, and time, since they no longer have the slow "hit the filesystem | 
 |         every time" behavior. | 
 |  | 
 | === Safari-100 === | 
 |  | 
 | === Safari-99 === | 
 |  | 
 | === Safari-98 === | 
 |  | 
 | === Safari-97 === | 
 |  | 
 | === Safari-96 === | 
 |  | 
 | 2003-08-27  Maciej Stachowiak  <mjs@apple.com> | 
 |  | 
 |         Reviewed by John | 
 |  | 
 | 	- fixed rdar://problem/3397316 - sherlock crash: KJS::Collector::allocate(unsigned long) | 
 | 	 | 
 | 	* kjs/internal.cpp: | 
 |         (InterpreterImp::InterpreterImp): Hold the lock a bit longer, so | 
 | 	the call to initGlobalObject is covered. | 
 |  | 
 | === Safari-95 === | 
 |  | 
 | 2003-08-24  Darin Adler  <darin@apple.com> | 
 |  | 
 |         Reviewed by John. | 
 |  | 
 |         - fixed 3098350 -- opt. params to date methods are ignored (can't set end date in Exchange/Outlook web cal.) | 
 |  | 
 |         * kjs/date_object.cpp: (DateProtoFuncImp::call): Added code to handle the optional parameters. | 
 |         Strangely, the table of functions already had the right number of parameters listed, but the | 
 |         code to look at the parameter values was missing. | 
 |  | 
 | === Safari-94 === | 
 |  | 
 | 2003-08-17  Darin Adler  <darin@apple.com> | 
 |  | 
 |         Reviewed by Maciej. | 
 |  | 
 |         - fixed 3247528 -- encodeURI missing from JavaScriptCore (needed by Crystal Reports) | 
 |         - fixed 3381297 -- escape method does not escape the null character | 
 |         - fixed 3381299 -- escape method produces incorrect escape sequences ala WinIE, rather than correct ala Gecko | 
 |         - fixed 3381303 -- unescape method treats escape sequences as Latin-1 ala WinIE rather than as UTF-8 ala Gecko | 
 |         - fixed 3381304 -- unescape method garbles strings with bad escape sequences in them | 
 |  | 
 |         * kjs/function.h: Added constants for decodeURI, decodeURIComponent, encodeURI, and | 
 |         encodeURIComponent. | 
 |         * kjs/function.cpp: | 
 |         (encode): Added. New helper function for escape, encodeURI, and encodeURIComponent. | 
 |         (decode): Added. New helper function for unescape, decodeURI, and decodeURIComponent. | 
 |         (GlobalFuncImp::call): Added decodeURI, decodeURIComponent, encodeURI, and encodeURIComponent  | 
 |         implementations. Changed escape and unescape to use new helper functions, which fixes | 
 |         the four problems above. | 
 |  | 
 |         * kjs/internal.cpp: (InterpreterImp::initGlobalObject): Add decodeURI, decodeURIComponent, | 
 |         encodeURI, and encodeURIComponent to the global object. | 
 |  | 
 |         * kjs/ustring.h: Added a length to the CString class so it can hold strings with null | 
 |         characters in them, not just null-terminated strings. This allows a null character from | 
 |         a UString to survive the process of UTF-16 to UTF-8 decoding. Added overloads to | 
 |         UString::append, UString::UTF8String, UTF8SequenceLength, decodeUTF8Sequence, | 
 |         convertUTF16OffsetsToUTF8Offsets, and convertUTF8OffsetsToUTF16Offsets. | 
 |          | 
 |         * kjs/ustring.cpp: | 
 |         (CString::CString): Set up the length properly in all the constructors. Also add a new | 
 |         constructor that takes a length. | 
 |         (CString::append): Use and set the length properly. | 
 |         (CString::operator=): Use and set the length properly. | 
 |         (operator==): Use and the length and memcmp instead of strcmp. | 
 |         (UString::append): Added new overloads for const char * and for a single string to make | 
 |         it more efficient to build up a UString from pieces. The old way, a UString was created | 
 |         and destroyed each time you appended. | 
 |         (UTF8SequenceLength): New. Helper for decoding UTF-8. | 
 |         (decodeUTF8Sequence): New. Helper for decoding UTF-8. | 
 |         (UString::UTF8String): New. Decodes from UTF-16 to UTF-8. Same as the function that | 
 |         was in regexp.cpp, except has proper handling for UTF-16 surrogates. | 
 |         (compareStringOffsets): Moved from regexp.cpp. | 
 |         (createSortedOffsetsArray): Moved from regexp.cpp. | 
 |         (convertUTF16OffsetsToUTF8Offsets): New. Converts UTF-16 offsets to UTF-8 offsets, given | 
 |         a UTF-8 string. Same as the function that was in regexp.cpp, except has proper handling | 
 |         for UTF-16 surrogates. | 
 |         (convertUTF8OffsetsToUTF16Offsets): New. Converts UTF-8 offsets to UTF-16 offsets, given | 
 |         a UTF-8 string. Same as the function that was in regexp.cpp, except has proper handling | 
 |         for UTF-16 surrogates. | 
 |  | 
 |         - fixed 3381296 -- regular expression matches with UTF-16 surrogates will treat sequences as two characters | 
 |  | 
 |         * kjs/regexp.cpp: | 
 |         (RegExp::RegExp): Use the new UString::UTF8String function instead a function in this file. | 
 |         (RegExp::match): Use the new convertUTF16OffsetsToUTF8Offsets (and the corresponding | 
 |         reverse) instead of convertCharacterOffsetsToUTF8ByteOffsets in this file. | 
 |  | 
 | === Safari-93 === | 
 |  | 
 | 2003-08-14  Vicki Murley  <vicki@apple.com> | 
 |  | 
 |         Reviewed by John.  | 
 |  | 
 |         * JavaScriptCore.pbproj/project.pbxproj: deleted JavaScriptCore.order from the project. | 
 |  | 
 | 2003-08-14  Vicki Murley  <vicki@apple.com> | 
 |  | 
 |         Reviewed by John.  | 
 |  | 
 |         * JavaScriptCore.order: Removed.  We now link to the order file at /AppleInternal/OrderFiles. | 
 |         * JavaScriptCore.pbproj/project.pbxproj: change sectorder flag to point to /AppleInternal/OrderFiles/JavaScriptCore.order | 
 |  | 
 | === JavaScriptCore-92.1 === | 
 |  | 
 | 2003-08-07  Darin Adler  <darin@apple.com> | 
 |  | 
 |         Reviewed by John Sullivan. | 
 |  | 
 |         - fixed 3365527 -- subscripting JavaScript strings does not work (leads to hang at www.newmagna.com.au) | 
 |  | 
 |         The JavaScript specification says nothing about this, but other browsers seem to give | 
 |         read-only access to the characters in a string as if the string was an array of characters. | 
 |  | 
 |         * kjs/array_object.cpp: | 
 |         (ArrayInstanceImp::get): Update to use a public toArrayIndex function instead of our own getArrayIndex | 
 |         function, so we can share with string. | 
 |         (ArrayInstanceImp::put): Ditto. | 
 |         (ArrayInstanceImp::hasProperty): Ditto. | 
 |         (ArrayInstanceImp::setLength): Ditto. | 
 |  | 
 |         * kjs/ustring.h: Add toArrayIndex. | 
 |         * kjs/ustring.cpp: (UString::toArrayIndex): Added. Implements the rule from array. | 
 |         * kjs/identifier.h: Add a forwarding function so we can use toArrayIndex. | 
 |  | 
 |         * kjs/string_object.cpp: | 
 |         (StringInstanceImp::get): Return a single character string if the property name is an array index. | 
 |         (StringInstanceImp::hasProperty): Return true for property names that are suitable array indices. | 
 |  | 
 |         * JavaScriptCore.pbproj/project.pbxproj: Let Xcode be Xcode. | 
 |  | 
 | === Safari-92 === | 
 |  | 
 | 2003-08-07  Maciej Stachowiak  <mjs@apple.com> | 
 |  | 
 |         Reviewed by Darin. | 
 |  | 
 | 	- fixed 3366975 - repro hang in KJS::Value::Value entering text at eil.com | 
 | 	 | 
 |         * kjs/string_object.cpp: | 
 |         (StringProtoFuncImp::call): When doing a match against a regexp | 
 | 	with the global flag set, make sure to return null rather than an | 
 | 	empty array when there is no match. This is what other browsers do. | 
 |  | 
 | 2003-08-05  Maciej Stachowiak  <mjs@apple.com> | 
 |  | 
 |         Reviewed by John. | 
 |  | 
 |         * kjs/list.cpp: | 
 | 	(List::copyTail): Test for loop termination with < instead of !=, | 
 | 	since i starts at 1 but size could be 0. Do the same for the other | 
 | 	loop for consistency's sake. | 
 | 	 | 
 | 2003-08-01  Maciej Stachowiak  <mjs@apple.com> | 
 |  | 
 |         Reviewed by John. | 
 |  | 
 | 	- fixed 3222621 - Cryptic "anonymous function hack" messages in console (10.2.4) | 
 | 	 | 
 |         * kjs/lexer.cpp: | 
 |         (Lexer::lex): Remove useless debug spew. | 
 |  | 
 | === Safari-91 === | 
 |  | 
 | 2003-07-30  Darin Adler  <darin@apple.com> | 
 |  | 
 |         Reviewed by Dave. | 
 |  | 
 |         - fixed problem where some JavaScriptCore symbols had no namespace or prefix | 
 |  | 
 |         * kjs/grammar.y: Added a define for yylloc to make it use the kjs prefix. | 
 |         This is the same thing done for the rest of the symbols automatically by yacc, | 
 |         but for some reason it's not done for yyloc. Also make automatic() function static. | 
 |         * kjs/grammar.cpp: Regenerated. | 
 |         * kjs/lexer.cpp: Use kjsyylloc instead of yyloc. | 
 |  | 
 |         * pcre/pcre.h: Add defines to prepend kjs prefixes for all the PCRE functions. | 
 |  | 
 | 2003-07-30  Darin Adler  <darin@apple.com> | 
 |  | 
 |         * Makefile.am: Include the subdirectory with the PCRE code in it. | 
 |  | 
 | 2003-07-30  John Sullivan  <sullivan@apple.com> | 
 |  | 
 | 	- JavaScriptCore part of fix for 3284525 -- AutoFill fills in  | 
 | 	only e-mail address field of New Account form on Apple Store Japan | 
 |  | 
 |         Reviewed by Darin | 
 |  | 
 |         * JavaScriptCore.pbproj/project.pbxproj: | 
 | 	Mark pcre.h as a Private header | 
 |  | 
 | 2003-07-28  Maciej Stachowiak  <mjs@apple.com> | 
 |  | 
 |         Reviewed by Richard. | 
 |  | 
 | 	- fixed 3240814 - LEAK: 120 byte leak in JavaScript parser in Sherlock Movies channel | 
 | 	 | 
 |         * kjs/internal.cpp: | 
 |         (Parser::parse): ref() and deref() the program node, to make sure to clean up properly, | 
 | 	before deleting it. | 
 |         (InterpreterImp::checkSyntax): Likewise. | 
 |  | 
 | === Safari-90 === | 
 |  | 
 | 2003-07-22  Maciej Stachowiak  <mjs@apple.com> | 
 |  | 
 |         Reviewed by John. | 
 |  | 
 | 	Remove -seg_addr_table_filename to fix build. | 
 |  | 
 |         * JavaScriptCore.pbproj/project.pbxproj: | 
 |  | 
 | 2003-07-17  Maciej Stachowiak  <mjs@apple.com> | 
 |  | 
 |         Reviewed by John. | 
 |  | 
 | 	- fixed 3330344 - Please change allowable client to "JavaScriptGlue" from "JSGlue" | 
 |  | 
 |         * JavaScriptCore.pbproj/project.pbxproj: Changed allowable client | 
 | 	to "JavaScriptGlue" | 
 |  | 
 | 2003-07-13  Darin Adler  <darin@apple.com> | 
 |  | 
 |         Reviewed by Maciej. | 
 |  | 
 |         - do some improvements Maciej suggested while reviewing the array index change | 
 |  | 
 |         * kjs/array_object.cpp: | 
 |         (getArrayIndex): Return a flag to say whether the index was value separately, to avoid | 
 |         in-band signalling. | 
 |         (ArrayInstanceImp::get): Update for new getArrayIndex parameters. | 
 |         (ArrayInstanceImp::put): Ditto. | 
 |         (ArrayInstanceImp::hasProperty): Ditto. | 
 |         (ArrayInstanceImp::setLength): Ditto. | 
 |          | 
 |         * kjs/ustring.cpp: (UString::toStrictUInt32): Check for overflow in a way that avoids doing | 
 |         a divide every time through the loop. But note that it adds an extra branch to the loop. | 
 |         I wonder which is worse. | 
 |  | 
 | 2003-07-12  Darin Adler  <darin@apple.com> | 
 |  | 
 |         Fixed broken build. | 
 |  | 
 |         * kjs/identifier.h: Add toULong back. It's still used in WebCore (and maybe in JavaScriptGlue, | 
 |         for all I know). | 
 |  | 
 | 2003-07-12  Darin Adler  <darin@apple.com> | 
 |  | 
 |         Reviewed by Dave. | 
 |  | 
 |         - fixed 3272777 -- array object indices treated as integers by Safari, but as strings in other web browsers | 
 |  | 
 |         JavaScriptCore did not implement the proper rule for what an array index is. | 
 |  | 
 |         * kjs/array_object.cpp: | 
 |         (getArrayIndex): Added. Implements the rule from the specification, which also provides a handy | 
 |         "not an array index" value of 2^32-1. | 
 |         (ArrayInstanceImp::get): Use getArrayIndex. | 
 |         (ArrayInstanceImp::put): Ditto. | 
 |         (ArrayInstanceImp::hasProperty): Ditto. | 
 |         (ArrayInstanceImp::setLength): Ditto. | 
 |  | 
 |         * kjs/identifier.h: Removed now-unused toULong, and added toStrictUInt32, in both cases forwarding | 
 |         functions that forward to UString. | 
 |  | 
 |         * kjs/ustring.h: Added toStringUInt32. | 
 |         * kjs/ustring.cpp: (UString::toStrictUInt32): Added. Converts a string to a 32-bit unsigned integer, | 
 |         and rejects any string that does not exactly match the way the integer would be formatted on output. | 
 |         This is the rule documented in the ECMA language standard. | 
 |  | 
 | === Safari-89 === | 
 |  | 
 | 2003-07-10  Maciej Stachowiak  <mjs@apple.com> | 
 |  | 
 |         Reviewed by Darin. | 
 |  | 
 | 	- fixed 3302021 - v74 and v85 hang with http://e-www.motorola.com/ | 
 |  | 
 | 	The crux of this was saving and restoring the prototype objects | 
 | 	for all the standard types when saving and restoring for the page | 
 | 	cache. | 
 | 	 | 
 |         * kjs/internal.cpp: | 
 |         (InterpreterImp::saveBuiltins): | 
 |         (InterpreterImp::restoreBuiltins): | 
 |         * kjs/internal.h: | 
 |         * kjs/interpreter.cpp: | 
 |         (Interpreter::saveBuiltins): | 
 |         (Interpreter::restoreBuiltins): | 
 |         (SavedBuiltins::SavedBuiltins): | 
 |         (SavedBuiltins::~SavedBuiltins): | 
 |         * kjs/interpreter.h: | 
 |         * kjs/property_map.cpp: | 
 |  | 
 | 2003-07-07  Maciej Stachowiak  <mjs@apple.com> | 
 |  | 
 |         Reviewed by John. | 
 |  | 
 | 	- fixed 3295916 - b/c JavaScriptCore and WebCore are installing in wrong location, private headers are public | 
 |  | 
 |         * WebCore.pbproj/project.pbxproj: Install in WebKit.framework/Versions/A/Frameworks. | 
 |  | 
 | === Safari-88 === | 
 |  | 
 | 2003-07-02  Maciej Stachowiak  <mjs@apple.com> | 
 |  | 
 |         Reviewed by Ken. | 
 |  | 
 | 	- fixed 3096961 - JavaScriptCore should link only to what it uses, shouldn't drag in Cocoa.framework | 
 |  | 
 |         * JavaScriptCore.pbproj/project.pbxproj: Don't link Cocoa.framework; | 
 | 	just pull in CoreFoundation and CoreServices. | 
 |         * kjs/date_object.cpp: Include CoreServices.h instead of Carbon.h | 
 | 	(the stuff we want is in CarbonCore). | 
 |  | 
 | 2003-06-20  Darin Adler  <darin@apple.com> | 
 |  | 
 |         Reviewed by Maciej. | 
 |  | 
 |         - improved the property map sorting technique so that the indices | 
 |           are separate for each property map, and also preserve the ordering | 
 |           when property maps are saved and restored | 
 |  | 
 |         * kjs/property_map.cpp: | 
 |         (PropertyMap::put): Don't bother setting the index for _singleEntry, since there's | 
 |         no need to sort a single entry. Use the per-table lastIndexUsed instead of a global. | 
 |         (PropertyMap::expand): Don't use the index (uninitialized now) out of a _singleEntry | 
 |         when putting it in a newly-created map; just use 0. Compute a value for the new map's | 
 |         lastIndexUsed as we walk through the elements we are adding to it (using the same old | 
 |         indices from the old map). | 
 |  | 
 | === Safari-85.1 === | 
 |  | 
 | === Safari-85 === | 
 |  | 
 | 2003-06-13  Darin Adler  <darin@apple.com> | 
 |  | 
 |         Reviewed by Dave. | 
 |  | 
 | 	- fixed 3178438 -- return elements in order of addition in for..in loop (other browsers seem to) | 
 | 	- fixed 3292067 -- REGRESSION (64-65): albertsons.com "Shop A to Z" menus are not sorted alphabetically | 
 |  | 
 |         * kjs/property_map.h: Add index field to hash table entry and index parameter to insert function. | 
 |         * kjs/property_map.cpp: | 
 |         (PropertyMap::put): Set an index for new map entries to an ever-increasing number based on a global. | 
 |         (PropertyMap::insert): Take an index parameter. | 
 |         (PropertyMap::expand): Preserve the indices as we rehash the table. | 
 |         (comparePropertyMapEntryIndices): Added. Compares two property map entries by index. | 
 |         (PropertyMap::addEnumerablesToReferenceList): Sort the proprty map entries by index before adding | 
 |         them to the reference list. | 
 |  | 
 | === Safari-84 === | 
 |  | 
 | 2003-06-10  Vicki Murley  <vicki@apple.com> | 
 |  | 
 |         Reviewed by john. | 
 |  | 
 |         * JavaScriptCore.order: new order file for 1.0 | 
 |  | 
 | === Safari-83 === | 
 |  | 
 | 2003-06-04  Darin Adler  <darin@apple.com> | 
 |  | 
 |         Reviewed by Dave. | 
 |  | 
 | 	- fixed 3224031 -- can't search at rakuten.co.jp b/c of extra characters inserted by regexp replace (8-bit char) | 
 |  | 
 |         Use PCRE UTF-8 regular expressions instead of just chopping off high bytes. | 
 |  | 
 |         * kjs/regexp.h: Redo field names, remove some unused stuff. | 
 |         * kjs/regexp.cpp: | 
 |         (convertToUTF8): Added. | 
 |         (compareStringOffsets): Added. | 
 |         (createSortedOffsetsArray): Added. | 
 |         (convertCharacterOffsetsToUTF8ByteOffsets): Added. | 
 |         (convertUTF8ByteOffsetsToCharacterOffsets): Added. | 
 |         (RegExp::RegExp): Set the PCRE_UTF8 flag, and convert the UString to UTF-8 instead of | 
 |         using ascii() on it. | 
 |         (RegExp::~RegExp): Remove unneeded if statement (pcre_free is 0-tolerant as free is). | 
 |         (RegExp::match): Convert the UString to UTF-8 and convert the character offsets to and | 
 |         from UTF-8 byte offsets. Also do fixes for the "no offset vector" case so we get the | 
 |         correct position and matched string. | 
 |  | 
 |         * JavaScriptCore.pbproj/project.pbxproj: Add a PCRE header that was missing before. | 
 |  | 
 | === Safari-82 === | 
 |  | 
 | === Safari-81 === | 
 |  | 
 | 2003-05-21  Vicki Murley  <vicki@apple.com> | 
 |  | 
 |         Reviewed by john  | 
 | 	- fixed 3234553: Safari and its frameworks should link using order files | 
 |  | 
 |         * JavaScriptCore.order: Added. | 
 |         * JavaScriptCore.pbproj/project.pbxproj: set SECTORDER_FLAGS = -sectorder __TEXT __text JavaScriptCore.order | 
 |  | 
 | === Safari-80 === | 
 |  | 
 | 2003-05-19  Maciej Stachowiak  <mjs@apple.com> | 
 |  | 
 | 	- fixed 3261096 - Make WebKit an umbrella framework | 
 | 	 | 
 |         * JavaScriptCore.pbproj/project.pbxproj: In a B&I build, compile as a | 
 | 	sub-umbrella of WebKit. | 
 |  | 
 | 2003-05-16  Maciej Stachowiak  <mjs@apple.com> | 
 |  | 
 |         Reviewed by Ken. | 
 |  | 
 | 	- fixed 3254063 - REGRESSION: hang in KJS PropertyMap with many items in iDisk pictures folder | 
 |  | 
 |         * kjs/property_map.cpp: | 
 | 	(PropertyMap::expand): Fixed to maintain key count properly - otherwise the hashtable | 
 | 	could get completely full, resulting in disaster. | 
 | 	(PropertyMap::checkConsistency): Fixed compilation. Fixed to know about deleted | 
 | 	sentinel. Fixed to search with double-hashing instead of linear probing. | 
 | 	 | 
 | === Safari-79 === | 
 |  | 
 | 2003-05-15  Maciej Stachowiak  <mjs@apple.com> | 
 |  | 
 |         Reviewed by Chris. | 
 |  | 
 | 	- fixed 3259673 - REGRESSION: marvel.com thinks I don't have the flash plugin any more | 
 |  | 
 |         * kjs/nodes.cpp: | 
 |         (ContinueNode::execute): Return a Continue completion, not a Break | 
 | 	completion, in the normal non-exception case. | 
 |  | 
 | 2003-05-12  Maciej Stachowiak  <mjs@apple.com> | 
 |  | 
 |         Reviewed by Darin. | 
 |  | 
 | 	- fixed 3254484 - Add a way to print JavaScript exceptions to the console via the debug menu | 
 | 	- improved JavaScript error message format | 
 | 	 | 
 |         * kjs/error_object.cpp: | 
 |         (ErrorProtoFuncImp::call): Include line number in toString output. | 
 |         * kjs/internal.cpp: | 
 |         (Parser::parse): Remove redundant fprintf. | 
 |         * kjs/interpreter.cpp: | 
 |         (Interpreter::evaluate): Log if the flag is on. Include filename in log output. | 
 |         (Interpreter::shouldPrintExceptions): Check the global flag. | 
 |         (Interpreter::setShouldPrintExceptions): Set the global flag. | 
 |         * kjs/interpreter.h: | 
 |         * kjs/nodes.cpp: | 
 |         (Node::throwError): Add variants that include value and expression or label in format. | 
 |         (NewExprNode::evaluate): Improve error message. | 
 |         (FunctionCallNode::evaluate): Improve error message. | 
 |         (RelationalNode::evaluate): Improve error message. | 
 |         (ContinueNode::execute): Improve error message. | 
 |         (BreakNode::execute): Improve error message. | 
 |         (LabelNode::execute): Improve error message. | 
 |         * kjs/nodes.h: | 
 |  | 
 | === Safari-78 === | 
 |  | 
 | 2003-05-07  Vicki Murley  <vicki@apple.com> | 
 |  | 
 |         Reviewed by darin. | 
 | 	 | 
 | 	- modify the Mixed build style to build optimized with symbols | 
 |          | 
 | 	* JavaScriptCore.pbproj/project.pbxproj:  removed OPTIMIZATION_CFLAGS | 
 |  | 
 | 2003-05-05  Maciej Stachowiak  <mjs@apple.com> | 
 |  | 
 |         Reviewed by Don. | 
 |  | 
 | 	- fixed 3239961 - www.phiffer.com doesn't work; uses "var top; top = n;" | 
 | 	 | 
 |         * kjs/nodes.cpp: | 
 |         (VarDeclNode::evaluate): Check if the property exists with | 
 | 	getDirect() instead of hasProperty(). | 
 |  | 
 | === Safari-77 === | 
 |  | 
 | 2003-04-29  Darin Adler  <darin@apple.com> | 
 |  | 
 |         Reviewed by John. | 
 |  | 
 | 	- fixed 2959353 -- eliminate globally initialized objects from JavaScriptCore | 
 |  | 
 |         * JavaScriptCore.pbproj/project.pbxproj: Added fpconst.cpp. | 
 |         * kjs/fpconst.cpp: Added. Defines KJS::NaN and KJS::Inf in a way that does not require a | 
 |         framework init routine. | 
 |  | 
 |         * kjs/identifier.h: Use a new KJS_IDENTIFIER_EACH_GLOBAL macro so we can do things to | 
 |         the entire set of identifiers easily. Also added an init function that sets up these globals | 
 |         in a way that does not require a framework init routine. | 
 |         * kjs/identifier.cpp: (Identifier::init): Initialize the property ane globals in a way that | 
 |         does not require a framework init routine. | 
 |  | 
 |         * kjs/internal.cpp: (InterpreterImp::initGlobalObject): Call Identifier::init. | 
 |          | 
 |         * kjs/ustring.h: Remove UChar::null and UString::null, and add UString::null(). We can't have | 
 |         a global object of a class that has a constructor if we want to avoid framework init routines, | 
 |         and luckily very little code relies on these. | 
 |         * kjs/ustring.cpp: | 
 |         (UCharReference::ref): Use our own global specific to this function rather than returning | 
 |         UChar::null when past the end of the string. This is dangerous because if the caller modifies | 
 |         it, that affects what all subsequent callers will see. | 
 |         (UString::Rep::create): Added assertions. | 
 |         (UString::UString): Got rid of code here that used to set up UString::null. | 
 |         (UString::null): Added. Returns a global null string, and can be used in some of the places | 
 |         where we used to use the UString::null global. | 
 |         (UString::operator[]): Fixed case where this used to return UChar::null to return '\0' instead. | 
 |  | 
 |         * kjs/regexp.cpp: (RegExp::match): Change uses of UString::null to UString::null(). | 
 |  | 
 | 2003-04-25  Darin Adler  <darin@apple.com> | 
 |  | 
 | 	- fixed 3241344 -- REGRESSION: top of page missing on wired.com and cnn.com | 
 |  | 
 |         Caused by the ResolveNode speedup. Roll it out until I can figure out why. | 
 |  | 
 |         * kjs/nodes.cpp: (ResolveNode::evaluate): Go back to using evaluateReference. | 
 |  | 
 | 2003-04-25  Darin Adler  <darin@apple.com> | 
 |  | 
 |         Reviewed by Maciej. | 
 |  | 
 |         - a couple improvements that give a 6.6% speedup on iBench JavaScript | 
 |  | 
 |         * kjs/nodes.cpp: (ResolveNode::evaluate): Don't use evaluateReference. | 
 |          | 
 |         * kjs/object.cpp: (ObjectImp::get): Do the prototype work with the ValueImp, not a wrapper. | 
 |         Contributes a tiny bit to the speedup, but cleaner anyway. | 
 |         (ObjectImp::hasProperty): Same thing here. | 
 |  | 
 | 2003-04-25  Darin Adler  <darin@apple.com> | 
 |  | 
 |         Reviewed by Maciej. | 
 |  | 
 |         - move from linear probing to double hashing, gives an 0.7% speedup in iBench JavaScript | 
 |  | 
 |         * kjs/property_map.h: Remove the hash function. | 
 |         * kjs/property_map.cpp: Added statistics for rehashes and removes. | 
 |         Moved from linear probing to double hashing, using the hash modulo | 
 |         (table size minus one) plus one for the probing distance. | 
 |  | 
 |         * kjs/ustring.h: Use unsigned instead of int for hash function result. | 
 |  | 
 | === Safari-75 === | 
 |  | 
 | 2003-04-18  Maciej Stachowiak  <mjs@apple.com> | 
 |  | 
 |         Reviewed by Ken. | 
 |  | 
 | 	Improved List pool for 3% speed improvement on cvs-js-ibench | 
 |  | 
 |         * kjs/list.cpp: Replaced the roving cursor with a free list and | 
 | 	raised the high water mark to 384. | 
 |  | 
 | 2003-04-12  Maciej Stachowiak  <mjs@apple.com> | 
 |  | 
 |         Reviewed by Don. | 
 |  | 
 | 	- JavaScriptCore part of fix for 3158769 - JavaScript triggers not as async as they used to be | 
 |  | 
 | 	Added a way to get the current interpreter lock count, so Sherlock | 
 | 	can unlock the interpreter inside JS method implementations that | 
 | 	spend a long time waiting for I/O, allowing more efficient | 
 | 	multi-threaded operation. | 
 |  | 
 |         * kjs/internal.cpp: | 
 |         (lockInterpreter): | 
 |         (unlockInterpreter): | 
 |         (InterpreterImp::lock): | 
 |         (InterpreterImp::lockCount): | 
 |         * kjs/internal.h: | 
 |         * kjs/interpreter.cpp: | 
 |         (Interpreter::lockCount): | 
 |         * kjs/interpreter.h: | 
 |  | 
 | === Safari-73 === | 
 |  | 
 | === Safari-72 === | 
 |  | 
 | === Safari-71 === | 
 |  | 
 | 2003-03-31  Darin Adler  <darin@apple.com> | 
 |  | 
 |         * English.lproj/InfoPlist.strings: Changed "1.0 Beta" to "1.0 Beta 2". | 
 |         * JavaScriptCore.pbproj/project.pbxproj: Changed "1.0 Beta" to "1.0 Beta 2". | 
 |  | 
 | === Safari-69 === | 
 |  | 
 | 2003-03-24  Trey Matteson  <trey@apple.com> | 
 |  | 
 | 	Pass -seg_addr_table_filename <FILENAME> to ld.  This makes our frameworks in | 
 | 	SYMROOT actually work for symbol resolution because they will have the correct | 
 | 	prebinding address.  It also fixes obscure B&I problems with prebinding | 
 | 	reported by Matt Reda. | 
 |  | 
 | 	Note the reason all this is tricky for our projects is that we have a different | 
 | 	install location for Jaguar and Panther.  The purpose of this arg is to declare | 
 | 	at link time our eventual location, which allows the prebinding address to be | 
 | 	found in /AppleInternal/Developer/seg_addr_table.  We use a funky back-tick | 
 | 	expression within OTHER_LDFLAGS to get a conditional value depending on the | 
 | 	build train we are in. | 
 |  | 
 | 	This can all go away once we only build on Panther and don't embed the | 
 | 	frameworks inside the Safari.app wrapper. | 
 |  | 
 |  	In addition I fixed the OTHER_LDFLAGS settings in our build styles to be | 
 | 	additive instead of overriding, so we have the args we used for B&I in force | 
 | 	when building outside of B&I. | 
 |  | 
 | 	Reviewed by Maciej. | 
 |  | 
 |         * JavaScriptCore.pbproj/project.pbxproj: | 
 |  | 
 | === Safari-68 === | 
 |  | 
 | 2003-03-16  Trey Matteson  <trey@apple.com> | 
 |  | 
 | 	3198135 - need to fix our projects so SYMROOT is not stripped | 
 |  | 
 | 	Tweaked stripping options:  B&I build does not COPY_PHASE_STRIP. | 
 | 	Deployment build still does. | 
 | 	We strip manually as part of the install that we do ourselves. | 
 |  | 
 |         Reviewed by Maciej. | 
 |  | 
 |         * JavaScriptCore.pbproj/project.pbxproj: | 
 |  | 
 | === Safari-67 === | 
 |  | 
 | === Safari-66 === | 
 |  | 
 | 2003-03-10  Darin Adler  <darin@apple.com> | 
 |  | 
 |         Reviewed by Ken. | 
 |  | 
 | 	- fixed 3193099 -- date parsing can't handle the time zone format that date formatting produces | 
 |  | 
 |         * kjs/date_object.cpp: (KJS::KRFCDate_parseDate): Allow a "GMT" prefix before the time zone offset. | 
 |  | 
 | === Safari-65 === | 
 |  | 
 | 2003-03-04  Darin Adler  <darin@apple.com> | 
 |  | 
 |         Reviewed by Maciej. | 
 |  | 
 |         - got rid of some framework initialization (working on bug 2959353) | 
 |  | 
 |         * kjs/identifier.h: Turn Identifier:null into Identifier:null(). | 
 |         * kjs/identifier.cpp: Removed Identifier:null and added Identifier:null(). | 
 |  | 
 |         * kjs/internal.cpp: Made NaN_Bytes and Inf_Bytes const. | 
 |  | 
 |         * kjs/completion.h: Use Identifier:null() instead of Identifier:null. | 
 |         * kjs/function.h: Ditto. | 
 |         * kjs/function_object.cpp: (FunctionObjectImp::construct): Ditto. | 
 |         * kjs/nodes.cpp: (FuncExprNode::evaluate): Use Identifier:null() instead of Identifier:null. | 
 |  | 
 | 2003-03-02  Maciej Stachowiak  <mjs@apple.com> | 
 |  | 
 |         Reviewed by Trey. | 
 |  | 
 | 	- fixed 3158833 - ebay prefs page is so slow, it seems like a hang. | 
 |  | 
 | 	92% speed improvement on ebay prefs page. | 
 | 	1% speed improvement on js-ibench and js-performance plt suites. | 
 | 	 | 
 | 	There were a couple of problems with the identifier hash table that | 
 | 	I fixed: | 
 | 	 | 
 |         * kjs/identifier.cpp: | 
 | 	(void Identifier::remove): Adjust the shrink threshold to avoid | 
 | 	constantly growing and shrinking. | 
 |         * kjs/ustring.cpp: | 
 |         (UString::Rep::computeHash): Use a better hash function that | 
 | 	avoids collisions for obvious data sets. | 
 |  | 
 | === Safari-64 === | 
 |  | 
 | === Safari-63 === | 
 |  | 
 | 2003-02-26  Maciej Stachowiak  <mjs@apple.com> | 
 |  | 
 |         Reviewed by Darin. | 
 |  | 
 | 	- fixed 3156705 - REGRESSION: javascript menus improperly placed at umich.edu store | 
 |  | 
 |         * kjs/nodes.cpp: | 
 |         (StatListNode::execute): If the first statement's completion is | 
 | 	not normal, return immediately. | 
 |  | 
 | 2003-02-21  Darin Adler  <darin@apple.com> | 
 |  | 
 |         Reviewed by Maciej. | 
 |  | 
 |         - fixed 3142355 -- nil-deref in CFTimeZoneCopyAbbreviation | 
 |  | 
 |         The real problem wasn't with the current time zone, but with the UTC time zone. | 
 |         The poor sod had a broken /usr/share/zoneinfo directory, with a 0-byte-long UTC file. | 
 |  | 
 |         * kjs/date_object.cpp: (UTCTimeZone): Use CFTimeZoneCreateWithTimeIntervalFromGMT(NULL, 0.0) | 
 |         to get the universal time zone instead of getting it by name. | 
 |  | 
 | === Safari-62 === | 
 |  | 
 | 2003-02-18  Darin Adler  <darin@apple.com> | 
 |  | 
 |         Reviewed by Trey and Ken. | 
 |  | 
 |         - fixed 3142355 -- nil-deref in CFTimeZoneCopyAbbreviation | 
 |  | 
 |         Although I can't reproduce this bug, it seems that it's caused by CFTimeZoneCopyDefault returning NULL. | 
 |         I'm almost certain that the UTC time zone will be created successfully in this case, so I'll just use that. | 
 |  | 
 |         * kjs/date_object.cpp: | 
 |         (UTCTimeZone): Added. Gets the UTC time zone (once in a global). | 
 |         (CopyLocalTimeZone): Added. Gets the local time zone, but falls back to UTC. | 
 |         (gmtimeUsingCF): Use UTCTimeZone. | 
 |         (localtimeUsingCF): Use CopyLocalTimeZone. | 
 |         (mktimeUsingCF): Use CopyLocalTimeZone. | 
 |         (timegmUsingCF): Use UTCTimeZone. | 
 |  | 
 | 2003-02-12  Darin Adler  <darin@apple.com> | 
 |  | 
 |         Reviewed by Dave. | 
 |  | 
 |         - fixed 3145442 -- toString(16) is not working, causing non-ASCII characters in mac.com homepage to be munged | 
 |  | 
 |         * kjs/number_object.cpp: (NumberProtoFuncImp::call): Add handling for toString with a radix other than | 
 |         10 passed as an argument. | 
 |  | 
 | 2003-02-11  Trey Matteson  <trey@apple.com> | 
 |  | 
 | 	Set -seg1addr in our build styles, but not for the B&I build. | 
 | 	This makes our SYMROOTS from B&I usable to determine symbols from crash | 
 | 	logs from the field. | 
 | 	Also nuked DeploymentFat build style. | 
 |  | 
 |         Reviewed by Ken. | 
 |  | 
 |         * JavaScriptCore.pbproj/project.pbxproj: | 
 |  | 
 | 2003-02-04  Maciej Stachowiak  <mjs@apple.com> | 
 |  | 
 |         Reviewed by Darin. | 
 |  | 
 |         * JavaScriptCore.pbproj/project.pbxproj: Updated to build the framework | 
 | 	standalone instead of embedded when doing a B&I build for Panther. | 
 |  | 
 | === Safari-55 === | 
 |  | 
 | 2003-01-29  Darin Adler  <darin@apple.com> | 
 |  | 
 |         Reviewed by John. | 
 |  | 
 |         * kjs/scope_chain.cpp: Rolled out the fix to bug 3137084. | 
 |         It caused a massive storage leak, and probably didn't even fix the bug. | 
 |  | 
 | 2003-01-28  Darin Adler  <darin@apple.com> | 
 |  | 
 |         Reviewed by Ken. | 
 |  | 
 | 	- fixed 3157318 -- hang at time zone page after clicking on map at www.time.gov | 
 |  | 
 |         * kjs/date_object.cpp: (KJS::KRFCDate_parseDate): Allow a comma after the day. | 
 |         Given how this code is structured, it allows commas in unwanted contexts too, but | 
 |         that's almost certainly harmless. | 
 |  | 
 | 2003-01-28  Darin Adler  <darin@apple.com> | 
 |  | 
 |         Reviewed by Maciej. | 
 |  | 
 |         - fixed 3144918 -- Can't drill down multiple levels of categories when selling on ebay | 
 |         if first item in list is chosen | 
 |          | 
 |         The bug was caused by having array values in the property map past the storageLength cutoff | 
 |         in an array object; those values would not be seen when you do a get. | 
 |  | 
 |         * kjs/array_object.cpp: | 
 |         (ArrayInstanceImp::put): Implement a new rule for resizing the storage that is independent | 
 |         of the length. The old rule would sometimes make the storage very big if you added two elements | 
 |         in a row that both had large, but consecutive indexes. This eliminates any cases where we | 
 |         make sparse entries in the property map below the sparse array cutoff. | 
 |         (ArrayInstanceImp::resizeStorage): Don't ever make storage size bigger than the cutoff unless | 
 |         the caller specifically requests it. | 
 |         (ArrayInstanceImp::setLength): Change this so it only makes the storage smaller, never larger. | 
 |         We will actually enlarge the storage when putting elements in. | 
 |  | 
 | 2003-01-25  Darin Adler  <darin@apple.com> | 
 |  | 
 |         Reviewed by Maciej. | 
 |  | 
 |         * kjs/Makefile.am: Add dependencies so the .lut.h files get rebuilt if the script changes. | 
 |  | 
 | === Safari-54 === | 
 |  | 
 | 2003-01-22  Darin Adler  <darin@apple.com> | 
 |  | 
 |         Reviewed by Maciej. | 
 |  | 
 | 	- fixed 3137084 -- Many non-reproducible crashers in ContextImp::mark / ScopeChain::mark | 
 |  | 
 |         * kjs/scope_chain.cpp: (ScopeChain::push): Add assertion. | 
 |         (ScopeChain::release): Fix while loop so that it decrements refCount of the first node in | 
 |         the chain too. | 
 |  | 
 | 2003-01-21  Darin Adler  <darin@apple.com> | 
 |  | 
 |         - correct our copyrights to 2003; copyright is based on year of publication, not year worked on | 
 |  | 
 | 2003-01-16  Maciej Stachowiak  <mjs@apple.com> | 
 |  | 
 |         Reviewed by Darin. | 
 |  | 
 | 	- made minor tweaks to work better with Mozilla's JavaScript tests. | 
 |  | 
 |         * kjs/testkjs.cpp: | 
 |         (VersionFunctionImp::call): Implemented  | 
 |         (main): Ignore files named -f (hack to match -f <filename syntax | 
 | 	that moz JavaScript tests expect). Also use return code 3 instead | 
 | 	of 1 for uncaught exception. | 
 |  | 
 | 2003-01-16  Darin Adler  <darin@apple.com> | 
 |  | 
 |         * kjs/number_object.cpp: (NumberObjectImp::construct): | 
 | 	Fix build, remove stray space. | 
 |  | 
 | 2003-01-16  Darin Adler  <darin@apple.com> | 
 |  | 
 |         Reviewed by Maciej. | 
 |  | 
 | 	- rolled in a change from the KJS folks | 
 |  | 
 |         * kjs/number_object.h: Use ObjectImp *, not Object, for the proto. | 
 |         * kjs/number_object.cpp: | 
 |         (NumberInstanceImp::NumberInstanceImp): Use ObjectImp *, not Object, for the proto. | 
 |         (NumberPrototypeImp::NumberPrototypeImp): Pass ObjectImp. | 
 |         (NumberObjectImp::construct): Use ObjectImp. | 
 |  | 
 | === Safari-52 === | 
 |  | 
 | 2003-01-14  Darin Adler  <darin@apple.com> | 
 |  | 
 |         Reviewed by Ken. | 
 |  | 
 | 	- rolled in a change from the KJS folks | 
 |  | 
 | 	Fixes a bug where the date functions would not accept non-strings. | 
 | 	And provides a bit of a speedup. | 
 |  | 
 |         * kjs/date_object.h: Change parameter type for parseDate. | 
 |         * kjs/date_object.cpp: | 
 |         (DateObjectFuncImp::call): Always call toString, don't check the type. | 
 |         (KJS::parseDate): Take a UString parameter, not a String parameter. | 
 |  | 
 | 2003-01-13  Darin Adler  <darin@apple.com> | 
 |  | 
 |         * kjs/ustring.h: Fix spelling of occurrence. | 
 |  | 
 | 2003-01-12  Darin Adler  <darin@apple.com> | 
 |  | 
 |         Reviewed by Maciej. | 
 |  | 
 | 	- turned more recursion into iteration, and fixed some backwards stuff | 
 |  | 
 |         * kjs/grammar.y: Use the normal idiom for CaseClauses and FormalParameterList | 
 | 	rather than using append(). | 
 |         * kjs/grammar.cpp: Regenerated. | 
 |  | 
 |         * kjs/nodes.h: Change ClauseListNode and ParameterNode to use the normal idiom, | 
 | 	and got rid of append methods. Also added friend declarations and calls to reverseList(). | 
 |         * kjs/nodes.cpp: | 
 |         (StatListNode::ref): Iteration, not recursion. | 
 |         (StatListNode::deref): Iteration, not recursion. | 
 |         (StatListNode::execute): Iteration, not recursion. | 
 |         (StatListNode::processVarDecls): Iteration, not recursion. | 
 |         (CaseClauseNode::reverseList): Added. | 
 |         (ClauseListNode::ref): Iteration, not recursion. | 
 |         (ClauseListNode::deref): Iteration, not recursion. | 
 |         (ClauseListNode::processVarDecls): Iteration, not recursion. | 
 |         (CaseBlockNode::reverseLists): Added. | 
 |         (ParameterNode::ref): Iteration, not recursion. | 
 |         (ParameterNode::deref): Iteration, not recursion. | 
 |         (FuncDeclNode::reverseParameterList): Added. | 
 |         (FuncExprNode::reverseParameterList): Added. | 
 |         (SourceElementsNode::ref): Iteration, not recursion. | 
 |         (SourceElementsNode::deref): Iteration, not recursion. | 
 |         (SourceElementsNode::execute): Use variable name of n to match other functions. | 
 |         (SourceElementsNode::processFuncDecl): Ditto. | 
 |         (SourceElementsNode::processVarDecls): Ditto. | 
 |  | 
 |         * kjs/nodes2string.cpp: | 
 |         (SourceStream::operator<<): Used a switch statement for a bit of added clarity. | 
 |         (ElementNode::streamTo): Iteration, not recursion. | 
 |         (PropertyValueNode::streamTo): Iteration, not recursion. | 
 |         (ArgumentListNode::streamTo): Iteration, not recursion. | 
 |         (StatListNode::streamTo): Iteration, not recursion, and fixed order. | 
 |         (VarDeclListNode::streamTo): Iteration, not recursion. | 
 |         (ClauseListNode::streamTo): Used for statement to match other functions. | 
 |         (CaseBlockNode::streamTo): Used for statement to match other functions. | 
 |         (ParameterNode::streamTo): Iteration, not recursion. | 
 |         (SourceElementsNode::streamTo): Iteration, not recursion, and fixed order that has been | 
 | 	backwards since I changed how this works in nodes.cpp. | 
 |  | 
 | 2003-01-11  Darin Adler  <darin@apple.com> | 
 |  | 
 |         Reviewed by John. | 
 |  | 
 | 	- changes inspired by things I noticed reviewing diffs vs. KDE when preparing the tarball | 
 |  | 
 |         * kjs/function.cpp: (GlobalFuncImp::call): Use strtol when strtoll is | 
 | 	not available. Do #ifndef NDEBUG, not #if !NDEBUG. | 
 |         * kjs/function.h: Do #ifndef NDEBUG, not #if !NDEBUG. | 
 |         * kjs/internal.cpp: | 
 |         (InterpreterImp::initGlobalObject): Do #ifndef NDEBUG, not #if !NDEBUG. | 
 |         (KJS::printInfo): Remove case for ListType and remove default case that just | 
 | 	ends up suppressing the "missing case" warning and does no good. | 
 |         * kjs/interpreter.cpp: (Interpreter::evaluate): Do #ifndef NDEBUG, not #if !NDEBUG. | 
 |         * kjs/nodes.cpp: | 
 |         (Node::finalCheck): Fix accidentally-deleted code in an ifdef we never compile. | 
 |         (FunctionCallNode::evaluate): Remove bogus XXX comment. Maciej put this comment in, | 
 |         and together we determined it's not needed. | 
 |         (TypeOfNode::evaluate): Ditto. | 
 |         * kjs/object.cpp: Remove assert that refers to ListType. | 
 |         * kjs/value.h: Remove ListType. | 
 |  | 
 | 2003-01-09  Darin Adler  <darin@apple.com> | 
 |  | 
 |         * JavaScriptCore.pbproj/project.pbxproj: Add the year 2003, remove CFBundleIconFile, | 
 | 	bump marketing version to 0.8.1 and version to 52u to keep up with the branch, | 
 | 	remove CFHumanReadableCopyright, remove NSPrincipalClass. | 
 |  | 
 |         * English.lproj/InfoPlist.strings: Updated to match above changes. | 
 |  | 
 | 2003-01-05  Maciej Stachowiak  <mjs@apple.com> | 
 |  | 
 |         Reviewed by no one cause I'm just changing copyright strings. | 
 |  | 
 |         * JavaScriptCore.pbproj/project.pbxproj: Added non-Apple copyrights to | 
 | 	copyright strings. | 
 |         * English.lproj/InfoPlist.strings: Likewise. | 
 |  | 
 | 2003-01-05  Darin Adler  <darin@apple.com> | 
 |  | 
 |         * JavaScriptCore.pbproj/project.pbxproj: Fix "Apple Compupter" typo. | 
 | 	Remove unneeded CFBundleLongVersionString we don't use anywhere else. | 
 |  | 
 | 2003-01-02  Darin Adler  <darin@apple.com> | 
 |  | 
 |         Reviewed by Maciej. | 
 |  | 
 | 	- fixed 3138213 -- browser hangs trying to open Apple travel site | 
 |  | 
 |         * kjs/date_object.cpp: (timetUsingCF): Check for very-negative year numbers too. | 
 |  | 
 | === Alexander-48 === | 
 |  | 
 | === Alexander-47 === | 
 |  | 
 | 2002-12-30  Darin Adler  <darin@apple.com> | 
 |  | 
 |         Reviewed by Don and Maciej. | 
 |  | 
 | 	- follow-on to my fix for 3134693 that fixes one more case of recursion and simplifies further | 
 |  | 
 |         * kjs/grammar.y: Remove SourceElementNode and just use a StatementNode instead. | 
 | 	Reverse SourceElements rule so the recursive rule comes first as in the original | 
 | 	KJS code (avoids actual parser recursion). | 
 |  | 
 |         * kjs/grammar.cpp: Regenerated. | 
 |         * kjs/grammar.cpp.h: Regenerated. | 
 |         * kjs/grammar.h: Regenerated. | 
 |  | 
 |         * kjs/nodes.h: Make processFuncDecl a virtual function in StatementNode so that we can | 
 | 	use a StatementNode instead of a SourceElementNode. Add a call to reverseList in BlockNode | 
 | 	to correct the order of the linked list in SourceElementsNode, to replace the technique | 
 | 	where we reversed it in the parser. Remove SourceElementNode class, and make the element in | 
 | 	SourceElementsNode be a StatementNode instead. | 
 |         * kjs/nodes.cpp: Remove SourceElementNode code. | 
 |         (StatementNode::processFuncDecl): Added empty function. | 
 |         (BlockNode::reverseList): Added. Used to make the SourceElements list ordered correctly. | 
 |         * kjs/nodes2string.cpp: Remove SourceElementNode code. | 
 |  | 
 | === Alexander-46 === | 
 |  | 
 | 2002-12-28  Darin Adler  <darin@apple.com> | 
 |  | 
 |         Reviewed by Gramps and Ken. | 
 | 	Checked in by Ken. | 
 |  | 
 | 	- fixed 3134693 -- carsdirect.com crash on used car search, due to large JavaScript array | 
 |  | 
 | 	The parser was using recursion to handle many types of lists. | 
 | 	This meant that we crashed out of stack space when any of the lists were extra big. | 
 | 	I applied the same sort of fix we had already applied a while back for argument lists for | 
 | 	all the other types of lists, including the list of ElementNode that was the reason for | 
 | 	the crash reported here. | 
 |  | 
 |         * kjs/grammar.y: Removed ElisionNode altogether and just use a count. | 
 | 	Use specific node types for PropertyNameAndValueList and PropertyName. | 
 |  | 
 |         * kjs/grammar.cpp: Regenerated. | 
 |         * kjs/grammar.cpp.h: Regenerated. | 
 |         * kjs/grammar.h: Regenerated. | 
 |  | 
 |         * kjs/nodes.h: Elide "ElisionNode", changing objects to keep elision counts instead. | 
 | 	Make the ObjectLiteralNode list field be PropertyValueNode, not just Node. | 
 | 	Make PropertyValueNode fields have specific types. Add new reverse list functions, calls | 
 | 	to those functions in the constructors, and friend declarations as needed so the class | 
 | 	that holds the head of a list can reverse the list during parsing. | 
 |         * kjs/nodes.cpp: | 
 |         (ElementNode::ref): Use iteration instead of recursion. Also elide "elision". | 
 |         (ElementNode::deref): Ditto. | 
 |         (ElementNode::evaluate): Use iteration instead of recursion, taking advantage of | 
 | 	the fact that the linked list is reversed. Also use the elision count rather than | 
 | 	an elision list. | 
 |         (ArrayNode::reverseElementList): Reverse the list so we can iterate normally. | 
 |         (ArrayNode::ref): Elide "elision". | 
 |         (ArrayNode::deref): Ditto. | 
 |         (ArrayNode::evaluate): Use elision count instead of elision list. | 
 |         (ObjectLiteralNode::reverseList): Reverse the list so we can iterate normally. | 
 |         (PropertyValueNode::ref): Use iteration instead of recursion. | 
 |         (PropertyValueNode::deref): Use iteration instead of recursion. | 
 |         (PropertyValueNode::evaluate): Use iteration instead of recursion, taking advantage | 
 | 	of the fact that the linked list is reversed. | 
 |         (ArgumentListNode::ref): Change code to match the other similar cases we had to revise. | 
 |         (ArgumentListNode::deref): Ditto. | 
 |         (ArgumentListNode::evaluateList): Ditto. | 
 |         (ArgumentsNode::reverseList): Ditto. | 
 |         (VarDeclListNode::ref): Use iteration instead of recursion. | 
 |         (VarDeclListNode::deref): Ditto. | 
 |         (VarDeclListNode::evaluate): Use iteration instead of recursion, taking advantage | 
 | 	of the fact that the linked list is reversed. | 
 |         (VarDeclListNode::processVarDecls): Ditto. | 
 |         (VarStatementNode::reverseList): Reverse the list so we can iterate normally. | 
 |         (FunctionBodyNode::FunctionBodyNode): Use BlockNode as the base class, removing | 
 | 	most of the FunctionBodyNode class. | 
 |  | 
 |         * kjs/nodes2string.cpp: | 
 |         (ElementNode::streamTo): Update for using a count for elision, and reverse linking. | 
 |         (ArrayNode::streamTo): Update for using a count for elision. | 
 |         (PropertyValueNode::streamTo): Update for reverse linking. | 
 |         (ArgumentListNode::streamTo): Update for reverse linking. This has been wrong for | 
 | 	a while, since we added the reverse a long time ago. | 
 |         (VarDeclListNode::streamTo): Update for reverse linking. | 
 |         (ParameterNode::streamTo): Update for reverse linking. | 
 |  | 
 | === Alexander-45 === | 
 |  | 
 | 2002-12-22  Darin Adler  <darin@apple.com> | 
 |  | 
 |         Reviewed by Don and John. | 
 |  | 
 | 	- fixed 3134449 -- Date.UTC returns NaN (invalid date) | 
 |  | 
 | 	Did more testing of the date functions and made them behave like the other browsers. | 
 | 	There were three problems: | 
 |  | 
 |             1) We did a validity check that other browsers don't do (hence the NaN). | 
 |             2) We treated passed-in dates as local time even in Date.UTC (hence a wrong result | 
 |                once I fixed the NaN). | 
 |             3) The results of ToUTCString (and ToGMTString) weren't formatted quite the same | 
 | 	       as other browsers. | 
 |  | 
 | 	Also found a couple of silly but unrelated coding mistakes. | 
 |  | 
 |         * kjs/date_object.cpp: | 
 |         (timetUsingCF): Added. Has the guts of mktimeUsingCF, but without the CFGregorianDateIsValid | 
 |         check. Other browsers accept invalid dates. Also takes a time zone parameter. | 
 |         (mktimeUsingCF): Calls timetUsingCF with the current time zone. | 
 |         (timegmUsingCF): Calls timetUsingCF with the UTC time zone. | 
 |         (formatDate): Remove the includeComma flag. | 
 |         (formatDateUTCVariant): Added. For use instead of formatDate with the includeComma flag. | 
 | 	Puts the day before the month name. | 
 |         (DateProtoFuncImp::call): Use the new formatDateUTCVariant for ToGMTString and ToUTCString. | 
 | 	Without this change the date didn't match other browsers. | 
 |         (DateObjectImp::DateObjectImp): Use UTCPropertyName. Somehow I declared this and didn't use | 
 | 	it before. | 
 |         (DateObjectImp::construct): Pass -1 for is_dst literally instead of using invalidDate. | 
 | 	Changing this to invalidDate was just a mistake (although no real difference in compiled | 
 | 	code since invalidDate is just -1). | 
 |         (DateObjectFuncImp::call): Call timegm for the UTC case instead of mktime. | 
 |  | 
 | === Alexander-44 === | 
 |  | 
 | === Alexander-43 === | 
 |  | 
 | 2002-12-20  Trey Matteson  <trey@apple.com> | 
 |  | 
 | 	We now build with symbols the B&I.  Deployment builds are without symbols, | 
 | 	so it is easy to generate a non-huge app as a one-off. | 
 |  | 
 |         Reviewed by Darin | 
 |  | 
 |         * JavaScriptCore.pbproj/project.pbxproj: | 
 |  | 
 | === Alexander-42 === | 
 |  | 
 | === Alexander-41 === | 
 |  | 
 | === Alexander-40 === | 
 |  | 
 | 2002-12-18  Maciej Stachowiak  <mjs@apple.com> | 
 |  | 
 | 	Reviewed by John. | 
 |  | 
 | 	- fixed 3131171 - Change Alex versions to satisfy both marketing and B&I requirements | 
 | 	 | 
 |         * English.lproj/InfoPlist.strings: | 
 |         * JavaScriptCore.pbproj/project.pbxproj: | 
 |  | 
 | 2002-12-17  Darin Adler  <darin@apple.com> | 
 |  | 
 |         Reviewed by Trey. | 
 |  | 
 |         * JavaScriptCore.pbproj/project.pbxproj: Removed signature. | 
 |  | 
 | === Alexander-39 === | 
 |  | 
 | === Alexander-38 === | 
 |  | 
 | 2002-12-16  Darin Adler  <darin@apple.com> | 
 |  | 
 |         Reviewed by Don and Maciej. | 
 |  | 
 | 	- fixed 3129115 -- need Apple copyright added to open source documents | 
 |  | 
 | 	* tons of files: Added our copyright to files we modified, and updated all to standard format. | 
 |  | 
 | 	- other changes | 
 |  | 
 |         * JavaScriptCore.pbproj/project.pbxproj: Set MACOSX_DEPLOYMENT_TARGET to 10.2. | 
 | 	Also removed completion.cpp. | 
 |         * kjs/completion.cpp: Removed. | 
 |         * kjs/completion.h: Made the Completion constructor inline. | 
 |  | 
 |         * kjs/grammar.y: Removed an obsolete "pretend ifdef". No need to put these in APPLE_CHANGES now. | 
 |  | 
 | === Alexander-37 === | 
 |  | 
 | === JavaScriptCore-37u2 === | 
 |  | 
 | 2002-12-15  Maciej Stachowiak  <mjs@apple.com> | 
 |  | 
 |         Reviewed by Darin. | 
 |  | 
 |         * JavaScriptCore.pbproj/project.pbxproj: Bump version to 37u2. | 
 |  | 
 | 2002-12-14  Darin Adler  <darin@apple.com> | 
 |  | 
 |         Reviewed by Maciej. | 
 |  | 
 |         * JavaScriptCore.pbproj/project.pbxproj: Make dtoa.h visible as an SPI so I can | 
 | 	use it inside QString. | 
 |  | 
 | 2002-12-14  Maciej Stachowiak  <mjs@apple.com> | 
 |  | 
 |         Reviewed by Ken. | 
 |  | 
 | 	- further corrections to number printing. | 
 |  | 
 |         * kjs/ustring.cpp: | 
 |         (UString::from): Make number printing match the ECMA standard | 
 | 	algorithm. | 
 |  | 
 | 2002-12-14  Maciej Stachowiak  <mjs@apple.com> | 
 |  | 
 |         Reviewed by Dave. | 
 |  | 
 | 	- fix toString() conversion for numbers less than 1. Negative | 
 | 	exponents are still wrong though (things like 1E-34). | 
 |   | 
 |         * kjs/ustring.cpp: | 
 | 	(UString::from): Don't print empty string for numbers less than 1, | 
 | 	and remember to add extra 0s after the decimal for negative | 
 | 	decimal positions. | 
 | 	 | 
 | === Alexander-37u1 === | 
 |  | 
 | === Alexander-36 === | 
 |  | 
 | 2002-12-12  Maciej Stachowiak  <mjs@apple.com> | 
 |  | 
 |         Reviewed by Darin. | 
 |  | 
 | 	- fixed 3056449 - can't select state at tucows.com | 
 |  | 
 |         * kjs/array_instance.h: | 
 |         * kjs/array_object.cpp: | 
 | 	(ArrayInstanceImp::propList): Add numeric proprties that are in | 
 | 	special storage. | 
 |         * kjs/array_object.h: | 
 |         * kjs/object.h: Make propList a virtual method. | 
 |  | 
 | 2002-12-11  Maciej Stachowiak  <mjs@apple.com> | 
 |  | 
 |         Reviewed by Don. | 
 |  | 
 | 	- Add kjsprint global function in Development build for ease of	debugging. | 
 | 	- Print uncaught JavaScript exceptions to the console in Development. | 
 | 	- Improve wording of exception error messages. | 
 | 	 | 
 |         * kjs/function.cpp: | 
 |         (GlobalFuncImp::call): | 
 |         * kjs/function.h: | 
 |         * kjs/internal.cpp: | 
 |         (InterpreterImp::initGlobalObject): | 
 |         * kjs/interpreter.cpp: | 
 |         (Interpreter::evaluate): | 
 |         * kjs/nodes.cpp: | 
 |         (NewExprNode::evaluate): | 
 |         (FunctionCallNode::evaluate): | 
 |         (RelationalNode::evaluate): | 
 |  | 
 | 2002-12-10  John Sullivan  <sullivan@apple.com> | 
 |  | 
 | 	Fixed more "Alexander"s that were lurking in places I forgot  | 
 | 	to look before. | 
 |  | 
 |         Reviewed by Darin | 
 |  | 
 |         * Makefile.am: | 
 | 	"rm -rf $(SYMROOTS)/Safari.app/Frameworks/JavaScriptCore.framework" | 
 |  | 
 | 2002-12-09  Darin Adler  <darin@apple.com> | 
 |  | 
 |         Reviewed by Maciej. | 
 |  | 
 |         * JavaScriptCore.pbproj/project.pbxproj: Bump versions to 0.8 and 35u. | 
 | 	* English.lproj/InfoPlist.strings: In here too. | 
 |  | 
 | 2002-12-09  Maciej Stachowiak  <mjs@apple.com> | 
 |  | 
 |         Reviewed by Ken. | 
 |  | 
 | 	- fixed 3059637 - all articles missing at excite.com sports page | 
 | 	- fixed 3065903 - most of content missing at excite.com news page | 
 |  | 
 | 	These bugs both came up because a JavaScript function has a var | 
 | 	declaration that collides with a function parameter name. | 
 | 	 | 
 |         * kjs/nodes.cpp: | 
 |         (VarDeclNode::processVarDecls): Don't set the property to | 
 | 	undefined if a property with that name is already set on the | 
 | 	global object. Otherwise we may clobber function parameters with | 
 | 	undefined even before hitting a possible var initializer. | 
 |  | 
 | 2002-12-06  Maciej Stachowiak  <mjs@apple.com> | 
 |  | 
 |         Reviewed by: Darin Adler | 
 |  | 
 | 	- made framework embedding work correctly with buildit | 
 |  | 
 |         * JavaScriptCore.pbproj/project.pbxproj: Give framework a relative | 
 | 	install path, don't install it the normal way, and copy it | 
 | 	manually to /AppleInternal/Library/Frameworks if installing. | 
 |  | 
 | === Alexander-35 === | 
 |  | 
 | 2002-12-04  Maciej Stachowiak  <mjs@apple.com> | 
 |  | 
 |         Reviewed by: Richard Williamson | 
 |  | 
 | 	Added explicit lock/unlock methods so Sherlock can grab the | 
 | 	interpreter lock as needed. | 
 | 	 | 
 | 	- partially addressed 3084320 - JavaScriptCore crash | 
 | 	 | 
 |         * kjs/internal.cpp: | 
 |         (InterpreterImp::InterpreterImp): | 
 |         (InterpreterImp::lock): | 
 |         (InterpreterImp::unlock): | 
 |         * kjs/internal.h: | 
 |         * kjs/interpreter.cpp: | 
 |         (Interpreter::lock): | 
 |         (Interpreter::unlock): | 
 |         * kjs/interpreter.h: | 
 |  | 
 | 2002-12-04  Maciej Stachowiak  <mjs@apple.com> | 
 |  | 
 |         Reviewed by: Darin Adler | 
 |  | 
 | 	Set things up so JavaScriptCore builds in PCRE and uses it for | 
 | 	regular expressions. This fixes many form validation bugs: | 
 |  | 
 | 	- fixed 3103197 - javascript at fidelity.com rejects valid input | 
 | 	- fixed 2942552 - form validation at weather.com fails | 
 | 	- fixed 3079752 - js always reports textarea is empty | 
 | 	- fixed 3079719 - covad.com "check availalbility" fails | 
 | 	 | 
 |         * Makefile.am: Add pcre subdir. | 
 |         * kjs/config.h: define HAVE_PCREPOSIX to true. | 
 | 	* kjs/regexp.h: Don't include pcreposix.h since nothing from there | 
 | 	is used. | 
 | 	* pcre/.cvsignore: Added. | 
 |         * pcre/ChangeLog: Removed. | 
 |         * pcre/INSTALL: Removed. | 
 |         * pcre/Makefile.am: Added. | 
 |         * pcre/Makefile.in: Removed. | 
 |         * pcre/NEWS: Removed. | 
 |         * pcre/NON-UNIX-USE: Removed. | 
 |         * pcre/README: Removed. | 
 |         * pcre/chartables.c: Added. | 
 |         * pcre/config.guess: Removed. | 
 |         * pcre/config.in: Removed. | 
 |         * pcre/config.sub: Removed. | 
 |         * pcre/configure: Removed. | 
 |         * pcre/configure.in: Removed. | 
 |         * pcre/dll.mk: Removed. | 
 |         * pcre/doc/Tech.Notes: Removed. | 
 |         * pcre/doc/pcre.3: Removed. | 
 |         * pcre/doc/pcre.html: Removed. | 
 |         * pcre/doc/pcre.txt: Removed. | 
 |         * pcre/doc/pcregrep.1: Removed. | 
 |         * pcre/doc/pcregrep.html: Removed. | 
 |         * pcre/doc/pcregrep.txt: Removed. | 
 |         * pcre/doc/pcreposix.3: Removed. | 
 |         * pcre/doc/pcreposix.html: Removed. | 
 |         * pcre/doc/pcreposix.txt: Removed. | 
 |         * pcre/doc/pcretest.1: Removed. | 
 |         * pcre/doc/pcretest.html: Removed. | 
 |         * pcre/doc/pcretest.txt: Removed. | 
 |         * pcre/doc/perltest.txt: Removed. | 
 |         * pcre/install-sh: Removed. | 
 |         * pcre/ltmain.sh: Removed. | 
 |         * pcre/pcre-config.h: Added. | 
 |         * pcre/pcre-config.in: Removed. | 
 |         * pcre/internal.h: Include pcre-config.h instead of config.h | 
 |         * pcre/pcre.c: | 
 |         (ord2utf8): Fix warnings. | 
 |         (pcre_compile): Fix warnings. | 
 |         * pcre/pcre.def: Removed. | 
 |         * pcre/pcre.h: Added. | 
 |         * pcre/pcre.in: Removed. | 
 |         * JavaScriptCore.pbproj/project.pbxproj: Added pcre files to build. | 
 |         * JavaScriptCorePrefix.h: Guard c++ headers with #ifdef __cplusplus. | 
 |  | 
 | 2002-12-04  Maciej Stachowiak  <mjs@apple.com> | 
 |  | 
 |         Reviewed by: Richard Williamson | 
 |  | 
 |         * pcre/doc/*: Added. | 
 |         * pcre/testdata/*: Added. | 
 |  | 
 | 2002-12-03  Maciej Stachowiak  <mjs@apple.com> | 
 |  | 
 |         Reviewed by: Darin Adler | 
 |  | 
 | 	- imported PCRE 3.9 into the tree; this isn't actually compiled or | 
 | 	used yet. | 
 |  | 
 |         * pcre/*: Added. | 
 |  | 
 | == Rolled over to ChangeLog-2002-12-03 == |