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 ==
