04a5414f695104a1669a28516490d52498033edb
[WebKit-https.git] / JavaScriptCore / ChangeLog
1 2007-12-28  Eric Seidel  <eric@webkit.org>
2
3         Reviewed by Oliver.
4
5         ASSERT when debugging via Drosera due to missed var lookup optimization.
6         http://bugs.webkit.org/show_bug.cgi?id=16634
7         
8         No test case possible.
9
10         * kjs/nodes.cpp:
11         (KJS::BreakpointCheckStatement::optimizeVariableAccess):
12         * kjs/nodes.h:
13
14 2007-12-28  Eric Seidel  <eric@webkit.org>
15
16         Reviewed by Oliver.
17
18         Fix (-0).toFixed() and re-factor a little
19         Fix (-0).toExponential() and printing of trailing 0s in toExponential
20         Fix toPrecision(nan) handling
21         http://bugs.webkit.org/show_bug.cgi?id=16640
22
23         * kjs/number_object.cpp:
24         (KJS::numberToFixed):
25         (KJS::fractionalPartToString):
26         (KJS::numberToExponential):
27         (KJS::numberToPrecision):
28
29 2007-12-28  Eric Seidel  <eric@webkit.org>
30
31         Reviewed by Sam.
32
33         More changes to make number code readable
34
35         * kjs/number_object.cpp:
36         (KJS::integer_part_noexp):
37         (KJS::numberToFixed):
38         (KJS::numberToExponential):
39
40 2007-12-28  Eric Seidel  <eric@webkit.org>
41
42         Reviewed by Sam.
43
44         More small cleanups to toPrecision
45
46         * kjs/number_object.cpp:
47         (KJS::numberToPrecision):
48
49 2007-12-28  Eric Seidel  <eric@webkit.org>
50
51         Reviewed by Sam.
52
53         More small attempts to make number code readable
54
55         * kjs/number_object.cpp:
56         (KJS::exponentialPartToString):
57         (KJS::numberToExponential):
58         (KJS::numberToPrecision):
59
60 2007-12-28  Eric Seidel  <eric@webkit.org>
61
62         Reviewed by Sam.
63
64         Break out callAsFunction implementations into static functions
65
66         * kjs/number_object.cpp:
67         (KJS::numberToString):
68         (KJS::numberToFixed):
69         (KJS::numberToExponential):
70         (KJS::numberToPrecision):
71         (KJS::NumberProtoFunc::callAsFunction):
72
73 2007-12-28  Eric Seidel  <eric@webkit.org>
74
75         Reviewed by Sam.
76
77         Apply wkstyle/astyle and fix placement of *
78
79         * kjs/number_object.cpp:
80         (KJS::):
81         (KJS::NumberInstance::NumberInstance):
82         (KJS::NumberPrototype::NumberPrototype):
83         (KJS::NumberProtoFunc::NumberProtoFunc):
84         (KJS::integer_part_noexp):
85         (KJS::intPow10):
86         (KJS::NumberProtoFunc::callAsFunction):
87         (KJS::NumberObjectImp::NumberObjectImp):
88         (KJS::NumberObjectImp::getOwnPropertySlot):
89         (KJS::NumberObjectImp::getValueProperty):
90         (KJS::NumberObjectImp::implementsConstruct):
91         (KJS::NumberObjectImp::construct):
92         (KJS::NumberObjectImp::callAsFunction):
93         * kjs/object.cpp:
94         (KJS::JSObject::put):
95
96 2007-12-27  Eric Seidel  <eric@webkit.org>
97
98         Reviewed by Sam.
99
100         ASSERT in JavaScriptCore while viewing WICD test case
101         http://bugs.webkit.org/show_bug.cgi?id=16626
102         
103         * kjs/nodes.cpp:
104         (KJS::ForInNode::execute): move KJS_CHECK_EXCEPTION to proper place
105
106 2007-12-26  Jan Michael Alonzo  <jmalonzo@unpluggable.com>
107
108         Reviewed by Alp Toker.
109
110         http://bugs.webkit.org/show_bug.cgi?id=16390
111         Use autotools or GNU make as the build system for the GTK port
112
113         * GNUmakefile.am: Added.
114
115 2007-12-25  Maciej Stachowiak  <mjs@apple.com>
116         
117         Reviewed by Oliver.
118                 
119         - Remove unnecessary redundant check from property setting
120         http://bugs.webkit.org/show_bug.cgi?id=16602
121                 
122         1.3% speedup on SunSpider.
123         
124         * kjs/object.cpp:
125         (KJS::JSObject::put): Don't do canPut check when not needed; let
126         the PropertyMap handle it.        
127         (KJS::JSObject::canPut): Don't check the static property
128         table. lookupPut does that already.
129         
130 2007-12-24  Alp Toker  <alp@atoker.com>
131
132         Fix builds that don't use AllInOneFile.cpp following breakage
133         introduced in r28973.
134
135         * kjs/grammar.y:
136
137 2007-12-24  Maciej Stachowiak  <mjs@apple.com>
138
139         Reviewed by Eric.
140
141         - Optimize variable declarations
142         http://bugs.webkit.org/show_bug.cgi?id=16585
143         
144         3.5% speedup on SunSpider.
145
146         var statements now result in either assignments or empty statements.
147         
148         This allows a couple of optimization opportunities:
149         - No need to branch at runtime to check if there is an initializer
150         - EmptyStatementNodes can be removed entirely (also done in this patch)
151         - Assignment expressions get properly optimized for local variables
152         
153         This patch also includes some code cleanup:
154         - Most of the old VarStatement/VarDecl logic is now only used for const declarations, 
155           thus it is renamed appropriately
156         - AssignExprNode is gone
157         
158         * JavaScriptCore.exp:
159         * kjs/NodeInfo.h:
160         * kjs/grammar.y:
161         * kjs/nodes.cpp:
162         (KJS::SourceElements::append):
163         (KJS::ConstDeclNode::ConstDeclNode):
164         (KJS::ConstDeclNode::optimizeVariableAccess):
165         (KJS::ConstDeclNode::handleSlowCase):
166         (KJS::ConstDeclNode::evaluateSingle):
167         (KJS::ConstDeclNode::evaluate):
168         (KJS::ConstStatementNode::optimizeVariableAccess):
169         (KJS::ConstStatementNode::execute):
170         (KJS::VarStatementNode::optimizeVariableAccess):
171         (KJS::VarStatementNode::execute):
172         (KJS::ForInNode::ForInNode):
173         (KJS::ForInNode::optimizeVariableAccess):
174         (KJS::ForInNode::execute):
175         (KJS::FunctionBodyNode::initializeSymbolTable):
176         (KJS::ProgramNode::initializeSymbolTable):
177         (KJS::FunctionBodyNode::processDeclarations):
178         (KJS::ProgramNode::processDeclarations):
179         (KJS::EvalNode::processDeclarations):
180         * kjs/nodes.h:
181         (KJS::DeclarationStacks::):
182         (KJS::StatementNode::):
183         (KJS::ConstDeclNode::):
184         (KJS::ConstStatementNode::):
185         (KJS::EmptyStatementNode::):
186         (KJS::VarStatementNode::):
187         (KJS::ForNode::):
188         * kjs/nodes2string.cpp:
189         (KJS::ConstDeclNode::streamTo):
190         (KJS::ConstStatementNode::streamTo):
191         (KJS::ScopeNode::streamTo):
192         (KJS::VarStatementNode::streamTo):
193         (KJS::ForNode::streamTo):
194         (KJS::ForInNode::streamTo):
195
196 2007-12-21  Mark Rowe  <mrowe@apple.com>
197
198         Reviewed by Oliver Hunt.
199
200         * JavaScriptCore.exp: Remove unused symbol to prevent a weak external symbol
201         being generated in JavaScriptCore.framework.
202
203 2007-12-21  Darin Adler  <darin@apple.com>
204
205         Requested by Maciej.
206
207         * kjs/nodes.h: Use the new NEVER_INLINE here and eliminate the old
208         KJS_NO_INLINE. We don't want to have two, and we figured it was better
209         to keep the one that's in WTF.
210
211 2007-12-21  Darin Adler  <darin@apple.com>
212
213         Reviewed by Eric.
214
215         - http://bugs.webkit.org/show_bug.cgi?id=16561
216           remove debugger overhead from non-debugged JavaScript execution
217
218         1.022x as fast on SunSpider.
219
220         * JavaScriptCore.exp: Updated.
221
222         * kjs/NodeInfo.h: Renamed SourceElementsStub to SourceElements,
223         since that more accurately describes the role of this object, which
224         is a reference-counted wrapper for a Vector.
225
226         * kjs/Parser.cpp:
227         (KJS::Parser::didFinishParsing): Changed parameter type to SourceElements,
228         and use plain assignment instead of set.
229         * kjs/Parser.h: Changed parameter type of didFinishParsing to a
230         SourceElements. Also changed m_sourceElements; we now use a RefPtr instead
231         of an OwnPtr as well.
232
233         * kjs/grammar.y: Got rid of all the calls to release() on SourceElements.
234         That's now handed inside the constructors for various node types, since we now
235         use vector swapping instead.
236
237         * kjs/nodes.cpp:
238         (KJS::Node::rethrowException): Added NEVER_INLINE, because this was getting inlined
239         and we want exception handling out of the normal code flow.
240         (KJS::SourceElements::append): Moved here from the header. This now handles
241         creating a BreakpointCheckStatement for each statement in the debugger case.
242         That way we can get breakpoint handling without having it in every execute function.
243         (KJS::BreakpointCheckStatement::BreakpointCheckStatement): Added.
244         (KJS::BreakpointCheckStatement::execute): Added. Contains the code that was formerly
245         in the StatementNode::hitStatement function and the KJS_BREAKPOINT macro.
246         (KJS::BreakpointCheckStatement::streamTo): Added.
247         (KJS::ArgumentListNode::evaluateList): Use KJS_CHECKEXCEPTIONVOID since the return
248         type is void.
249         (KJS::VarStatementNode::execute): Removed KJS_BREAKPOINT.
250         (KJS::BlockNode::BlockNode): Changed parameter type to SourceElements.
251         Changed code to use release since the class now contains a vector rather than
252         a vector point.
253         (KJS::BlockNode::optimizeVariableAccess): Updated since member is now a vector
254         rather than a vector pointer.
255         (KJS::BlockNode::execute): Ditto.
256         (KJS::ExprStatementNode::execute): Removed KJS_BREAKPOINT.
257         (KJS::IfNode::execute): Ditto.
258         (KJS::IfElseNode::execute): Ditto.
259         (KJS::DoWhileNode::execute): Ditto.
260         (KJS::WhileNode::execute): Ditto.
261         (KJS::ContinueNode::execute): Ditto.
262         (KJS::BreakNode::execute): Ditto.
263         (KJS::ReturnNode::execute): Ditto.
264         (KJS::WithNode::execute): Ditto.
265         (KJS::CaseClauseNode::optimizeVariableAccess): Updated since member is now a vector
266         rather than a vector pointer.
267         (KJS::CaseClauseNode::executeStatements): Ditto.
268         (KJS::SwitchNode::execute): Removed KJS_BREAKPOINT.
269         (KJS::ThrowNode::execute): Ditto.
270         (KJS::TryNode::execute): Ditto.
271         (KJS::ScopeNode::ScopeNode): Changed parameter type to SourceElements.
272         (KJS::ProgramNode::ProgramNode): Ditto.
273         (KJS::EvalNode::EvalNode): Ditto.
274         (KJS::FunctionBodyNode::FunctionBodyNode): Ditto.
275         (KJS::ScopeNode::optimizeVariableAccess): Updated since member is now a vector
276         rather than a vector pointer.
277
278         * kjs/nodes.h: Removed hitStatement. Renamed SourceElements to StatementVector.
279         Renamed SourceElementsStub to SourceElements and made it derive from
280         ParserRefCounted rather than from Node, hold a vector rather than a pointer to
281         a vector, and changed the release function to swap with another vector rather
282         than the pointer idiom. Updated BlockNode and CaseClauseNode to hold actual
283         vectors instead of pointers to vectors. Added BreakpointCheckStatement.
284
285         * kjs/nodes2string.cpp:
286         (KJS::statementListStreamTo): Changed to work on a vector instead of a pointer
287         to a vector.
288         (KJS::BlockNode::streamTo): Ditto.
289         (KJS::CaseClauseNode::streamTo):  Ditto.
290
291         * wtf/AlwaysInline.h: Added NEVER_INLINE.
292         * wtf/PassRefPtr.h: Tweaked formatting. Added clear() function that matches the
293         ones in OwnPtr and auto_ptr.
294         * wtf/RefPtr.h: Ditto.
295
296 2007-12-21  Darin Adler  <darin@apple.com>
297
298         - fix broken regression tests
299
300         The broken tests were fast/js/do-while-expression-value.html and
301         fast/js/while-expression-value.html.
302
303         * kjs/nodes.cpp: Check in the correct version of this file. I had accidentally landed
304         an old version of my patch for bug 16471.
305         (KJS::statementListExecute): The logic here was backwards. Have to set the value
306         even for non-normal execution results.
307
308 2007-12-20  Alexey Proskuryakov  <ap@webkit.org>
309
310         Windows build fix
311
312         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Copy npruntime_internal.h
313         to WebKitBuild.
314
315 2007-12-20  Eric Seidel  <eric@webkit.org>
316
317         Reviewed by mjs.
318         
319         Split IfNode into IfNode and IfElseNode for speedup.
320         http://bugs.webkit.org/show_bug.cgi?id=16470
321         
322         SunSpider claims this is 1.003x as fast as before.
323         (This required running with --runs 15 to get consistent enough results to tell!)
324
325         * kjs/grammar.y:
326         * kjs/nodes.cpp:
327         (KJS::IfNode::optimizeVariableAccess):
328         (KJS::IfNode::execute):
329         (KJS::IfNode::getDeclarations):
330         (KJS::IfElseNode::optimizeVariableAccess):
331         (KJS::IfElseNode::execute):
332         (KJS::IfElseNode::getDeclarations):
333         * kjs/nodes.h:
334         (KJS::IfNode::):
335         (KJS::IfElseNode::):
336         * kjs/nodes2string.cpp:
337         (KJS::IfNode::streamTo):
338         (KJS::IfElseNode::streamTo):
339
340 2007-12-20  Darin Adler  <darin@apple.com>
341
342         Reviewed by Sam.
343
344         * wtf/OwnPtr.h:
345         (WTF::operator==): Added.
346         (WTF::operator!=): Added.
347
348 2007-12-20  Geoffrey Garen  <ggaren@apple.com>
349
350         Reviewed by Oliver Hunt.
351         
352         AST optimization: Avoid NULL-checking ForNode's child nodes.
353         
354         0.6% speedup on SunSpider.
355         
356         This is a proof of concept patch that demonstrates how to optimize
357         grammar productions with optional components, like
358         
359             for (optional; optional; optional) {
360                 ...
361             }
362             
363         The parser emits NULL for an optional component that is not present.
364
365         Instead of checking for a NULL child at execution time, a node that
366         expects an optional component to be present more often than not checks
367         for a NULL child at construction time, and substitutes a viable
368         alternative node in its place.
369
370         (We'd like the parser to start emitting NULL a lot more once we teach
371         it to emit NULL for certain no-op productions like EmptyStatement and
372         VariableStatement, so, as a foundation, it's important for nodes with
373         NULL optional components to be fast.)
374
375         * kjs/Parser.cpp:
376         (KJS::Parser::didFinishParsing): Check for NULL SourceElements. Also,
377         moved didFinishParsing into the .cpp file because adding a branch while
378         it was in the header file caused a substantial and inexplicable
379         performance regression. (Did I mention that GCC is crazy?)
380
381         * kjs/grammar.y:
382
383         * kjs/nodes.cpp:
384         (KJS::BlockNode::BlockNode): Check for NULL SourceElements.
385         (KJS::ForNode::optimizeVariableAccess): No need to check for NULL here.
386         (KJS::ForNode::execute): No need to check for NULL here.
387         * kjs/nodes.h:
388         (KJS::ForNode::): Check for NULL SourceElements. Substitute a TrueNode
389         because it's semantically harmless, and it evaluates to boolean in an
390         efficient manner.
391
392 2007-12-20  Oliver Hunt  <oliver@apple.com>
393
394         Reviewed by Geoff.
395
396         Slight logic reordering in JSImmediate::from(double)
397
398         This gives a 0.6% improvement in SunSpider.
399
400         * kjs/JSImmediate.h:
401         (KJS::JSImmediate::from):
402
403 2007-12-20  Eric Seidel  <eric@webkit.org>
404
405         Reviewed by mjs.
406
407         Fix major Array regression introduced by 28899.
408
409         SunSpider claims this is at least 1.37x as fast as pre-regression. :)
410
411         * kjs/array_instance.cpp: make Arrays fast again!
412
413 2007-12-20  Eric Seidel  <eric@webkit.org>
414
415         Reviewed by Geoff, then re-rubber-stamped by Geoff after final search/replace and testing.
416
417         Small reworking of Date code for 4% speedup on Date tests (0.2% overall)
418         http://bugs.webkit.org/show_bug.cgi?id=16537
419
420         Make msToYear human-readable
421         Make msToDayInMonth slightly more readable and avoid recalculating msToYear
422         Remove use of isInLeapYear to avoid calling msToYear
423         Remove dayInYear call by changing msToDayInMonth to dayInMonthFromDayInYear
424         Remove more duplicate calls to dayInYear and getUTCOffset for further speedup
425
426         * kjs/DateMath.cpp:
427         (KJS::daysFrom1970ToYear):
428         (KJS::msToYear):
429         (KJS::monthFromDayInYear):
430         (KJS::checkMonth):
431         (KJS::dayInMonthFromDayInYear):
432         (KJS::dateToDayInYear):
433         (KJS::getDSTOffsetSimple):
434         (KJS::getDSTOffset):
435         (KJS::gregorianDateTimeToMS):
436         (KJS::msToGregorianDateTime):
437
438 2007-12-20  Rodney Dawes  <dobey@wayofthemonkey.com>
439
440         Reviewed by Darin Adler.
441
442         Proxy includes of npruntime.h or npapi.h through npruntime_internal.h
443         Include stdio.h in npapi.h for the use of FILE with XP_UNIX defined
444         This is for building with X11, as some type and enum names conflict
445         with #define names in X11 headers.
446         http://bugs.webkit.org/show_bug.cgi?id=15669
447
448         * JavaScriptCore.xcodeproj/project.pbxproj:
449         * bindings/NP_jsobject.h:
450         * bindings/npapi.h:
451         * bindings/npruntime.cpp:
452         * bindings/npruntime_impl.h:
453         * bindings/npruntime_priv.h:
454         * bindings/npruntime_internal.h:
455         * bindings/testbindings.cpp:
456         * bindings/c/c_class.h:
457         * bindings/c/c_runtime.h:
458         * bindings/c/c_utility.h:
459
460 2007-12-20  Darin Adler  <darin@apple.com>
461
462         - re-fix http://bugs.webkit.org/show_bug.cgi?id=16471
463           Completions need to be smaller (or not exist at all)
464
465         Same patch as last time with the test failures problem fixed.
466
467         * kjs/function.cpp:
468         (KJS::GlobalFuncImp::callAsFunction): Make sure to check the completion
469         type from newExec to see if the execute raised an exception.
470
471 2007-12-20  Darin Adler  <darin@apple.com>
472
473         - roll out that last change -- it was causing test failures;
474           I'll check it back in after fixing them
475
476 2007-12-20  Darin Adler  <darin@apple.com>
477
478         Reviewed by Eric.
479
480         - http://bugs.webkit.org/show_bug.cgi?id=16471
481           Completions need to be smaller (or not exist at all)
482
483         SuSpider shows 2.4% speedup.
484
485         Stop using completions in the execution engine.
486         Instead, the completion type and label target are both
487         stored in the ExecState.
488
489         * API/JSContextRef.cpp: Removed unneeded include of "completion.h".
490         * bindings/runtime_method.cpp: Removed unused execute function.
491         * bindings/runtime_method.h: Ditto.
492
493         * kjs/ExecState.h: Added completionType, breakOrContinueTarget,
494         setCompletionType, setNormalCompletion, setBreakCompletion,
495         setContinueCompletion, setReturnValueCompletion, setThrowCompletion,
496         setInterruptedCompletion, m_completionType, and m_breakOrContinueTarget.
497
498         * kjs/completion.h: Removed constructor and getter for target
499         for break and continue from Completion. This class is now only
500         used for the public API to Interpreter and such.
501
502         * kjs/date_object.h: Removed unused execute function.
503
504         * kjs/function.cpp:
505         (KJS::FunctionImp::callAsFunction): Removed some unneeded
506         exception processing. Updated to call the new execute function
507         and to get the completion type from the ExecState. Merged in
508         the execute function, which repeated some of the same logic and
509         was called only from here.
510         (KJS::GlobalFuncImp::callAsFunction): More of the same for eval.
511         * kjs/function.h: Removed execute.
512
513         * kjs/interpreter.cpp:
514         (KJS::Interpreter::evaluate): Added code to convert the result of
515         execut into a Completion.
516
517         * kjs/nodes.cpp:
518         (KJS::Node::setErrorCompletion): Renamed from createErrorCompletion.
519         Now sets the completion type in the ExecState.
520         (KJS::Node::rethrowException): Now sets the completion type in the
521         ExecState.
522         (KJS::StatementNode::hitStatement): Now sets the completion type in
523         the ExecState.
524         (KJS::VarStatementNode::execute): Updated to put completion type in
525         the ExecState instead of a Completion object.
526         (KJS::statementListExecute): Ditto. Also changed the for loop to use
527         indices instead of iterators.
528         (KJS::BlockNode::execute): Updated return type.
529         (KJS::EmptyStatementNode::execute): Updated to put completion type in
530         the ExecState instead of a Completion object.
531         (KJS::ExprStatementNode::execute): Ditto.
532         (KJS::IfNode::execute): Ditto.
533         (KJS::DoWhileNode::execute): Ditto. Also streamlined the logic a little
534         to make the normal case a little faster and moved the end outside the
535         loop so that "break" can do a break.
536         (KJS::WhileNode::execute): Ditto.
537         (KJS::ForNode::execute): Ditto.
538         (KJS::ForInNode::execute): Ditto.
539         (KJS::ContinueNode::execute): Updated to put completion type in
540         the ExecState instead of a Completion object.
541         (KJS::BreakNode::execute): Ditto.
542         (KJS::ReturnNode::execute): Ditto.
543         (KJS::WithNode::execute): Ditto.
544         (KJS::CaseClauseNode::executeStatements): Ditto. Also renamed to have
545         execute in its name to reflect the fact that it's a member of the same
546         family of functions.
547         (KJS::CaseBlockNode::executeBlock): Ditto.
548         (KJS::SwitchNode::execute): Ditto.
549         (KJS::LabelNode::execute): Ditto.
550         (KJS::ThrowNode::execute): Ditto.
551         (KJS::TryNode::execute): Ditto.
552         (KJS::ProgramNode::execute): Ditto.
553         (KJS::EvalNode::execute): Ditto.
554         (KJS::FunctionBodyNode::execute): Ditto.
555         (KJS::FuncDeclNode::execute): Ditto.
556
557         * kjs/nodes.h: Renamed setErrorCompletion to createErrorCompletion, made
558         hitStatement protected, changed return value of execute to a JSValue,
559         renamed evalStatements to executeStatements, and evalBlock to executeBlock.
560
561         * kjs/number_object.h: Removed unused execute function.
562
563 2007-12-20  Geoffrey Garen  <ggaren@apple.com>
564
565         Added Radar number.
566
567         * kjs/nodes.cpp:
568         (KJS::ProgramNode::processDeclarations):
569
570 2007-12-20  Geoffrey Garen  <ggaren@apple.com>
571
572         Linux build fix: config.h has to come first.
573
574         * kjs/error_object.cpp:
575
576 2007-12-19  Geoffrey Garen  <ggaren@apple.com>
577
578         Reviewed by Oliver Hunt.
579         
580         Optimized global access to global variables, using a symbol table.
581         
582         SunSpider reports a 1.5% overall speedup, a 6.2% speedup on 3d-morph,
583         and a whopping 33.1% speedup on bitops-bitwise-and.
584
585         * API/JSCallbackObjectFunctions.h: Replaced calls to JSObject:: with
586         calls to Base::, since JSObject is not always our base class. This
587         was always a bug, but the bug is even more apparent after some of my
588         changes.
589
590         (KJS::::staticFunctionGetter): Replaced use of getDirect with call to
591         getOwnPropertySlot. Global declarations are no longer stored in the
592         property map, so a call to getDirect is insufficient for finding
593         override properties.
594
595         * API/testapi.c: 
596         * API/testapi.js: Added test for the getDirect change mentioned above.
597
598         * kjs/ExecState.cpp: 
599         * kjs/ExecState.h: Dialed back the optimization to store a direct
600         pointer to the localStorage buffer. One ExecState can grow the global
601         object's localStorage without another ExecState's knowledge, so
602         ExecState can't store a direct pointer to the localStorage buffer
603         unless/until we invent a way to update all the relevant ExecStates.
604
605         * kjs/JSGlobalObject.cpp: Inserted the symbol table into get and put
606         operations.
607         (KJS::JSGlobalObject::reset): Reset the symbol table and local storage,
608         too. Also, clear the property map here, removing the need for a
609         separate call.
610
611         * kjs/JSVariableObject.cpp:
612         * kjs/JSVariableObject.h: Added support for saving localStorage and the
613         symbol table to the back/forward cache, and restoring them.
614
615         * kjs/function.cpp:
616         (KJS::GlobalFuncImp::callAsFunction): Renamed progNode to evalNode
617         because it's an EvalNode, not a ProgramNode.
618
619         * kjs/lookup.h:
620         (KJS::cacheGlobalObject): Replaced put with faster putDirect, since
621         that's how the rest of lookup.h works. putDirect is safe here because
622         cacheGlobalObject is only used for objects whose names are not valid
623         identifiers.
624
625         * kjs/nodes.cpp: The good stuff!
626
627         (KJS::EvalNode::processDeclarations): Replaced hasProperty with
628         the new hasOwnProperty, which is slightly faster.
629
630         * kjs/object.h: Nixed clearProperties because clear() does this job now.
631
632         * kjs/property_map.cpp:
633         * kjs/property_map.h: More back/forward cache support.
634         
635         * wtf/Vector.h:
636         (WTF::::grow): Added fast non-branching grow function. I used it in
637         an earlier version of this patch, even though it's not used anymore.
638
639 2007-12-09  Mark Rowe  <mrowe@apple.com>
640
641         Reviewed by Oliver Hunt.
642
643         Build fix for non-Mac platforms.  Move NodeInfo into its own header so that the YYTYPE
644         declaration in grammar.h is able to declare members of that type.
645
646         * kjs/NodeInfo.h: Added.
647         (KJS::createNodeInfo):
648         (KJS::mergeDeclarationLists):
649         (KJS::appendToVarDeclarationList):
650         * kjs/grammar.y:
651         * kjs/lexer.cpp:
652
653 2007-12-19  Oliver Hunt  <oliver@apple.com>
654
655         Make appendToVarDeclarationList static
656
657         RS=Weinig.
658
659         * kjs/grammar.y:
660
661 2007-12-18  Oliver Hunt  <oliver@apple.com>
662
663         Remove dead code due to removal of post-parse declaration discovery.
664
665         RS=Geoff.
666
667         Due to the removal of the declaration discovery pass after parsing we
668         no longer need any of the logic used for that discovery.
669
670         * kjs/nodes.cpp:
671         (KJS::Node::Node):
672         (KJS::VarDeclNode::VarDeclNode):
673         (KJS::BlockNode::BlockNode):
674         (KJS::ForInNode::ForInNode):
675         (KJS::CaseBlockNode::CaseBlockNode):
676         * kjs/nodes.h:
677         (KJS::VarStatementNode::):
678         (KJS::IfNode::):
679         (KJS::DoWhileNode::):
680         (KJS::WhileNode::):
681         (KJS::WithNode::):
682         (KJS::LabelNode::):
683         (KJS::TryNode::):
684         (KJS::FuncDeclNode::):
685         (KJS::CaseClauseNode::):
686         (KJS::ClauseListNode::):
687         (KJS::SwitchNode::):
688
689 2007-12-18  Oliver Hunt  <oliver@apple.com>
690
691         Replace post-parse pass to find declarations with logic in the parser itself
692
693         Reviewed by Geoff.
694
695         Instead of finding declarations in a pass following the initial parsing of
696         a program, we incorporate the logic directly into the parser.  This lays
697         the groundwork for further optimisations (such as improving performance in
698         declaration expressions -- var x = y; -- to match that of standard assignment)
699         in addition to providing a 0.4% performance improvement in SunSpider.
700
701         * JavaScriptCore.exp:
702         * kjs/Parser.cpp:
703         (KJS::Parser::parse):
704         * kjs/Parser.h:
705         (KJS::Parser::didFinishParsing):
706         (KJS::Parser::parse):
707         * kjs/grammar.y:
708         * kjs/nodes.cpp:
709         (KJS::ParserTracked::ParserTracked):
710         (KJS::ParserTracked::~ParserTracked):
711         (KJS::ParserTracked::ref):
712         (KJS::ParserTracked::deref):
713         (KJS::ParserTracked::refcount):
714         (KJS::ParserTracked::clearNewTrackedObjects):
715         (KJS::Node::Node):
716         (KJS::ScopeNode::ScopeNode):
717         (KJS::ProgramNode::ProgramNode):
718         (KJS::EvalNode::EvalNode):
719         (KJS::FunctionBodyNode::FunctionBodyNode):
720         (KJS::FunctionBodyNode::initializeSymbolTable):
721         (KJS::FunctionBodyNode::processDeclarations):
722         * kjs/nodes.h:
723         (KJS::ParserTracked::):
724         (KJS::Node::):
725         (KJS::ScopeNode::):
726
727 2007-12-18  Xan Lopez  <xan@gnome.org>
728
729         Reviewed by Geoff.
730
731         Fix http://bugs.webkit.org/show_bug.cgi?id=14521
732         Bug 14521: JavaScriptCore fails to build on Linux/PPC gcc 4.1.2
733         
734         * wtf/TCSpinLock.h:
735         (TCMalloc_SpinLock::Unlock):
736
737         Use less strict memory operand constraint on inline asm generation.
738         PLATFORM(DARWIN) left unpatched due to Apple's GCC bug.
739
740         Patch by David Kilzer <ddkilzer@webkit.org>
741
742 2007-12-18  Mark Rowe  <mrowe@apple.com>
743
744         Rubber-stamped by Maciej Stachowiak.
745
746         Remove outdated and non-functioning project files for the Apollo port.
747
748         * JavaScriptCore.apolloproj: Removed.
749
750 2007-12-18  Darin Adler  <darin@apple.com>
751
752         - fix Windows build
753
754         * pcre/pcre_exec.cpp:
755         (jsRegExpExecute): Change back from false/true to 0/1 -- I probably should not have
756         deleted MATCH_MATCH and MATCH_NOMATCH, but I'm going to leave them out.
757
758 2007-12-18  Darin Adler  <darin@apple.com>
759
760         Reviewed by Geoff.
761
762         - fix http://bugs.webkit.org/show_bug.cgi?id=16458
763           REGRESSION (r28164): regular expressions can now hang due to lack of a match limit
764           <rdar://problem/5636067>
765
766         Test: fast/regex/slow.html
767
768         Slows down SunSpider a bit (about 1.01x); filed a bug to follow up on that:
769         http://bugs.webkit.org/show_bug.cgi?id=16503
770
771         * pcre/pcre.h: Changed name of error code to not specifically mention "recursion".
772         * pcre/pcre_exec.cpp:
773         (match): Replaced the depth limit, MATCH_RECURSION_LIMIT, with a total match looping
774         limit, matchLimit. Also eliminated the constants for MATCH_MATCH and MATCH_NOMATCH,
775         since they are just true and false (1 and 0).
776         (jsRegExpExecute): More of the MATCH_MATCH change.
777
778 2007-12-17  Darin Adler  <darin@apple.com>
779
780         - speculative build fix for non-gcc platforms
781
782         * pcre/pcre_exec.cpp: (match): Remove unused cases from return switch.
783
784 2007-12-16  Mark Rowe  <mrowe@apple.com>
785
786         Speculative build fix for non-Mac platforms.
787
788         * pcre/pcre_compile.cpp: Include string.h for memset, memmove, etc.
789
790 2007-12-16  Darin Adler  <darin@apple.com>
791
792         Reviewed by Maciej.
793
794         - http://bugs.webkit.org/show_bug.cgi?id=16438
795         - removed some more unused code
796         - changed quite a few more names to WebKit-style
797         - moved more things out of pcre_internal.h
798         - changed some indentation to WebKit-style
799         - improved design of the functions for reading and writing
800           2-byte values from the opcode stream (in pcre_internal.h)
801
802         * pcre/dftables.cpp:
803         (main): Added the kjs prefix a normal way in lieu of using macros.
804
805         * pcre/pcre_compile.cpp: Moved some definitions here from pcre_internal.h.
806         (errorText): Name changes, fewer typedefs.
807         (checkEscape): Ditto. Changed uppercase conversion to use toASCIIUpper.
808         (isCountedRepeat): Name change.
809         (readRepeatCounts): Name change.
810         (firstSignificantOpcode): Got rid of the use of OP_lengths, which is
811         very lightly used here. Hard-coded the length of OP_BRANUMBER.
812         (firstSignificantOpcodeSkippingAssertions): Ditto. Also changed to
813         use the advanceToEndOfBracket function.
814         (getOthercaseRange): Name changes.
815         (encodeUTF8): Ditto.
816         (compileBranch): Name changes. Removed unused after_manual_callout and
817         the code to handle it. Removed code to handle OP_ONCE since we never
818         emit this opcode. Changed to use advanceToEndOfBracket in more places.
819         (compileBracket): Name changes.
820         (branchIsAnchored): Removed code to handle OP_ONCE since we never emit
821         this opcode.
822         (bracketIsAnchored): Name changes.
823         (branchNeedsLineStart): More fo the same.
824         (bracketNeedsLineStart): Ditto.
825         (branchFindFirstAssertedCharacter): Removed OP_ONCE code.
826         (bracketFindFirstAssertedCharacter): More of the same.
827         (calculateCompiledPatternLengthAndFlags): Ditto.
828         (returnError): Name changes.
829         (jsRegExpCompile): Ditto.
830
831         * pcre/pcre_exec.cpp: Moved some definitions here from pcre_internal.h.
832         (matchRef): Updated names.
833         Improved macros to use the do { } while(0) idiom so they expand to single
834         statements rather than to blocks or multiple statements. And refeactored
835         the recursive match macros.
836         (MatchStack::pushNewFrame): Name changes.
837         (getUTF8CharAndIncrementLength): Name changes.
838         (match): Name changes. Removed the ONCE opcode.
839         (jsRegExpExecute): Name changes.
840
841         * pcre/pcre_internal.h: Removed quite a few unneeded includes. Rewrote
842         quite a few comments. Removed the macros that add kjs prefixes to the
843         functions with external linkage; instead renamed the functions. Removed
844         the unneeded typedefs pcre_uint16, pcre_uint32, and uschar. Removed the
845         dead and not-all-working code for LINK_SIZE values other than 2, although
846         we aim to keep the abstraction working. Removed the OP_LENGTHS macro.
847         (put2ByteValue): Replaces put2ByteOpcodeValueAtOffset.
848         (get2ByteValue): Replaces get2ByteOpcodeValueAtOffset.
849         (put2ByteValueAndAdvance): Replaces put2ByteOpcodeValueAtOffsetAndAdvance.
850         (putLinkValueAllowZero): Replaces putOpcodeValueAtOffset; doesn't do the
851         addition, since a comma is really no better than a plus sign. Added an
852         assertion to catch out of range values and changed the parameter type to
853         int rather than unsigned.
854         (getLinkValueAllowZero): Replaces getOpcodeValueAtOffset.
855         (putLinkValue): New function that most former callers of the
856         putOpcodeValueAtOffset function can use; asserts the value that is
857         being stored is non-zero and then calls putLinkValueAllowZero.
858         (getLinkValue): Ditto.
859         (putLinkValueAndAdvance): Replaces putOpcodeValueAtOffsetAndAdvance. No
860         caller was using an offset, which makes sense given the advancing behavior.
861         (putLinkValueAllowZeroAndAdvance): Ditto.
862         (isBracketOpcode): Added. For use in an assertion.
863         (advanceToEndOfBracket): Renamed from moveOpcodePtrPastAnyAlternateBranches,
864         and removed comments about how it's not well designed. This function takes
865         a pointer to the beginning of a bracket and advances to the end of the
866         bracket.
867
868         * pcre/pcre_tables.cpp: Updated names.
869         * pcre/pcre_ucp_searchfuncs.cpp:
870         (kjs_pcre_ucp_othercase): Ditto.
871         * pcre/pcre_xclass.cpp:
872         (getUTF8CharAndAdvancePointer): Ditto.
873         (kjs_pcre_xclass): Ditto.
874         * pcre/ucpinternal.h: Ditto.
875
876         * wtf/ASCIICType.h:
877         (WTF::isASCIIAlpha): Added an int overload, like the one we already have for
878         isASCIIDigit.
879         (WTF::isASCIIAlphanumeric): Ditto.
880         (WTF::isASCIIHexDigit): Ditto.
881         (WTF::isASCIILower): Ditto.
882         (WTF::isASCIISpace): Ditto.
883         (WTF::toASCIILower): Ditto.
884         (WTF::toASCIIUpper): Ditto.
885
886 2007-12-16  Darin Adler  <darin@apple.com>
887
888         Reviewed by Maciej.
889
890         - fix http://bugs.webkit.org/show_bug.cgi?id=16459
891           REGRESSION: assertion failure with regexp with \B in a case-ignoring character range
892           <rdar://problem/5646361>
893
894         The problem was that \B was not handled properly in character classes.
895
896         Test: fast/js/regexp-overflow.html
897
898         * pcre/pcre_compile.cpp:
899         (check_escape): Added handling of ESC_b and ESC_B in character classes here.
900         Allows us to get rid of the handling of \b in character classes from all the
901         call sites that handle it separately and to handle \B properly as well.
902         (compileBranch): Remove the ESC_b handling, since it's not needed any more.
903         (calculateCompiledPatternLengthAndFlags): Ditto.
904
905 2007-12-16  Mark Rowe  <mrowe@apple.com>
906
907         Reviewed by Maciej Stachowiak.
908
909         Fix http://bugs.webkit.org/show_bug.cgi?id=16448
910         Bug 16448: [GTK] Celtic Kane JavaScript performance on Array test is slow relative to Mac
911
912         * kjs/array_instance.cpp:
913         (KJS::compareByStringPairForQSort):
914         (KJS::ArrayInstance::sort): Convert JSValue's to strings once up front and then sort the
915         results.  This avoids calling toString twice per comparison, but requires a temporary buffer
916         so we only use this approach in cases where the array being sorted is not too large.
917
918 2007-12-16  Geoffrey Garen  <ggaren@apple.com>
919
920         Reviewed by Darin Adler and Maciej Stachowiak.
921         
922         More refactoring to support global variable optimization.
923         
924         Changed SymbolTable to use RefPtr<UString::Rep> as its key instead of
925         UString::Rep*. With globals, the symbol table can outlast the
926         declaration node for any given symbol, so the symbol table needs to ref
927         its symbol names.
928         
929         In support, specialized HashMaps with RefPtr keys to allow lookup
930         via raw pointer, avoiding refcount churn.
931         
932         SunSpider reports a .6% speedup (prolly just noise).
933
934         * JavaScriptCore.vcproj/WTF/WTF.vcproj: Added new file: wtf/RefPtrHashMap.h
935         * JavaScriptCore.xcodeproj/project.pbxproj: ditto
936
937         * kjs/JSVariableObject.cpp:
938         (KJS::JSVariableObject::getPropertyNames): Symbol table keys are RefPtrs now.
939
940         * kjs/SymbolTable.h: Modified key traits to match RefPtr. Added a
941         static Rep* for null, which helps compute the deletedValue() trait.
942
943         * wtf/HashMap.h: #include the RefPtr specialization so everyone can use it.
944
945         * wtf/RefPtrHashMap.h: Copied from wtf/HashMap.h. Added overloaded versions
946         of find(), contains(), get(), set(), add(), remove(), and take() that take
947         raw pointers as keys.
948
949 2007-12-16  Alexey Proskuryakov  <ap@webkit.org>
950
951         Reviewed by Darin.
952
953         http://bugs.webkit.org/show_bug.cgi?id=16162
954         Problems with float parsing on Linux (locale-dependent parsing was used).
955
956         * kjs/dtoa.cpp: Removed USE_LOCALE to reduce future confusion.
957         * kjs/lexer.cpp: (KJS::Lexer::lex): Parse with kjs_strtod, not the system one.
958
959 2007-12-14  Alp Toker  <alp@atoker.com>
960
961         Reviewed by Mark Rowe.
962
963         Enable the AllInOneFile.cpp optimization for the GTK+ port.
964
965         * JavaScriptCore.pri:
966
967 2007-12-14  Mark Rowe  <mrowe@apple.com>
968
969         Unreviewed.  Remove commented out fprintf's that were for debugging purposes only.
970
971         * wtf/FastMalloc.cpp:
972         (WTF::TCMalloc_PageHeap::IncrementalScavenge):
973
974 2007-12-14  Mark Rowe  <mrowe@apple.com>
975
976         Reviewed by Maciej Stachowiak.
977
978         Don't use the MADV_DONTNEED code path for now as it has no effect on Mac OS X and is
979         currently untested on other platforms.
980
981         * wtf/TCSystemAlloc.cpp:
982         (TCMalloc_SystemRelease): Return after releasing memory rather than potentially falling
983         through into another mechanism if multiple are supported.
984
985 2007-12-14  Alp Toker  <alp@atoker.com>
986
987         Build fix for GTK+/Qt and ports that don't use AllInOneFile.cpp.
988
989         Include UnusedParam.h.
990
991         * wtf/TCSystemAlloc.cpp:
992
993 2007-12-14  Oliver Hunt  <oliver@apple.com>
994
995         Reviewed by Stephanie.
996
997         Fix build on windows
998
999         * wtf/FastMalloc.cpp:
1000         (WTF::TCMalloc_PageHeap::IncrementalScavenge):
1001
1002 2007-12-14  Dan Bernstein  <mitz@apple.com>
1003
1004         - try again to fix the Windows build
1005
1006         * wtf/TCSystemAlloc.cpp:
1007         (TCMalloc_SystemRelease):
1008
1009 2007-12-14  Dan Bernstein  <mitz@apple.com>
1010
1011         - try to fix the Windows build
1012
1013         * wtf/TCSystemAlloc.cpp:
1014         (TCMalloc_SystemRelease):
1015
1016 2007-12-14  Mark Rowe <mrowe@apple.com>
1017
1018         Reviewed by Maciej and Oliver.
1019
1020         Add final changes to make TCMalloc release memory to the system.
1021         This results in a 0.4% regression against ToT, but this is offset
1022         against the gains made by the original TCMalloc r38 merge - in fact
1023         we retain around 0.3-0.4% progression overall.
1024
1025         * wtf/FastMalloc.cpp:
1026         (WTF::InitSizeClasses):
1027         (WTF::TCMalloc_PageHeap::IncrementalScavenge):
1028         * wtf/TCSystemAlloc.cpp:
1029         (TCMalloc_SystemRelease):
1030
1031 2007-12-14  Darin Adler  <darin@apple.com>
1032
1033         Reviewed by Sam.
1034
1035         - removed unnecessary includes of "Vector.h"
1036
1037         * wtf/HashMap.h:
1038         (WTF::copyKeysToVector): Make the type of the vector be a template parameter.
1039         This allows copying keys into a vector of a base class or one with an inline capacity.
1040         (WTF::copyValuesToVector): Ditto.
1041         * wtf/HashSet.h:
1042         (WTF::copyToVector): Ditto.
1043
1044 2007-12-14  Anders Carlsson  <andersca@apple.com>
1045
1046         Reviewed by Darin and Geoff.
1047
1048         <rdar://problem/5619295> 
1049         REGRESSION: 303-304: Embedded YouTube video fails to render- JS errors (16150) (Flash 9)
1050         
1051         Get rid of unnecessary and incorrect security checks for plug-ins accessing JavaScript objects. 
1052         
1053         The way this used to work was that each NPObject that wrapped a JSObject would have a root object
1054         corresponding to the frame object (used for managing the lifecycle) and an origin root object (used for
1055         doing security checks). 
1056         
1057         This would prevent a plug-in from accessing a frame's window object if it's security origin was different
1058         (some parts of the window, such as the location object, can be accessed from frames with different security 
1059         origins, and those checks are being done in WebCore).
1060         
1061         Also, if a plug-in were to access a window object of a frame that later went away, it could lead to that
1062         Window JSObject being garbage collected and the NPObject pointing to freed memory.
1063         
1064         How this works now is that there is no origin root object anymore, and all NPObject wrappers that are created
1065         for a plug-in will have the root object of the containing frame of that plug-in.
1066         
1067         * bindings/NP_jsobject.cpp:
1068         (jsDeallocate):
1069         Don't free the origin root object.
1070         
1071         (_NPN_CreateScriptObject):
1072         Remove the origin root object parameter.
1073         
1074         (_NPN_InvokeDefault):
1075         (_NPN_Invoke):
1076         (_NPN_Evaluate):
1077         (_NPN_GetProperty):
1078         (_NPN_SetProperty):
1079         (_NPN_RemoveProperty):
1080         (_NPN_HasProperty):
1081         (_NPN_HasMethod):
1082         (_NPN_Enumerate):
1083         Get rid of all security checks.
1084         
1085         * bindings/NP_jsobject.h:
1086         Remove originRootObject from the JavaScriptObject struct.
1087         
1088         * bindings/c/c_utility.cpp:
1089         (KJS::Bindings::convertValueToNPVariant):
1090         Always use the root object from the ExecState.
1091         
1092 2007-12-13  Steve Falkenburg  <sfalken@apple.com>
1093
1094         Move source file generation into its own vcproj to fix build dependencies.
1095
1096         Reviewed by Adam.
1097
1098         * JavaScriptCore.vcproj/JavaScriptCore.sln:
1099         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
1100         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.make: Added.
1101         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.vcproj: Added.
1102         * JavaScriptCore.vcproj/JavaScriptCoreSubmit.sln:
1103
1104 2007-12-13  Alp Toker  <alp@atoker.com>
1105
1106         http://bugs.webkit.org/show_bug.cgi?id=16406
1107         [Gtk] JavaScriptCore needs -lpthread
1108
1109         Build fix for Debian and any other platforms that don't implicitly
1110         link to pthread.
1111
1112         Link to pthread on non-Windows platforms until this dependency is
1113         removed from JSC.
1114
1115 2007-12-11  Geoffrey Garen  <ggaren@apple.com>
1116
1117         Reviewed by Sam Weinig.
1118         
1119         Build fix: Note some variables that are used only for ASSERTs.
1120
1121         * API/testapi.c:
1122         (Base_finalize):
1123         (globalObject_initialize):
1124         (testInitializeFinalize):
1125
1126 2007-12-11  Geoffrey Garen  <ggaren@apple.com>
1127
1128         Reviewed by Darin Adler.
1129         
1130         Fixed: All JS tests crash on Windows.
1131
1132         NDEBUG wasn't defined when compiling testkjs in release builds, so the
1133         HashTable definition in HashTable.h included an extra data member.
1134
1135         The solution was to add NDEBUG to the release testkjs configuration on
1136         Windows and Mac.
1137         
1138         For giggles, I also added other missing #defines to testkjs on Windows.
1139
1140         * Configurations/Base.xcconfig:
1141         * Configurations/JavaScriptCore.xcconfig:
1142         * JavaScriptCore.vcproj/testkjs/testkjs.vcproj:
1143         * JavaScriptCore.xcodeproj/project.pbxproj:
1144         * kjs/testkjs.cpp:
1145         (main):
1146
1147 2007-12-11  Geoffrey Garen  <ggaren@apple.com>
1148
1149         Reviewed by Darin Adler.
1150         
1151         Removed bogus ASSERT.
1152         
1153         ASSERT should only be used when we know that a code path will not be
1154         taken. This code path is taken often during the jsFunFuzz test.
1155
1156         * pcre/pcre_exec.cpp:
1157         (jsRegExpExecute):
1158
1159 2007-12-11  Darin Adler  <darin@apple.com>
1160
1161         * wtf/unicode/qt4/UnicodeQt4.h: Try to fix Qt build by adding U16_IS_SINGLE.
1162
1163 2007-12-10  Darin Adler  <darin@apple.com>
1164
1165         Reviewed by Sam Weinig.
1166
1167         - fix http://bugs.webkit.org/show_bug.cgi?id=16379
1168           REGRESSION(r28525): Failures in http/tests/xmlhttprequest/response-encoding.html and
1169           fast/dom/xmlhttprequest-html-response-encoding.html
1170           and <rdar://problem/5640230> REGRESSION (306A4-ToT): Access violation in PCRE function
1171           find_firstassertedchar
1172
1173         Test: fast/js/regexp-find-first-asserted.html
1174
1175         * pcre/pcre_compile.cpp:
1176         (compileBracket): Take out unnecessary initialization of out parameters.
1177         (branchFindFirstAssertedCharacter): Added. Broke out the half of the function that handles
1178         a branch.
1179         (bracketFindFirstAssertedCharacter): Renamed from find_firstassertedchar. Also removed the
1180         options parameter -- the caller can handle the options.
1181         (jsRegExpCompile): Changed call site to call the appropriate bracket or branch version of
1182         the find_firstassertedchar function. Also put the REQ_IGNORE_CASE code here instead of
1183         passing in the options.
1184
1185 2007-12-10  Geoffrey Garen  <ggaren@apple.com>
1186
1187         Reviewed by Sam Weinig.
1188
1189         Split this:
1190         
1191                             FunctionBodyNode
1192                                     ^
1193                                     |
1194                                 ProgramNode
1195             
1196         into this:
1197             
1198                                 ScopeNode
1199                 ^                   ^                   ^
1200                 |                   |                   |
1201         FunctionBodyNode        ProgramNode         EvalNode
1202
1203         in preparation for specializing each class more while optimizing global
1204         variable access.
1205         
1206         Also removed some cruft from the FunctionBodyNode interface to simplify
1207         things.
1208         
1209         SunSpider says this patch is a .8% speedup, which seems reasonable,
1210         since it eliminates a few branches and adds KJS_FAST_CALL in a few
1211         places.
1212         
1213         Layout tests and JS tests pass. Also, this baby builds on Windows! (Qt
1214         mileage may vary...)
1215
1216 2007-12-10  Geoffrey Garen  <ggaren@apple.com>
1217
1218         RS by Mark Rowe.
1219         
1220         Mac build fix: added some exported symbols, now that Parser::parse is
1221         defined in the header.
1222
1223         * JavaScriptCore.exp:
1224
1225 2007-12-10  Sam Weinig  <sam@webkit.org>
1226
1227         Build fix.
1228
1229         Template methods need to be in the header.
1230
1231         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
1232         * kjs/Parser.cpp:
1233         * kjs/Parser.h:
1234         (KJS::Parser::parse):
1235
1236 2007-12-10  Geoffrey Garen  <ggaren@apple.com>
1237
1238         Reviewed by Sam Weinig.
1239         
1240         Merged different implementations of Parser::parse into a single,
1241         templatized implementation, in preparation for adding yet another
1242         implementation for "eval" code.
1243         
1244         JS and layout tests pass.
1245
1246 2007-12-10  Timothy Hatcher  <timothy@apple.com>
1247
1248         Reviewed by Mark Rowe
1249
1250         <rdar://problem/5639463> Bundle versions on Tiger should be 4523.x not 523.x
1251
1252         * Configurations/Version.xcconfig: Some Tiger versions of Xcode don't set MAC_OS_X_VERSION_MAJOR,
1253           so assume Tiger and use a 4 for the SYSTEM_VERSION_PREFIX.
1254
1255 2007-12-10  Mark Rowe  <mrowe@apple.com>
1256
1257         Tiger build fix.
1258
1259         * kjs/grammar.y: Use @1 and @0 in place of @$ where Tiger's bison chokes.
1260
1261 2007-12-10  Darin Adler  <darin@apple.com>
1262
1263         Reviewed by Mark Rowe.
1264
1265         - fix http://bugs.webkit.org/show_bug.cgi?id=16375
1266           REGRESSION: Safari crashes on quit
1267
1268         Probably a debug-only issue.
1269
1270         * kjs/Parser.cpp:
1271         (KJS::parser): Create the parser and never destroy it by using a pointer instead
1272         of a global object.
1273
1274 2007-12-09  Darin Adler  <darin@apple.com>
1275
1276         Reviewed by Sam Weinig.
1277
1278         - fix http://bugs.webkit.org/show_bug.cgi?id=16369
1279           REGRESSION (r28525): regular expression tests failing due to bad firstByte optimization
1280
1281         * pcre/pcre_compile.cpp: Changed some names to use interCaps intead of under_scores.
1282         (branchIsAnchored): Broke is_anchored into two separate functions; this one works on a
1283         branch and the other on an anchor. The old function would only work on a bracket.
1284         Also removed unneeded parameters; the anchored check does not require the bracket
1285         map or the options any more because we have a reduced set of features.
1286         (bracketIsAnchored): Ditto.
1287         (branchNeedsLineStart): Broke canApplyFirstCharOptimization into two functions and gave
1288         both a better name. This is the function that was returning the wrong value. The failure
1289         was beacuse the old function would only work on a bracket.
1290         (bracketNeedsLineStart): Ditto.
1291         (jsRegExpCompile): Changed to call the appropriate branch or bracket flavor of the
1292         functions based on whether we compiled an outer bracket. Also removed inaccurate comments
1293         and unneeded parameters.
1294
1295         - other small changes
1296
1297         * pcre/pcre.h: Renumbered error codes, in a logical order. First, normal failure, then
1298         the recursion limit, then running out of memory, and finally an unexpected internal error.
1299
1300         * pcre/pcre_exec.cpp: Fixed indentation.
1301         (jsRegExpExecute): Corrected an inaccurate comment.
1302
1303 2007-12-09  Darin Adler  <darin@apple.com>
1304
1305         Reviewed by Maciej.
1306
1307         - fix http://bugs.webkit.org/show_bug.cgi?id=16370
1308           REGRESSION (r28540): source URL and line number no longer set for outer function/programs
1309
1310         Test: fast/js/exception-linenums-in-html-1.html
1311         Test: fast/js/exception-linenums-in-html-2.html
1312         Test: fast/js/exception-linenums.html
1313
1314         By the time the ProgramNode was constructed, the source URL was empty.
1315
1316         * kjs/Parser.cpp:
1317         (KJS::Parser::parseProgram): Added code to set and clear m_sourceURL, which is now
1318         handled here instead of in the lexer; it needs to still be set when we create the
1319         program node. Call setLoc to set the first and last line number.
1320         (KJS::Parser::parseFunctionBody): Ditto, but for the body.
1321         (KJS::Parser::parse): Removed the sourceURL argument.
1322
1323         * kjs/Parser.h: Added sourceURL(), m_sourceURL, and m_lastLine. Added a lastLine
1324         parameter to didFinishParsing, since the bison grammar knows the last line number
1325         and we otherwise do not know it. Removed the sourceURL parameter from parse, since
1326         that's now handled at a higher level.
1327
1328         * kjs/grammar.y: Pass the last line number to didFinishParsing.
1329
1330         * kjs/lexer.cpp:
1331         (KJS::Lexer::setCode): Removed the sourceURL argument and the code to set m_sourceURL.
1332         (KJS::Lexer::clear): Ditto.
1333         * kjs/lexer.h: More of the same.
1334
1335         * kjs/nodes.cpp:
1336         (KJS::FunctionBodyNode::FunctionBodyNode): Get the source URL from the parser rather
1337         than from the lexer. Removed unneeded call to setLoc, since the line numbers already
1338         both default to -1.
1339
1340 2007-12-08  Oliver Hunt  <oliver@apple.com>
1341
1342         Reviewed by Sam W.
1343
1344         Split the ENABLE_SVG_EXPERIMENTAL_FEATURES flag into separate flags.
1345         
1346         Fixes <rdar://problem/5620249> Must disable SVG animation
1347         <rdar://problem/5612772> Disable SVG filters on Mac to match Windows behavior
1348         
1349         Minor config changes.
1350
1351         * Configurations/JavaScriptCore.xcconfig:
1352         * JavaScriptCore.xcodeproj/project.pbxproj:
1353
1354 2007-12-07  Sam Weinig  <sam@webkit.org>
1355
1356         Reviewed by Darin.
1357
1358         - Rename isSafeScript to allowsAccessFrom.
1359
1360         * bindings/NP_jsobject.cpp:
1361         (_isSafeScript):
1362         * kjs/JSGlobalObject.h:
1363         (KJS::JSGlobalObject::allowsAccessFrom): Reverse caller/argument of allowsAccessFrom to match
1364         the new call.
1365
1366 2007-12-07  Geoffrey Garen  <ggaren@apple.com>
1367
1368         Reviewed by Sam Weinig.
1369         
1370         Refactored variable access optimization: Removed the assumption that
1371         the FunctionBodyNode holds the symbol table.
1372         
1373 2007-12-07  Geoffrey Garen  <ggaren@apple.com>
1374
1375         Build fix: added #include.
1376
1377         * kjs/nodes.cpp:
1378
1379 2007-12-07  Geoffrey Garen  <ggaren@apple.com>
1380
1381         Build fix: added #include.
1382
1383         * kjs/interpreter.cpp:
1384
1385 2007-12-07  Geoffrey Garen  <ggaren@apple.com>
1386
1387         Build fix: added #include.
1388
1389         * kjs/grammar.y:
1390
1391 2007-12-07  Geoffrey Garen  <ggaren@apple.com>
1392
1393         Build fix: added #include.
1394
1395         * kjs/function_object.cpp:
1396
1397 2007-12-07  Geoffrey Garen  <ggaren@apple.com>
1398
1399         Reviewed by Sam Weinig.
1400         
1401         Fixed crash seen running layout tests.
1402         
1403         Reverted a change I made earlier today. Added a comment to try to
1404         discourage myself from making this mistake a third time.
1405
1406         * kjs/function.cpp:
1407         (KJS::ActivationImp::mark):
1408         * kjs/function.h:
1409         (KJS::ActivationImp::ActivationImpData::ActivationImpData):
1410
1411 2007-12-07  Geoffrey Garen  <ggaren@apple.com>
1412
1413         Reviewed by Sam Weinig.
1414         
1415         Refactored parsing of global code: Removed the assumption that 
1416         ProgramNode inherits from FunctionBodyNode from the parser.
1417
1418         * kjs/Parser.cpp:
1419         (KJS::Parser::parseProgram):
1420         (KJS::Parser::parseFunctionBody):
1421         (KJS::Parser::parse):
1422         * kjs/Parser.h:
1423         (KJS::Parser::didFinishParsing):
1424         * kjs/function.cpp:
1425         * kjs/grammar.y:
1426         * kjs/nodes.h:
1427
1428 2007-12-07  Geoffrey Garen  <ggaren@apple.com>
1429
1430         Build fix: added JSVariableObject.cpp to the .pri file.
1431
1432         * JavaScriptCore.pri:
1433
1434 2007-12-07  Geoffrey Garen  <ggaren@apple.com>
1435
1436         Build fix: added #include.
1437
1438         * kjs/function.cpp:
1439
1440 2007-12-07  Steve Falkenburg  <sfalken@apple.com>
1441
1442         Re-named our B&I flag from BUILDBOT to PRODUCTION.
1443
1444         Reviewed by Sam Weinig.
1445
1446         * JavaScriptCore.vcproj/JavaScriptCore.make:
1447         * JavaScriptCore.vcproj/testkjs/testkjs.vcproj:
1448
1449 2007-12-07  Geoffrey Garen  <ggaren@apple.com>
1450
1451         Build fix: removed stray name qualification.
1452
1453         * kjs/function.h:
1454         (KJS::ActivationImp::ActivationImp):
1455
1456 2007-12-07  Geoffrey Garen  <ggaren@apple.com>
1457
1458         Build fix: moved functions with qualified names outside of class
1459         declaration.
1460
1461         * kjs/JSVariableObject.h:
1462         (KJS::JSVariableObject::symbolTableGet):
1463         (KJS::JSVariableObject::symbolTablePut):
1464
1465 2007-12-07  Geoffrey Garen  <ggaren@apple.com>
1466
1467         Reviewed by Sam Weinig.
1468
1469         Next step in refactoring JSGlobalObject: Added JSVariableObject class,
1470         and factored symbol-table-related code into it. (JSGlobalObject doesn't
1471         use the symbol table code yet, though.)
1472         
1473         Layout and JS tests, and testapi, pass. SunSpider reports no regression.
1474
1475 2007-12-07  Darin Adler  <darin@apple.com>
1476
1477         Reviewed by Geoff.
1478
1479         - fix http://bugs.webkit.org/show_bug.cgi?id=16185
1480           jsRegExpCompile should not add implicit non-capturing bracket
1481
1482         While this does not make SunSpider faster, it will make many regular
1483         expressions a bit faster.
1484
1485         * pcre/pcre_compile.cpp: Moved CompileData struct in here from the
1486         header since it's private to this file.
1487         (compile_branch): Updated for function name change.
1488         (compile_bracket): Renamed from compile_regex, since, for one thing,
1489         this does not compile an entire regular expression.
1490         (calculateCompiledPatternLengthAndFlags): Removed unused item_count
1491         local variable. Renamed CompileData to cd instead of compile_block
1492         to be consistent with other functions. Added code to set the
1493         needOuterBracket flag if there's at least one "|" at the outer level.
1494         (jsRegExpCompile): Renamed CompileData to cd instead of compile_block
1495         to be consistent with other functions. Removed unneeded "size" field
1496         from the compiled regular expression. If no outer bracket is needed,
1497         then use compile_branch to compile the regular expression.
1498
1499         * pcre/pcre_internal.h: Removed the CompileData struct, which is now
1500         private to pcre_compile.cpp. Removed the size member from JSRegExp.
1501
1502 2007-12-06  Kevin Ollivier  <kevino@theolliviers.com>
1503
1504         MSVC7 build fix due to a compiler bug with placement new and/or
1505         templates and casting.
1506
1507         Reviewed by Darin Adler.
1508
1509         * wtf/Vector.h:
1510         (WTF::::append):
1511
1512 2007-12-06  Darin Adler  <darin@apple.com>
1513
1514         Reviewed by Eric Seidel.
1515
1516         - fix http://bugs.webkit.org/show_bug.cgi?id=16321
1517           new RegExp("[\u0097]{4,6}", "gmy") crashes in DEBUG builds
1518           <rdar://problem/5632992>
1519
1520         Test: fast/js/regexp-oveflow.html
1521
1522         * pcre/pcre_compile.cpp:
1523         (calculateCompiledPatternLengthAndFlags): In the case where a single character
1524         character class is optimized to not use a character class at all, the preflight
1525         code was not setting the lastitemlength variable.
1526
1527 2007-12-05  Mark Rowe  <mrowe@apple.com>
1528
1529         Qt Windows build fix.  Include the time-related headers in the correct place.
1530
1531         * kjs/JSGlobalObject.cpp:
1532         * kjs/interpreter.cpp:
1533
1534 2007-12-05  Darin Adler  <darin@apple.com>
1535
1536         Not reviewed; just undoing a previous commit.
1537
1538         - remove earlier incorrect fix for http://bugs.webkit.org/show_bug.cgi?id=16220
1539           <rdar://problem/5625221> Crash opening www.news.com (CNet)
1540
1541         The real bug was the backwards ?: in the compile function, which Geoff just
1542         fixed. Rolling out the incorrect earlier fix.
1543
1544         * pcre/pcre_compile.cpp: (calculateCompiledPatternLengthAndFlags): Take out
1545         the unneeded preflight change. The regression test proves this is still working
1546         fine, so the bug remains fixed.
1547
1548 2007-12-01  Mark Rowe  <mrowe@apple.com>
1549
1550         Build fix.  Include headers before trying to use the things that they declare.
1551
1552         * kjs/JSImmediate.cpp:
1553         * kjs/nodes.cpp:
1554         * kjs/object.cpp:
1555         * kjs/object_object.cpp:
1556         * kjs/regexp_object.cpp:
1557         * kjs/string_object.cpp:
1558
1559 2007-12-05  Geoffrey Garen  <ggaren@apple.com>
1560
1561         Build fix: added some #includes.
1562
1563         * kjs/JSImmediate.cpp:
1564
1565 2007-12-05  Geoffrey Garen  <ggaren@apple.com>
1566
1567         Build fix: added some #includes.
1568
1569         * kjs/JSGlobalObject.cpp:
1570         * kjs/JSImmediate.cpp:
1571
1572 2007-12-05  Geoffrey Garen  <ggaren@apple.com>
1573
1574         Build fix: Fixed #include spelling.
1575
1576         * kjs/debugger.cpp:
1577
1578 2007-12-05  Geoffrey Garen  <ggaren@apple.com>
1579
1580         Build fix: added #include.
1581
1582         * kjs/debugger.cpp:
1583
1584 2007-12-05  Geoffrey Garen  <ggaren@apple.com>
1585
1586         Build fix: added a forward declaration.
1587
1588         * kjs/debugger.h:
1589
1590 2007-12-05  Geoffrey Garen  <ggaren@apple.com>
1591
1592         Build fix: added an #include.
1593
1594         * kjs/error_object.cpp:
1595
1596 2007-12-05  Geoffrey Garen  <ggaren@apple.com>
1597
1598         Build fix: added an #include.
1599
1600         * kjs/bool_object.cpp:
1601
1602 2007-12-05  Geoffrey Garen  <ggaren@apple.com>
1603
1604         Reviewed by Darin Adler.
1605
1606         Third step in refactoring JSGlobalObject: Moved data members and 
1607         functions accessing data members from Interpreter to JSGlobalObject.
1608         Changed Interpreter member functions to static functions.
1609         
1610         This resolves a bug in global object bootstrapping, where the global
1611         ExecState could be used when uninitialized.
1612         
1613         This is a big change, but it's mostly code motion and renaming.
1614         
1615         Layout and JS tests, and testjsglue and testapi, pass. SunSpider reports
1616         a .7% regression, but Shark sees no difference related to this patch,
1617         and SunSpider reported a .7% speedup from an earlier step in this 
1618         refactoring, so I think it's fair to call that a wash.
1619
1620 2007-12-05  Geoffrey Garen  <ggaren@apple.com>
1621
1622         Reviewed by Darin Adler. (Or vice versa.)
1623         
1624         Fixed ASSERT during run-javascriptcore-tests. (Darin just added the
1625         ASSERT, but the bug wasn't new.)
1626
1627         * pcre/pcre_compile.cpp:
1628         (compile_branch): The ?: operator here was backwards, causing us to
1629         execute the loop too many times, adding stray KET opcodes to the
1630         compiled regular expression.
1631
1632 2007-12-05  Kevin McCullough  <kmccullough@apple.com>
1633
1634         Reviewed by Geoff.
1635
1636         - Wait until local variable data is fully constructed before notifying the debugger of entering
1637         or leaving a call frame.
1638
1639         * kjs/function.cpp:
1640         (KJS::FunctionImp::callAsFunction):
1641         * kjs/nodes.cpp:
1642         (KJS::FunctionBodyNode::execute):
1643
1644 2007-12-05  Mark Rowe  <mrowe@apple.com>
1645
1646         Reviewed by Oliver.
1647
1648         Build fix for GCC 4.2. Cast via a union to avoid strict-aliasing issues.
1649
1650         * wtf/FastMalloc.cpp:
1651         (WTF::):
1652         (WTF::getPageHeap):
1653
1654 2007-12-05  Mark Rowe  <mrowe@apple.com>
1655
1656         Reviewed by Darin.
1657
1658         Fix testkjs in 64-bit.
1659
1660         When built for 64-bit the TCMalloc spin lock uses pthread mutexes rather than a custom spin lock
1661         implemented in assembly.  If we fail to initialize the pthread mutex, attempts to lock or unlock
1662         it will fail and trigger a call to abort.
1663
1664         * wtf/FastMalloc.cpp: Initialize the spin lock so that we can later lock and unlock it.
1665         * wtf/TCSpinLock.h: Add an Init method to the optimised spin lock.
1666
1667 2007-12-04  Oliver Hunt  <oliver@apple.com>
1668
1669         Reviewed by NOBODY (Build fix).
1670
1671         Fix gtk build.
1672
1673         * wtf/TCSystemAlloc.cpp:
1674
1675 2007-12-03  Oliver Hunt  <oliver@apple.com>
1676
1677         Reviewed by Mark Rowe and Geoff Garen.
1678
1679         Merge TCMalloc r38
1680
1681         It also result in a performance progression between 0.5% and 
1682         0.9% depending on the test, however most if not all of this 
1683         gain will be consumed by the overhead involved in the later
1684         change to release memory to the system.
1685
1686         * JavaScriptCore.vcproj/WTF/WTF.vcproj:
1687         * JavaScriptCore.xcodeproj/project.pbxproj:
1688         * wtf/FastMalloc.cpp:
1689         (WTF::KernelSupportsTLS):
1690         (WTF::CheckIfKernelSupportsTLS):
1691         (WTF::):
1692         (WTF::ClassIndex):
1693         (WTF::SLL_Next):
1694         (WTF::SLL_SetNext):
1695         (WTF::SLL_Push):
1696         (WTF::SLL_Pop):
1697         (WTF::SLL_PopRange):
1698         (WTF::SLL_PushRange):
1699         (WTF::SLL_Size):
1700         (WTF::SizeClass):
1701         (WTF::ByteSizeForClass):
1702         (WTF::NumMoveSize):
1703         (WTF::InitSizeClasses):
1704         (WTF::AllocationSize):
1705         (WTF::TCMalloc_PageHeap::GetSizeClassIfCached):
1706         (WTF::TCMalloc_PageHeap::CacheSizeClass):
1707         (WTF::TCMalloc_PageHeap::init):
1708         (WTF::TCMalloc_PageHeap::New):
1709         (WTF::TCMalloc_PageHeap::AllocLarge):
1710         (WTF::TCMalloc_PageHeap::Carve):
1711         (WTF::TCMalloc_PageHeap::Delete):
1712         (WTF::TCMalloc_PageHeap::IncrementalScavenge):
1713         (WTF::PagesToMB):
1714         (WTF::TCMalloc_PageHeap::Dump):
1715         (WTF::TCMalloc_PageHeap::GrowHeap):
1716         (WTF::TCMalloc_PageHeap::Check):
1717         (WTF::ReleaseFreeList):
1718         (WTF::TCMalloc_PageHeap::ReleaseFreePages):
1719         (WTF::TCMalloc_ThreadCache_FreeList::Push):
1720         (WTF::TCMalloc_ThreadCache_FreeList::PushRange):
1721         (WTF::TCMalloc_ThreadCache_FreeList::PopRange):
1722         (WTF::TCMalloc_ThreadCache_FreeList::Pop):
1723         (WTF::TCMalloc_Central_FreeList::length):
1724         (WTF::TCMalloc_Central_FreeList::tc_length):
1725         (WTF::TCMalloc_Central_FreeList::Init):
1726         (WTF::TCMalloc_Central_FreeList::ReleaseListToSpans):
1727         (WTF::TCMalloc_Central_FreeList::EvictRandomSizeClass):
1728         (WTF::TCMalloc_Central_FreeList::MakeCacheSpace):
1729         (WTF::TCMalloc_Central_FreeList::ShrinkCache):
1730         (WTF::TCMalloc_Central_FreeList::InsertRange):
1731         (WTF::TCMalloc_Central_FreeList::RemoveRange):
1732         (WTF::TCMalloc_Central_FreeList::FetchFromSpansSafe):
1733         (WTF::TCMalloc_Central_FreeList::Populate):
1734         (WTF::TCMalloc_ThreadCache::Init):
1735         (WTF::TCMalloc_ThreadCache::Cleanup):
1736         (WTF::TCMalloc_ThreadCache::Allocate):
1737         (WTF::TCMalloc_ThreadCache::Deallocate):
1738         (WTF::TCMalloc_ThreadCache::FetchFromCentralCache):
1739         (WTF::TCMalloc_ThreadCache::ReleaseToCentralCache):
1740         (WTF::TCMalloc_ThreadCache::Scavenge):
1741         (WTF::TCMalloc_ThreadCache::PickNextSample):
1742         (WTF::TCMalloc_ThreadCache::NewHeap):
1743         (WTF::TCMalloc_ThreadCache::GetThreadHeap):
1744         (WTF::TCMalloc_ThreadCache::GetCache):
1745         (WTF::TCMalloc_ThreadCache::GetCacheIfPresent):
1746         (WTF::TCMalloc_ThreadCache::InitTSD):
1747         (WTF::TCMalloc_ThreadCache::CreateCacheIfNecessary):
1748         (WTF::TCMallocStats::ExtractStats):
1749         (WTF::TCMallocStats::DumpStats):
1750         (WTF::TCMallocStats::DumpStackTraces):
1751         (WTF::TCMallocStats::TCMallocImplementation::MarkThreadIdle):
1752         (WTF::TCMallocStats::TCMallocImplementation::ReleaseFreeMemory):
1753         (WTF::TCMallocStats::TCMallocGuard::TCMallocGuard):
1754         (WTF::TCMallocStats::TCMallocGuard::~TCMallocGuard):
1755         (WTF::TCMallocStats::DoSampledAllocation):
1756         (WTF::TCMallocStats::CheckCachedSizeClass):
1757         (WTF::TCMallocStats::CheckedMallocResult):
1758         (WTF::TCMallocStats::SpanToMallocResult):
1759         (WTF::TCMallocStats::do_malloc):
1760         (WTF::TCMallocStats::do_free):
1761         (WTF::TCMallocStats::do_memalign):
1762         (WTF::TCMallocStats::do_malloc_stats):
1763         (WTF::TCMallocStats::do_mallopt):
1764         (WTF::TCMallocStats::do_mallinfo):
1765         (WTF::TCMallocStats::realloc):
1766         (WTF::TCMallocStats::cpp_alloc):
1767         (WTF::TCMallocStats::operator new):
1768         (WTF::TCMallocStats::):
1769         (WTF::TCMallocStats::operator new[]):
1770         (WTF::TCMallocStats::malloc_stats):
1771         (WTF::TCMallocStats::mallopt):
1772         (WTF::TCMallocStats::mallinfo):
1773         * wtf/TCPackedCache.h: Added.
1774         (PackedCache::PackedCache):
1775         (PackedCache::Put):
1776         (PackedCache::Has):
1777         (PackedCache::GetOrDefault):
1778         (PackedCache::Clear):
1779         (PackedCache::EntryToValue):
1780         (PackedCache::EntryToUpper):
1781         (PackedCache::KeyToUpper):
1782         (PackedCache::UpperToPartialKey):
1783         (PackedCache::Hash):
1784         (PackedCache::KeyMatch):
1785         * wtf/TCPageMap.h:
1786         (TCMalloc_PageMap2::PreallocateMoreMemory):
1787         * wtf/TCSystemAlloc.cpp:
1788         (TCMalloc_SystemRelease):
1789         * wtf/TCSystemAlloc.h:
1790
1791 2007-12-04  Anders Carlsson  <andersca@apple.com>
1792
1793         Reviewed by Sam.
1794
1795         Make isSafeScript const.
1796         
1797         * kjs/JSGlobalObject.h:
1798         (KJS::JSGlobalObject::isSafeScript):
1799
1800 2007-12-04  Darin Adler  <darin@apple.com>
1801
1802         Reviewed by Geoff.
1803
1804         - fix first part of http://bugs.webkit.org/show_bug.cgi?id=16220
1805           <rdar://problem/5625221> Crash opening www.news.com (CNet)
1806
1807         Test: fast/js/regexp-overflow.html
1808
1809         * pcre/pcre_compile.cpp:
1810         (calculateCompiledPatternLengthAndFlags): Add room for the additional BRA/KET that
1811         was generated in the compile code but not taken into account here.
1812
1813 2007-12-03  Darin Adler  <darin@apple.com>
1814
1815         Reviewed by Geoff.
1816
1817         - fix http://bugs.webkit.org/show_bug.cgi?id=15618
1818           <rdar://problem/5619353> REGRESSION: Stack overflow/crash in KJS::equal (15618)
1819
1820         Test: fast/js/recursion-limit-equal.html
1821
1822         * kjs/operations.cpp: (KJS::equal): Check the exception from toPrimitive.
1823
1824 2007-12-03  Dan Bernstein  <mitz@apple.com>
1825
1826         - fix a copy-and-paste-o
1827
1828         * bindings/npruntime.cpp:
1829         (_NPN_GetIntIdentifier):
1830
1831 2007-12-03  Dan Bernstein  <mitz@apple.com>
1832
1833         Reviewed by Darin Adler.
1834
1835         - fix an ASSERT when getIntIdentifier is called with 0 or -1
1836
1837         * bindings/npruntime.cpp:
1838         (_NPN_GetIntIdentifier): We cannot use the hashmap for 0 and -1 since
1839         they are the empty value and the deleted value. Instead, keep the
1840         identifiers for those two integers in a static array.
1841
1842 2007-12-02  Darin Adler  <darin@apple.com>
1843
1844         Reviewed by Mitz.
1845
1846         - fix http://bugs.webkit.org/show_bug.cgi?id=15848
1847           <rdar://problem/5619330> REGRESSION: Assertion failure viewing comments page on digg.com
1848
1849         Test: fast/js/sparse-array.html
1850
1851         * kjs/array_instance.cpp:
1852         (KJS::ArrayInstance::inlineGetOwnPropertySlot): Check sparse array cutoff before looking
1853         in hash map. Can't avoid the branch because we can't look for 0 in the hash.
1854         (KJS::ArrayInstance::deleteProperty): Ditto.
1855
1856 2007-12-02  Geoffrey Garen  <ggaren@apple.com>
1857
1858         Build fix: added an #include.
1859
1860         * kjs/collector.cpp:
1861
1862 2007-12-02  Geoffrey Garen  <ggaren@apple.com>
1863
1864         Reviewed by Eric Seidel.
1865
1866         Second step in refactoring JSGlobalObject: moved virtual functions from
1867         Interpreter to JSGlobalObject.
1868         
1869         Layout and JS tests pass. SunSpider reports a .7% speedup -- don't 
1870         believe his lies.
1871
1872 2007-12-01  Alp Toker  <alp@atoker.com>
1873
1874         Reviewed by Adam Roben.
1875
1876         http://bugs.webkit.org/show_bug.cgi?id=16228
1877         kJSClassDefinitionEmpty is not exported with JS_EXPORT
1878
1879         Add JS_EXPORT to kJSClassDefinitionEmpty.
1880
1881         Make the gcc compiler check take precedence over the WIN32||_WIN32
1882         check to ensure that symbols are exported on Windows when using gcc.
1883
1884         Add a TODO referencing the bug about JS_EXPORT in the Win build
1885         (http://bugs.webkit.org/show_bug.cgi?id=16227)
1886
1887         Don't define JS_EXPORT as 'extern' when the compiler is unknown since
1888         it would result in the incorrect expansion:
1889
1890           extern extern const JSClassDefinition kJSClassDefinitionEmpty;
1891
1892         (This was something we inherited from CFBase.h that doesn't make sense
1893         for JSBase.h)
1894
1895         * API/JSBase.h:
1896         * API/JSObjectRef.h:
1897
1898 2007-11-30  Geoffrey Garen  <ggaren@apple.com>
1899
1900         Reviewed by Beth Dakin.
1901         
1902         Reversed the ownership relationship between Interpreter and JSGlobalObject.
1903         Now, the JSGlobalObject owns the Interpreter, and top-level objects
1904         that need the two to persist just protect the JSGlobalObject from GC.
1905         
1906         Global object bootstrapping looks a little odd right now, but it will
1907         make much more sense soon, after further rounds of refactoring.
1908
1909         * bindings/runtime_root.h: Made this class inherit from RefCounted,
1910         to avoid code duplication.
1911
1912         * kjs/collector.cpp:
1913         (KJS::Collector::collect): No need to give special GC treatment to 
1914         Interpreters, since we mark their global objects, which mark them.
1915
1916         * kjs/interpreter.cpp:
1917         (KJS::Interpreter::mark): No need to mark our global object, since it
1918         marks us.
1919         * kjs/interpreter.h: Don't inherit from RefCounted -- JSGlobalObject 
1920         owns us directly.
1921
1922         * kjs/testkjs.cpp: Modified to follow the new rules.
1923         (createGlobalObject):
1924         (runWithScripts):
1925
1926 2007-11-30  Brent Fulgham  <bfulgham@gmail.com>
1927
1928         Reviewed by Eric.
1929
1930         * ChangeLog:
1931         * pcre/pcre_compile.cpp:
1932         (compile_branch):
1933
1934 2007-11-30  Eric Seidel  <eric@webkit.org>
1935
1936         No review, build fix only.
1937         
1938         Fix uninitialized var warnings in release build.
1939
1940         * JavaScriptCore.xcodeproj/project.pbxproj:
1941         * pcre/pcre_compile.cpp:
1942         (compile_regex):
1943
1944 2007-11-30  Darin Adler  <darin@apple.com>
1945
1946         Reviewed by Adam Roben.
1947
1948         - fix http://bugs.webkit.org/show_bug.cgi?id=16207
1949           JavaScript regular expressions should match UTF-16 code units rather than characters
1950
1951         SunSpider says this is 5.5% faster on the regexp test, 0.4% faste overall.
1952
1953         Test: fast/js/regexp-non-bmp.html
1954
1955         Renamed ANY_CHAR to NOT_NEWLINE to more-accurately reflect its meaning.
1956
1957         * pcre/pcre_compile.cpp:
1958         (compile_branch): Removed calls to the UTF-16 character accessor functions, replacing
1959         them with simple pointer dereferences in some cases, and no code at all in others.
1960         (calculateCompiledPatternLengthAndFlags): Ditto.
1961
1962         * pcre/pcre_exec.cpp:
1963         (match): Fixed indentation of some case labels (including all the BEGIN_OPCODE).
1964         Removed calls to the UTF-16 character accessor functions, replacing them with simple
1965         pointer dereferences in some cases, and no code at all in others. Also removed some
1966         explicit UTF-16 support code in a few cases. Removed the unneeded "UTF-8" code path
1967         in the ANY_CHAR repeat code, and in another case, eliminated the code to check against
1968         end_subject in because it is already done outside the loop.
1969         (jsRegExpExecute):
1970
1971         * pcre/pcre_internal.h: Removed all the UTF-16 helper functions.
1972
1973 2007-11-30  Eric Seidel  <eric@webkit.org>
1974
1975         Reviewed by darin.
1976         
1977         PCRE crashes under GuardMalloc
1978         http://bugs.webkit.org/show_bug.cgi?id=16127
1979         check against patternEnd to make sure we don't walk off the end of the string
1980
1981         * pcre/pcre_compile.cpp:
1982         (compile_branch):
1983         (calculateCompiledPatternLengthAndFlags):
1984
1985 2007-11-30  Eric Seidel  <eric@webkit.org>
1986
1987         Reviewed by Maciej.
1988         
1989         Fix layout test regressions caused by r28186
1990         http://bugs.webkit.org/show_bug.cgi?id=16195
1991         change first_byte and req_byte back to shorts instead of chars
1992         (I think PCRE stuffs information in the high bits) 
1993
1994         * pcre/pcre_internal.h:
1995
1996 2007-11-29  Oliver Hunt  <oliver@apple.com>
1997
1998         Reviewed by Maciej and Darin.
1999
2000         Make the JS collector work with multiple threads 
2001
2002         Under heavy contention it was possible the GC to suspend other
2003         threads inside the pthread spinlock, which could lead to the GC
2004         thread blocking on the pthread spinlock itself.
2005
2006         We now determine and store each thread's stack base when it is
2007         registered, thus removing the need for any calls to pthread_get_stackaddr_np
2008         that needed the pthread spinlock.
2009
2010         * kjs/collector.cpp:
2011         (KJS::Collector::Thread::Thread):
2012         (KJS::Collector::registerThread):
2013         (KJS::Collector::markOtherThreadConservatively):
2014
2015 2007-11-29  Adam Roben  <aroben@apple.com>
2016
2017         Windows build fix
2018
2019         Removed some unreachable code (ironically, the code was some
2020         ASSERT_NOT_REACHED()s).
2021
2022         * pcre/pcre_compile.cpp:
2023         (compile_branch):
2024         * pcre/pcre_exec.cpp:
2025         (match):
2026
2027 2007-11-29  Eric Seidel  <eric@webkit.org>
2028
2029         Reviewed by Mark Rowe.
2030         
2031         Fix for --guard crash of fast/js/regexp-charclass-crash introduced by r28151.
2032
2033         * pcre/pcre_compile.cpp:
2034         (is_anchored):
2035
2036 2007-11-28  Mark Rowe  <mrowe@apple.com>
2037
2038         Gtk build fix.  Rubber-stamped by Eric.
2039
2040         * pcre/pcre_exec.cpp:
2041         (match): Add braces around the body of the case statement to prevent
2042         wanings about jumps across the initialization of a variable.
2043
2044 2007-11-29  Eric Seidel  <eric@webkit.org>
2045
2046         Reviewed by Mark Rowe.
2047         
2048         Attempt to fix non-mac builds after PCRE cleanup.
2049
2050         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
2051         * JavaScriptCoreSources.bkl:
2052         * pcre/pcre.pri:
2053
2054 2007-11-28  Eric Seidel  <eric@webkit.org>
2055
2056         Reviewed by Maciej.
2057
2058         Centralize code for subjectPtr adjustments using inlines, only ever check for a single
2059         trailing surrogate (as UTF16 only allows one), possibly fix PCRE bugs involving char
2060         classes and garbled UTF16 strings.
2061
2062         * pcre/pcre_exec.cpp:
2063         (match):
2064         (jsRegExpExecute):
2065         * pcre/pcre_internal.h:
2066         (getPreviousChar):
2067         (movePtrToPreviousChar):
2068         (movePtrToNextChar):
2069         (movePtrToStartOfCurrentChar):
2070
2071 2007-11-28  Eric Seidel  <eric@webkit.org>
2072
2073         Reviewed by Maciej.
2074
2075         change getChar* functions to return result and push 'c' into local scopes for clarity
2076
2077         * pcre/pcre_compile.cpp:
2078         (compile_branch):
2079         (calculateCompiledPatternLengthAndFlags):
2080         * pcre/pcre_exec.cpp:
2081         (match):
2082         * pcre/pcre_internal.h:
2083         (getChar):
2084         (getCharAndAdvance):
2085         (getCharAndLength):
2086         (getCharAndAdvanceIfSurrogate):
2087
2088 2007-11-28  Eric Seidel  <eric@webkit.org>
2089
2090         Reviewed by Sam.
2091
2092         Comment cleanup
2093
2094         * pcre/pcre_exec.cpp:
2095         (match):
2096
2097 2007-11-26  Eric Seidel  <eric@webkit.org>
2098
2099         Reviewed by Sam.
2100
2101         Further cleanups to calculateCompiledPatternLengthAndFlags
2102
2103         * pcre/pcre_compile.cpp:
2104         (calculateCompiledPatternLengthAndFlags):
2105         * pcre/pcre_internal.h:
2106
2107 2007-11-26  Eric Seidel  <eric@webkit.org>
2108
2109         Reviewed by Sam.
2110
2111         Give consistent naming to the RegExp options/compile flags
2112
2113         * pcre/pcre_compile.cpp:
2114         (compile_branch):
2115         (is_anchored):
2116         (find_firstassertedchar):
2117         (printCompiledRegExp):
2118         (jsRegExpCompile):
2119         * pcre/pcre_exec.cpp:
2120         (jsRegExpExecute):
2121         * pcre/pcre_internal.h:
2122
2123 2007-11-26  Eric Seidel  <eric@webkit.org>
2124
2125         Reviewed by Sam.
2126
2127         Pull first_byte and req_byte optimizations out into separate static funtions, SunSpider reported this as a win.
2128
2129         * pcre/pcre_exec.cpp:
2130         (tryFirstByteOptimization):
2131         (tryRequiredByteOptimization):
2132         (jsRegExpExecute):
2133         * pcre/pcre_internal.h:
2134
2135 2007-11-26  Eric Seidel  <eric@webkit.org>
2136
2137         Reviewed by Maciej.
2138
2139         give PCRE_MULTILINE a better name: OptionMatchAcrossMultipleLines
2140
2141         * pcre/pcre_compile.cpp:
2142         (compile_branch):
2143         (is_anchored):
2144         (printCompiledRegExp):
2145         (jsRegExpCompile):
2146         * pcre/pcre_exec.cpp:
2147         (jsRegExpExecute):
2148         * pcre/pcre_internal.h:
2149
2150 2007-11-26  Eric Seidel  <eric@webkit.org>
2151
2152         Reviewed by Oliver.
2153
2154         Deprecate jsRegExpExecute's offset-vector fallback code
2155
2156         * pcre/pcre_exec.cpp:
2157         (jsRegExpExecute):
2158
2159 2007-11-26  Eric Seidel  <eric@webkit.org>
2160
2161         Reviewed by Maciej.
2162
2163         Make cur_is_word and prev_is_word locals, and change OP_ANY to OP_ANY_CHAR for clarity
2164
2165         * pcre/pcre_compile.cpp:
2166         (find_fixedlength):
2167         (compile_branch):
2168         (canApplyFirstCharOptimization):
2169         * pcre/pcre_exec.cpp:
2170         (match):
2171         * pcre/pcre_internal.h:
2172
2173 2007-11-26  Eric Seidel  <eric@webkit.org>
2174
2175         Reviewed by Mitz & Maciej.
2176
2177         Change _NC operators to use _IGNORING_CASE for clarity
2178
2179         * pcre/pcre_compile.cpp:
2180         (find_fixedlength):
2181         (compile_branch):
2182         (find_firstassertedchar):
2183         * pcre/pcre_exec.cpp:
2184         (match):
2185         * pcre/pcre_internal.h:
2186
2187 2007-11-26  Eric Seidel  <eric@webkit.org>
2188
2189         Reviewed by Mitz.
2190
2191         Remove branch from return
2192
2193         * pcre/pcre_compile.cpp:
2194         (compile_branch):
2195         * pcre/pcre_exec.cpp:
2196         (match):
2197
2198 2007-11-26  Eric Seidel  <eric@webkit.org>
2199
2200         Reviewed by Maciej.
2201
2202         Add repeatInformationFromInstructionOffset inline
2203
2204         * pcre/pcre_exec.cpp:
2205         (repeatInformationFromInstructionOffset):
2206         (match):
2207
2208 2007-11-26  Eric Seidel  <eric@webkit.org>
2209
2210         Reviewed by Maciej.
2211
2212         Remove no longer used error code JSRegExpErrorMatchLimit
2213
2214         * kjs/regexp.cpp:
2215         (KJS::RegExp::match):
2216         * pcre/pcre.h:
2217         * pcre/pcre_internal.h:
2218
2219 2007-11-26  Eric Seidel  <eric@webkit.org>
2220
2221         Reviewed by Sam.
2222
2223         Make i locally scoped for better code clarity
2224
2225         * pcre/pcre_exec.cpp:
2226         (match):
2227
2228 2007-11-26  Eric Seidel  <eric@webkit.org>
2229
2230         Reviewed by Maciej.
2231
2232         Give subjectPtr and instructionPtr sane names, reduce size of MatchFrame for a 0.2% speedup.
2233
2234         * pcre/pcre_compile.cpp:
2235         (compile_branch):
2236         (calculateCompiledPatternLengthAndFlags):
2237         * pcre/pcre_exec.cpp:
2238         (match_ref):
2239         (MatchStack::pushNewFrame):
2240         (getUTF8CharAndIncrementLength):
2241         (match):
2242         * pcre/pcre_internal.h:
2243         (getChar):
2244         (getCharAndAdvance):
2245         (getCharAndLength):
2246         (getCharAndAdvanceIfSurrogate):
2247         * pcre/pcre_xclass.cpp:
2248         (getUTF8CharAndAdvancePointer):
2249
2250 2007-11-26  Eric Seidel  <eric@webkit.org>
2251
2252         Reviewed by Sam.
2253
2254         Small speedup (0.7%) by simplifying canUseStackBufferForNextFrame() check
2255
2256         * pcre/pcre_exec.cpp:
2257         (MatchStack::MatchStack):
2258         (MatchStack::popCurrentFrame):
2259
2260 2007-11-25  Eric Seidel  <eric@webkit.org>
2261
2262         Reviewed by Sam.
2263
2264         Lower MATCH_LIMIT_RECURSION to more sane levels to prevent hangs on run-javascriptcore-tests
2265
2266         * pcre/pcre_internal.h:
2267
2268 2007-11-25  Eric Seidel  <eric@webkit.org>
2269
2270         Reviewed by Maciej.
2271
2272         Remove match_is_group variable for another 5% speedup
2273
2274         * pcre/pcre_compile.cpp:
2275         * pcre/pcre_exec.cpp:
2276         (startNewGroup):
2277         (match):
2278
2279 2007-11-28  Eric Seidel  <eric@webkit.org>
2280
2281         Reviewed by Sam.
2282
2283         Abstract frame variables into locals and args
2284
2285         * pcre/pcre_compile.cpp:
2286         (compile_branch):
2287         * pcre/pcre_exec.cpp:
2288         (match):
2289         * pcre/pcre_internal.h:
2290
2291 2007-11-28  Eric Seidel  <eric@webkit.org>
2292
2293         Reviewed by Sam.
2294
2295         Section off MatchData arguments into args struct
2296
2297         * pcre/pcre_exec.cpp:
2298         (MatchStack::pushNewFrame):
2299         (match):
2300
2301 2007-11-24  Eric Seidel  <eric@webkit.org>
2302
2303         Reviewed by Sam.
2304
2305         Remove redundant eptrblock struct
2306
2307         * pcre/pcre_exec.cpp:
2308         (MatchStack::pushNewFrame):
2309         (match):
2310
2311 2007-11-24  Eric Seidel  <eric@webkit.org>
2312
2313         Reviewed by Maciej.
2314
2315         Remove redundant match_call_count and move recursion check out of super-hot code path
2316         SunSpider says this is at least an 8% speedup for regexp.
2317
2318         * pcre/pcre_exec.cpp:
2319         (MatchStack::MatchStack):
2320         (MatchStack::pushNewFrame):
2321         (MatchStack::popCurrentFrame):
2322         (MatchStack::popAllFrames):
2323         (match):
2324         (jsRegExpExecute):
2325         * pcre/pcre_internal.h:
2326
2327 2007-11-24  Eric Seidel  <eric@webkit.org>
2328
2329         Reviewed by Sam.
2330
2331         Get rid of GETCHAR* macros, replacing them with better named inlines
2332
2333         * pcre/pcre_compile.cpp:
2334         (compile_branch):
2335         (calculateCompiledPatternLengthAndFlags):
2336         * pcre/pcre_exec.cpp:
2337         (match):
2338         * pcre/pcre_internal.h:
2339         (getCharAndAdvance):
2340         (getCharAndLength):
2341         (getCharAndAdvanceIfSurrogate):
2342
2343 2007-11-24  Eric Seidel  <eric@webkit.org>
2344
2345         Reviewed by Sam.
2346
2347         Further cleanup GET/PUT inlines
2348
2349         * pcre/pcre_internal.h:
2350         (putOpcodeValueAtOffset):
2351         (getOpcodeValueAtOffset):
2352         (putOpcodeValueAtOffsetAndAdvance):
2353         (put2ByteOpcodeValueAtOffset):
2354         (get2ByteOpcodeValueAtOffset):
2355         (put2ByteOpcodeValueAtOffsetAndAdvance):
2356
2357 2007-11-24  Eric Seidel  <eric@webkit.org>
2358
2359         Reviewed by Sam.
2360
2361         Give GET, PUT better names, and add (poor) moveOpcodePtrPastAnyAlternateBranches
2362
2363         * pcre/pcre_compile.cpp:
2364         (firstSignificantOpCodeSkippingAssertions):
2365         (find_fixedlength):
2366         (complete_callout):
2367         (compile_branch):
2368         (compile_regex):
2369         (is_anchored):
2370         (canApplyFirstCharOptimization):
2371         (find_firstassertedchar):
2372         * pcre/pcre_exec.cpp:
2373         (match):
2374         * pcre/pcre_internal.h:
2375         (putOpcodeValueAtOffset):
2376         (getOpcodeValueAtOffset):
2377         (putOpcodeValueAtOffsetAndAdvance):
2378         (put2ByteOpcodeValueAtOffset):
2379         (get2ByteOpcodeValueAtOffset):
2380         (moveOpcodePtrPastAnyAlternateBranches):
2381         * pcre/pcre_ucp_searchfuncs.cpp:
2382         (_pcre_ucp_othercase):
2383
2384 2007-11-24  Eric Seidel  <eric@webkit.org>
2385
2386         Reviewed by Sam.
2387
2388         Add inlines for toLowerCase, isWordChar, isSpaceChar for further regexp speedup
2389
2390         * pcre/pcre_compile.cpp:
2391         (compile_branch):
2392         (jsRegExpCompile):
2393         * pcre/pcre_exec.cpp:
2394         (match):
2395         (jsRegExpExecute):
2396         * pcre/pcre_internal.h:
2397         (toLowerCase):
2398         (flipCase):
2399         (classBitmapForChar):
2400         (charTypeForChar):
2401         (isWordChar):
2402         (isSpaceChar):
2403         (CompileData::CompileData):
2404         * pcre/pcre_xclass.cpp:
2405         (_pcre_xclass):
2406
2407 2007-11-24  Eric Seidel  <eric@webkit.org>
2408
2409         Reviewed by Sam.
2410
2411         cleanup _pcre_ucp_othercase
2412
2413         * pcre/pcre_ucp_searchfuncs.cpp:
2414         (_pcre_ucp_othercase):
2415
2416 2007-11-24  Eric Seidel  <eric@webkit.org>
2417
2418         Reviewed by Maciej.
2419
2420         Use better variable names for case ignoring options
2421
2422         * pcre/pcre_compile.cpp:
2423         (compile_branch):
2424         (find_firstassertedchar):
2425         (printCompiledRegExp):
2426         (jsRegExpCompile):
2427         * pcre/pcre_exec.cpp:
2428         (match_ref):
2429         (match):
2430         (jsRegExpExecute):
2431         * pcre/pcre_internal.h:
2432
2433 2007-11-24  Eric Seidel  <eric@webkit.org>
2434
2435         Reviewed by Sam.
2436
2437         split first_significant_code into two simpler functions
2438
2439         * pcre/pcre_compile.cpp:
2440         (firstSignificantOpCode):
2441         (firstSignificantOpCodeSkippingAssertions):
2442         (is_anchored):
2443         (canApplyFirstCharOptimization):
2444         (find_firstassertedchar):
2445
2446 2007-11-24  Eric Seidel  <eric@webkit.org>
2447
2448         Reviewed by Sam.
2449
2450         clean up is_counted_repeat
2451
2452         * pcre/pcre_compile.cpp:
2453         (is_counted_repeat):
2454
2455 2007-11-24  Eric Seidel  <eric@webkit.org>
2456
2457         Reviewed by Sam.
2458
2459         clean up check_escape
2460
2461         * pcre/pcre_compile.cpp:
2462         (check_escape):
2463
2464 2007-11-24  Eric Seidel  <eric@webkit.org>
2465
2466         Reviewed by Sam.
2467
2468         Reformat find_fixedlength
2469
2470         * pcre/pcre_compile.cpp:
2471         (find_fixedlength):
2472
2473 2007-11-24  Eric Seidel  <eric@webkit.org>
2474
2475         Reviewed by Sam.
2476
2477         reformat is_anchored
2478
2479         * pcre/pcre_compile.cpp:
2480         (is_anchored):
2481
2482 2007-11-24  Eric Seidel  <eric@webkit.org>
2483
2484         Reviewed by Maciej.
2485
2486         Remove unused function could_be_empty_branch
2487
2488         * pcre/pcre_compile.cpp:
2489         (first_significant_code):
2490         (find_fixedlength):
2491         (compile_branch):
2492         (canApplyFirstCharOptimization):
2493
2494 2007-11-24  Eric Seidel  <eric@webkit.org>
2495
2496         Reviewed by Sam.
2497
2498         Pass around MatchData objects by reference
2499
2500         * pcre/pcre_exec.cpp:
2501         (pchars):
2502         (match_ref):
2503         (match):
2504         (jsRegExpExecute):
2505
2506 2007-11-24  Eric Seidel  <eric@webkit.org>
2507
2508         Reviewed by Sam.
2509
2510         give PCRE_STARTLINE a better name and rename match_data to MatchData
2511
2512         * pcre/pcre_compile.cpp:
2513         (compile_branch):
2514         (canApplyFirstCharOptimization):
2515         (find_firstassertedchar):
2516         (printCompiledRegExp):
2517         (jsRegExpCompile):
2518         * pcre/pcre_exec.cpp:
2519         (pchars):
2520         (jsRegExpExecute):
2521         * pcre/pcre_internal.h:
2522
2523 2007-11-24  Eric Seidel  <eric@webkit.org>
2524
2525         Reviewed by Sam.
2526
2527         Clean up find_firstassertedchar
2528
2529         * pcre/pcre_compile.cpp:
2530         (get_othercase_range):
2531         (find_firstassertedchar):
2532         (calculateCompiledPatternLengthAndFlags):
2533
2534 2007-11-24  Eric Seidel  <eric@webkit.org>
2535
2536         Reviewed by Tim Hatcher.
2537
2538         Pass around CompileData& instead of CompileData*
2539
2540         * pcre/pcre_compile.cpp:
2541         (compile_branch):
2542         (jsRegExpCompile):
2543
2544 2007-11-24  Eric Seidel  <eric@webkit.org>
2545
2546         Reviewed by Sam.
2547
2548         Clean up compile_branch, move _pcre_ord2utf8, and rename CompileData
2549
2550         * JavaScriptCore.xcodeproj/project.pbxproj:
2551         * pcre/pcre_compile.cpp:
2552         (_pcre_ord2utf8):
2553         (calculateCompiledPatternLengthAndFlags):
2554         (jsRegExpCompile):
2555         * pcre/pcre_internal.h:
2556         * pcre/pcre_ord2utf8.cpp: Removed.
2557
2558 2007-11-24  Eric Seidel  <eric@webkit.org>
2559
2560         Reviewed by Sam.
2561
2562         removing more macros
2563
2564         * pcre/pcre_compile.cpp:
2565         (could_be_empty_branch):
2566         (compile_branch):
2567         (calculateCompiledPatternLengthAndFlags):
2568         * pcre/pcre_exec.cpp:
2569         (match):
2570         (jsRegExpExecute):
2571         * pcre/pcre_internal.h:
2572         * pcre/pcre_xclass.cpp:
2573
2574 2007-11-24  Eric Seidel  <eric@webkit.org>
2575
2576         Reviewed by Maciej.
2577
2578         clean up formating in compile_branch
2579
2580         * pcre/pcre_compile.cpp:
2581         (compile_branch):
2582
2583 2007-11-24  Eric Seidel  <eric@webkit.org>
2584
2585         Reviewed by Sam.
2586
2587         Fix spacing for read_repeat_counts
2588
2589         * pcre/pcre_compile.cpp:
2590         (read_repeat_counts):
2591
2592 2007-11-24  Eric Seidel  <eric@webkit.org>
2593
2594         Reviewed by Sam.
2595
2596         Get rid of PCRE custom char types
2597
2598         * pcre/pcre_compile.cpp:
2599         (check_escape):
2600         (complete_callout):
2601         (compile_branch):
2602         (compile_regex):
2603         (calculateCompiledPatternLengthAndFlags):
2604         (jsRegExpCompile):
2605         * pcre/pcre_exec.cpp:
2606         (match_ref):
2607         (match):
2608         (jsRegExpExecute):
2609         * pcre/pcre_internal.h:
2610
2611 2007-11-24  Eric Seidel  <eric@webkit.org>
2612
2613         Reviewed by Sam.
2614
2615         reformat get_othercase_range
2616
2617         * pcre/pcre_compile.cpp:
2618         (get_othercase_range):
2619
2620 2007-11-24  Eric Seidel  <eric@webkit.org>
2621
2622         Reviewed by Maciej.
2623
2624         Remove register keyword and more cleanup
2625
2626         * pcre/pcre_compile.cpp:
2627         (find_fixedlength):
2628         (compile_branch):
2629         (is_anchored):
2630         (is_startline):
2631         (find_firstassertedchar):
2632         (calculateCompiledPatternLengthAndFlags):
2633         (jsRegExpCompile):
2634         * pcre/pcre_exec.cpp:
2635         (MatchStack::canUseStackBufferForNextFrame):
2636         (MatchStack::allocateNextFrame):
2637         (MatchStack::pushNewFrame):
2638         (MatchStack::frameIsStackAllocated):
2639         (MatchStack::popCurrentFrame):
2640         (MatchStack::unrollAnyHeapAllocatedFrames):
2641         (getUTF8CharAndIncrementLength):
2642         (match):
2643         (jsRegExpExecute):
2644         * pcre/pcre_internal.h:
2645         (PUT2INC):
2646         (isLeadingSurrogate):
2647         (isTrailingSurrogate):
2648         (decodeSurrogatePair):
2649         (getChar):
2650         * pcre/pcre_ord2utf8.cpp:
2651         (_pcre_ord2utf8):
2652         * pcre/pcre_xclass.cpp:
2653         (getUTF8CharAndAdvancePointer):
2654         (_pcre_xclass):
2655
2656 2007-11-24  Eric Seidel  <eric@webkit.org>
2657
2658         Reviewed by Maciej.
2659
2660         Clean up jsRegExpExecute
2661
2662         * pcre/pcre_compile.cpp:
2663         (returnError):
2664         (jsRegExpCompile):
2665         * pcre/pcre_exec.cpp:
2666         (jsRegExpExecute):
2667         * pcre/pcre_internal.h:
2668
2669 2007-11-29  Oliver Hunt  <oliver@apple.com>
2670
2671         Reviewed by Geoff.
2672
2673         Merging updated system alloc and spinlock code from r38 of TCMalloc.
2674
2675         This is needed as a precursor to the merge of TCMalloc proper.
2676
2677         * wtf/FastMalloc.cpp:
2678         (WTF::TCMalloc_PageHeap::GrowHeap):
2679         * wtf/TCSpinLock.h:
2680         (TCMalloc_SpinLock::TCMalloc_SpinLock):
2681         (TCMalloc_SpinLock::):
2682         (TCMalloc_SpinLock::Lock):
2683         (TCMalloc_SpinLock::Unlock):
2684         (TCMalloc_SpinLock::IsHeld):
2685         * wtf/TCSystemAlloc.cpp:
2686         (TrySbrk):
2687         (TryMmap):
2688         (TryVirtualAlloc):
2689         (TryDevMem):
2690         (TCMalloc_SystemAlloc):
2691         * wtf/TCSystemAlloc.h:
2692
2693 2007-11-28  Brady Eidson <beidson@apple.com>
2694
2695         Reviewed by Geoff
2696
2697         Add copyKeysToVector utility, mirroring copyValuesToVector
2698         Also change the copyValuesToVector implementation to be a little more attractive
2699
2700         * wtf/HashMap.h:
2701         (WTF::copyKeysToVector):
2702         (WTF::copyValuesToVector):
2703
2704 2007-11-27  Alp Toker  <alp@atoker.com>
2705
2706         Reviewed by Mark Rowe.
2707
2708         Add a list of public JavaScriptCore headers for installation.
2709
2710         This follows the convention used for the Qt and GTK+ header lists.
2711
2712         * headers.pri: Added.
2713
2714 2007-11-27  Alp Toker  <alp@atoker.com>
2715
2716         Prospective MSVC build fix.
2717
2718         Roll back dllexport/dllimport support for now.
2719
2720         * API/JSBase.h:
2721
2722 2007-11-27  Alp Toker  <alp@atoker.com>
2723
2724         Reviewed by Maciej.
2725
2726         http://bugs.webkit.org/show_bug.cgi?id=15569
2727         [gtk] GTK JavaScriptCore needs to export symbols for JSC API and WTF
2728
2729         Introduce JS_EXPORT to mark symbols to be exported as public API.
2730
2731         Export all public symbols in the JavaScriptCore C API.
2732
2733         This matches conventions for exporting symbols set by the CF and CG
2734         frameworks.
2735
2736         * API/JSBase.h:
2737         * API/JSContextRef.h:
2738         * API/JSObjectRef.h:
2739         * API/JSStringRef.h:
2740         * API/JSStringRefBSTR.h:
2741         * API/JSStringRefCF.h:
2742         * API/JSValueRef.h:
2743
2744 2007-11-27  Anders Carlsson  <andersca@apple.com>
2745
2746         Reviewed by Adam.
2747
2748         Make PropertyNameArray and ScopeChain COMEnumVariant friendly.
2749         
2750         * kjs/PropertyNameArray.cpp:
2751         (KJS::PropertyNameArray::swap):
2752         Implement PropertyNameArray::swap.
2753         
2754         * kjs/PropertyNameArray.h:
2755         Add ValueType typedef. Replace PropertyNameArrayIterator with 
2756         PropertyNameArray::const_iterator.
2757         
2758         * kjs/nodes.cpp:
2759         (KJS::ForInNode::execute):
2760         * kjs/scope_chain.cpp:
2761         (KJS::ScopeChain::print):
2762         Update for changes to PropertyNameArray.
2763         
2764         * kjs/scope_chain.h:
2765         Add const_iterator and ValueType typedef.
2766         
2767 2007-11-27  Anders Carlsson  <andersca@apple.com>
2768
2769         Reviewed by Darin.
2770
2771         Add a ValueType typedef.
2772         
2773         * wtf/Vector.h:
2774
2775 2007-11-26  Darin Adler  <darin@apple.com>
2776
2777         Reviewed by Mitz.
2778
2779         - fix http://bugs.webkit.org/show_bug.cgi?id=16096
2780           REGRESSION (r26653-r26699): Plaxo.com addressbook does not load in webkit nightlies
2781
2782         Test: fast/js/regexp-overflow.html
2783
2784         * pcre/pcre_compile.cpp: (calculateCompiledPatternLengthAndFlags):
2785         Removed a stray "ptr++" that I added by accident when merging the
2786         changes between PCRE 6.4 and 6.5. 
2787
2788 2007-11-26  Geoffrey Garen  <ggaren@apple.com>
2789
2790         Reviewed by Kevin McCullough.
2791         
2792         Fixed <rdar://problem/5597937> REGRESSION (r27126): Drosera does not 
2793         show variables (can't enumerate ActivationImp properties)
2794         
2795         Implemented a custom ActivationImp::getPropertyNames, since 
2796         ActivationImp now uses a custom property storage mechanism for local
2797         variables.
2798
2799         * kjs/function.cpp:
2800         (KJS::ActivationImp::getPropertyNames):
2801         * kjs/function.h:
2802
2803 2007-11-26  Alp Toker  <alp@atoker.com>
2804
2805         GTK+/Qt/Wx build fix for breakage introduced in r28039.
2806
2807         * ForwardingHeaders/JavaScriptCore/JSRetainPtr.h: Added.
2808
2809 2007-11-24  Laszlo Gombos  <laszlo.gombos@gmail.com>
2810
2811         Reviewed by Maciej Stachowiak.
2812
2813         Fix minor compiler warning (GCC 4.1.3)
2814
2815         * pcre/pcre_internal.h:
2816         * pcre/pcre_ucp_searchfuncs.cpp:
2817         (_pcre_ucp_othercase):
2818
2819 2007-11-25  Mark Rowe  <mrowe@apple.com>
2820
2821         Reviewed by Dan Bernstein.
2822
2823         Fix http://bugs.webkit.org/show_bug.cgi?id=16129
2824         Bug 16129: REGRESSION (r27761-r27811): malloc error while visiting http://mysit.es (crashes release build)
2825
2826         * pcre/pcre_compile.cpp: Change errorcode to be passed by reference so that any error code is propagated
2827         to our caller like they expect.
2828
2829 2007-11-23  Kevin Ollivier  <kevino@theolliviers.com>
2830
2831         MSVC7 build fix. (rand_s doesn't exist there)
2832
2833         Reviewed by Adam Roben.
2834
2835         * kjs/config.h:
2836         * wtf/MathExtras.h:
2837
2838 2007-11-23  Kevin Ollivier  <kevino@theolliviers.com>
2839
2840         wx build fix. Move WX_PYTHON logic into project build settings,
2841         add WebKitLibraries dirs on Win, and explicitly include JSCore 
2842         headers in testkjs rather than getting them from a template.
2843         (Include dir order of JSCore/WTF and ICU headers is important due  
2844         to wtf/unicode/utf8.h.)
2845
2846         * jscore.bkl:
2847
2848 2007-11-23  Simon Hausmann  <hausmann@webkit.org>
2849
2850         Reviewed by George Staikos <staikos@kde.org>.
2851
2852         Fix make (dist)clean on Windows.
2853         
2854         OBJECTS_DIR_WTR does not exist anymore, use GENERATED_SOURCES_DIR.
2855         
2856
2857         * JavaScriptCore.pri:
2858         * pcre/pcre.pri:
2859
2860 2007-11-22  Simon Hausmann  <hausmann@kde.org>
2861
2862         Reviewed by George.
2863
2864         Make the directory of where to put the generated sources configurable through the GENERATED_SOURCE_DIR variable
2865
2866         * JavaScriptCore.pri:
2867         * pcre/pcre.pri:
2868
2869 2007-11-22  Simon Hausmann  <hausmann@kde.org>
2870
2871         Reviewed by George.
2872
2873         Centralize the setup for all the extra compilers in a addExtraCompiler function.
2874         
2875         This allows adding a "generated_files" target that builds all generated files using "make generated_files".
2876         For the build inside Qt we do not generate actual rules for the extra compilers but instead
2877         do the variable substitution of compiler.output manually and add the generated sources to SOURCES.
2878
2879         * JavaScriptCore.pri:
2880         * pcre/pcre.pri:
2881
2882 2007-11-20  Mark Rowe  <mrowe@apple.com>
2883
2884         Reviewed by Tim Hatcher.
2885
2886         <rdar://problem/5602936> Need to resolve new GCC 4.2 warnings
2887
2888         Fix all warnings emitted by GCC 4.2 when building JavaScriptCore.  This allows builds with
2889         -Werror to succeed.  At present they will crash when executed due to code that is not safe
2890         under strict aliasing (<rdar://problem/5536806>).
2891
2892         * Configurations/Base.xcconfig: Remove the -Wno-long-double flag.
2893         * kjs/date_object.cpp:
2894         (KJS::formatTime): Test whether the stack-allocated string is empty rather than at a non-null address.
2895         * kjs/dtoa.cpp:
2896         (Bigint::): Tweak formatting to silence warnings.
2897         * pcre/pcre_exec.cpp:
2898         (match): Tweak formatting to silence warnings
2899         * wtf/Assertions.cpp: Add printf format attribute to functions that warrant it.
2900         * wtf/Assertions.h: Ditto.
2901
2902 2007-11-19  Kevin Ollivier  <kevino@theolliviers.com>
2903
2904         wx port build fix (wx headers include ctype functions).
2905
2906         * kjs/config.h:
2907
2908 2007-11-19  Kevin Ollivier  <kevino@theolliviers.com>
2909
2910         Remove outdated and unused Windows port files.
2911
2912         Reviewed by Adam Roben.
2913
2914         * Makefile.vc: Removed.
2915         * README-Win32.txt: Removed.
2916
2917 2007-11-18  Eric Seidel  <eric@webkit.org>
2918
2919         Reviewed by Oliver.
2920
2921         * tests/mozilla/jsDriver.pl: exit non-0 when user aborts test run
2922
2923 2007-11-17  Mark Rowe  <mrowe@apple.com>
2924
2925         Reviewed by Darin Adler.
2926
2927         Fix: <rdar://problem/5607032> REGRESSION: testapi exits with assertion failure in debug build
2928              <rdar://problem/5440659> JSGlobalContextCreate throws away globalObjectClass's prototype
2929              http://bugs.webkit.org/show_bug.cgi?id=16033
2930
2931         Split Interpreter's initialization into two distinct steps:  the creation of the global prototypes
2932         and constructors, and storing them on the global object.  This allows JSClassRef's passed to
2933         JSGlobalContextCreate to be instantiated with the correct prototype.
2934
2935         * API/JSCallbackObject.cpp: Assert at compile-time that the custom global object will fit in a collector cell.
2936         * API/JSCallbackObject.h:
2937         * API/JSCallbackObjectFunctions.h:
2938         (KJS::::JSCallbackObject):
2939         (KJS::::init):
2940         * API/JSContextRef.cpp:
2941         (JSGlobalContextCreate): Construct and set the interpreter's global object separately.  When globalObjectClass
2942         is passed we need to set the interpreter's global object before doing the JSCallbackObject's initialization to
2943         prevent any JSObjectInitializeCallback's being invoked before a global object is set.
2944         * API/testapi.c:
2945         (globalObject_initialize): Test the object passed in is correct and that it has the expected global properties.
2946         (globalObject_get):
2947         (globalObject_set):
2948         (main):
2949         * API/testapi.js: Test that any static properties exposed by the global object's custom class are found.
2950         * JavaScriptCore.exp:
2951         * bindings/testbindings.cpp:
2952         (main): Update for changes in Interpreter method signatures.
2953         * bindings/testbindings.mm:
2954         (main): Ditto.
2955         * kjs/ExecState.cpp:
2956         (KJS::ExecState::ExecState):
2957         (KJS::ExecState::mark):
2958         (KJS::ExecState::setGlobalObject):
2959         * kjs/ExecState.h: Rename scope to m_scopeChain.
2960         * kjs/interpreter.cpp:
2961         (KJS::Interpreter::Interpreter):
2962         (KJS::Interpreter::init):
2963         (KJS::Interpreter::globalObject):
2964         (KJS::Interpreter::setGlobalObject):
2965         (KJS::Interpreter::resetGlobalObjectProperties):
2966         (KJS::Interpreter::createObjectsForGlobalObjectProperties):
2967         (KJS::Interpreter::setGlobalObjectProperties): Switch to using putDirect to ensure that the global object's put method
2968         cannot interfere with setting of the global properties.  This prevents a user-written JSClassRef from attempting to
2969         call back into JavaScript from the initialization of the global object's members.
2970         * kjs/interpreter.h:
2971         * kjs/testkjs.cpp:
2972         (setupInterpreter): Update for changes in Interpreter method signatures.
2973
2974 2007-11-17  Mark Rowe  <mrowe@apple.com>
2975
2976         Reviewed by Sam Weinig.
2977
2978         Prevent testapi from reporting false leaks.  Clear out local variables pointing at
2979         JSObjectRefs to allow their values to be collected.
2980
2981         * API/testapi.c:
2982         (main):
2983
2984 2007-11-17  Mark Rowe  <mrowe@apple.com>
2985
2986         Reviewed by Sam Weinig.
2987
2988         Prevent testapi from crashing if testapi.js can not be found by nil-checking the result of createStringWithContentsOfFile.
2989
2990         * API/testapi.c:
2991         (main):
2992
2993 2007-11-17  Alp Toker  <alp@atoker.com>
2994
2995         Reviewed by Eric.
2996
2997         http://bugs.webkit.org/show_bug.cgi?id=16032
2998         JS minidom is not portable
2999
3000         Use a plain UTF-8 string instead of a CFString.
3001
3002         Print to stdout, not stderr like CFShow() would have done, since that
3003         behaviour seems unintentional.
3004
3005         * API/minidom.c:
3006         (main):
3007
3008 2007-11-17  Steve Falkenburg  <sfalken@apple.com>
3009
3010         Windows build fix.
3011
3012         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
3013
3014 2007-11-16  Mark Rowe  <mrowe@apple.com>
3015
3016         Windows build fix.
3017
3018         * kjs/lexer.cpp:
3019         (KJS::Lexer::record8):
3020
3021 2007-11-16  Mark Rowe  <mrowe@apple.com>
3022
3023         Reviewed by Eric.
3024
3025         Replace strings, identifier, buffer8 and buffer16 members of Lexer with vectors.
3026         SunSpider claims this is a 0.7% speedup.
3027
3028         * kjs/lexer.cpp:
3029         (KJS::Lexer::Lexer):
3030         (KJS::Lexer::lex):
3031         (KJS::Lexer::record8):
3032         (KJS::Lexer::record16):
3033         (KJS::Lexer::scanRegExp):
3034         (KJS::Lexer::clear):
3035         (KJS::Lexer::makeIdentifier):
3036         (KJS::Lexer::makeUString):
3037         * kjs/lexer.h:
3038         * kjs/ustring.cpp:
3039         (KJS::UString::UString): Add a convenience constructor that takes a const Vector<UChar>&.
3040         * kjs/ustring.h:
3041
3042 2007-11-16  Adam Roben  <aroben@apple.com>
3043
3044         Windows build fix
3045
3046         * JavaScriptCore.vcproj/testkjs/testkjs.vcproj: Add a new include path
3047         and ignore the int -> bool conversion warning.
3048
3049 2007-11-16  Alexey Proskuryakov  <ap@webkit.org>
3050
3051         Fix Windows debug build.
3052         Rubber-stamped by Eric
3053
3054         * pcre/pcre_exec.cpp: (match): Removed ASSERT_NOT_REACHED assertions that were making MSVC
3055         complain about unreachable code.
3056
3057 2007-11-15  Mark Rowe  <mrowe@apple.com>
3058
3059         Gtk build fix.
3060
3061         * kjs/Parser.cpp:
3062
3063 2007-11-15  Mark Rowe  <mrowe@apple.com>
3064
3065         Mac build and header search path sanity fix.
3066
3067         Reviewed by Sam Weinig and Tim Hatcher.
3068
3069         Move base setting for HEADER_SEARCH_PATHS into Base.xcconfig, and extend
3070         it in JavaScriptCore.xcconfig.  This removes the need to override it on a
3071         per-target basis inside the .xcodeproj file.
3072
3073         * Configurations/Base.xcconfig:
3074         * Configurations/JavaScriptCore.xcconfig:
3075         * JavaScriptCore.xcodeproj/project.pbxproj:
3076
3077 2007-11-15  Mark Rowe  <mrowe@apple.com>
3078
3079         Qt build fix.
3080
3081         * kjs/Parser.h:
3082
3083 2007-11-15  Geoffrey Garen  <ggaren@apple.com>
3084
3085         Reviewed by Eric Seidel.
3086
3087         Another round of grammar / parsing cleanup.
3088         
3089         1. Created distinct parser calls for parsing function bodies vs
3090         programs. This will help later with optimizing global variable access.
3091         
3092         2. Turned Parser into a singleton. Cleaned up Lexer's singleton 
3093         interface.
3094         
3095         3. Modified Lexer to free a little more memory when done lexing. (Added
3096         FIXMEs for similar issues that I didn't fix.)
3097         
3098         4. Changed Lexer::makeIdentifier and Lexer::makeUString to start 
3099         respecting the arguments passed to them. (No behavior change, but this
3100         problem could have caused serious problems for an unsuspecting user of
3101         these functions.)
3102         
3103         5. Removed KJS_DEBUG_MEM because it was bit-rotted.
3104         
3105         6. Removed Parser::prettyPrint because the same work was simpler to do
3106         at the call site.
3107         
3108         7. Some renames:
3109         
3110             "Parser::accept" => "Parser::didFinishParsing"
3111             "Parser::sid" => "Parser::m_sourceID"
3112             "Lexer::doneParsing" => "Lexer::clear"
3113             "sid" => "sourceId"
3114             "lineno" => "lineNo"
3115         
3116         * JavaScriptCore.exp:
3117         * kjs/Parser.cpp:
3118         (KJS::Parser::Parser):
3119         (KJS::Parser::parseProgram):
3120         (KJS::Parser::parseFunctionBody):
3121         (KJS::Parser::parse):
3122         (KJS::Parser::didFinishParsing):
3123         (KJS::parser):
3124         * kjs/Parser.h:
3125         (KJS::Parser::sourceId):
3126         * kjs/function.cpp:
3127         (KJS::GlobalFuncImp::callAsFunction):
3128         * kjs/function_object.cpp:
3129         (FunctionObjectImp::construct):
3130         * kjs/grammar.y:
3131         * kjs/interpreter.cpp:
3132         (KJS::Interpreter::checkSyntax):
3133         (KJS::Interpreter::evaluate):
3134         * kjs/interpreter.h:
3135         * kjs/lexer.cpp:
3136         (kjsyylex):
3137         (KJS::lexer):
3138         (KJS::Lexer::Lexer):
3139         (KJS::Lexer::~Lexer):
3140         (KJS::Lexer::scanRegExp):
3141         (KJS::Lexer::doneParsing):
3142         (KJS::Lexer::makeIdentifier):
3143         (KJS::Lexer::makeUString):
3144         * kjs/lexer.h:
3145         (KJS::Lexer::pattern):
3146         (KJS::Lexer::flags):
3147         (KJS::Lexer::sawError):
3148         * kjs/nodes.cpp:
3149         (KJS::Node::Node):
3150         (KJS::FunctionBodyNode::FunctionBodyNode):
3151         * kjs/nodes.h:
3152         * kjs/testkjs.cpp:
3153         (prettyPrintScript):
3154         (kjsmain):
3155         * kjs/ustring.cpp:
3156         * kjs/ustring.h:
3157
3158 2007-11-15  Oliver Hunt  <oliver@apple.com>
3159
3160         Reviewed by Darin.
3161
3162         <rdar://problem/5601548> REGRESSION: All SourceElements and their children leak after a syntax error
3163         
3164         Add a stub node to maintain the Vector of SourceElements until assignment.
3165
3166         * kjs/grammar.y:
3167         * kjs/nodes.h:
3168         (KJS::SourceElementsStub::SourceElementsStub):
3169         (KJS::SourceElementsStub::append):
3170         (KJS::SourceElementsStub::release):
3171         (KJS::SourceElementsStub::):
3172         (KJS::SourceElementsStub::precedence):
3173
3174 2007-11-15  Eric Seidel  <eric@webkit.org>
3175
3176         Reviewed by Sam.
3177
3178         Abstract most of RMATCH into MatchStack functions.
3179         
3180         SunSpider claims this, combined with the last 2 patches was a 1% speedup, 10% for dna-regexp.
3181
3182         * pcre/pcre_exec.cpp:
3183         (MatchStack::canUseStackBufferForNextFrame):
3184         (MatchStack::allocateNextFrame):
3185         (MatchStack::pushNewFrame):
3186         (MatchStack::frameIsStackAllocated):
3187         (MatchStack::popCurrentFrame):
3188         (MatchStack::unrollAnyHeapAllocatedFrames):
3189         (match):
3190
3191 2007-11-15  Eric Seidel  <eric@webkit.org>
3192
3193         Reviewed by Sam.
3194
3195         Remove RETURN_ERROR, add MatchStack
3196         
3197         * pcre/pcre_exec.cpp:
3198         (MatchStack::MatchStack):
3199         (MatchStack::unrollAnyHeapAllocatedFrames):
3200         (matchError):
3201         (match):
3202         
3203 2007-11-15  Eric Seidel  <eric@webkit.org>
3204
3205         Reviewed by Sam.
3206
3207         Clean up match function to match WebKit style
3208
3209         * JavaScriptCore.xcodeproj/project.pbxproj:
3210         * pcre/pcre_exec.cpp:
3211         (match):
3212
3213 2007-11-15  Steve Falkenburg  <sfalken@apple.com>
3214
3215         Windows build fix.
3216
3217         * JavaScriptCore.vcproj/JavaScriptCore.make:
3218
3219 2007-11-14  Alexey Proskuryakov  <ap@webkit.org>
3220
3221         Reviewed by Darin.
3222
3223         http://bugs.webkit.org/show_bug.cgi?id=15982
3224         Improve JSString UTF-8 decoding
3225
3226         * API/JSStringRef.cpp:
3227         (JSStringCreateWithUTF8CString): Use strict decoding, return 0 on error.
3228
3229         * wtf/unicode/UTF8.cpp:
3230         (WTF::Unicode::convertUTF16ToUTF8):
3231         (WTF::Unicode::convertUTF8ToUTF16):
3232         * wtf/unicode/UTF8.h:
3233         Made these function names start with a lower case letter.
3234
3235         * kjs/ustring.cpp: (KJS::UString::UTF8String): Updated for the above renaming.
3236
3237         * bindings/c/c_utility.cpp:
3238         (KJS::Bindings::convertUTF8ToUTF16WithLatin1Fallback): Renamed to highlight the difference
3239         from convertUTF8ToUTF16 in wtf/unicode.
3240         (KJS::Bindings::convertNPStringToUTF16): Updated for the above renaming.
3241         (KJS::Bindings::identifierFromNPIdentifier): Ditto.
3242         * bindings/c/c_utility.h: Made convertUTF8ToUTF16WithLatin1Fallback() a file static.
3243
3244 2007-11-14  Sam Weinig  <sam@webkit.org>
3245
3246         Rubber-stamped by Anders.
3247
3248         Fix the Xcode project file after it was messed up in r27402.
3249
3250         * JavaScriptCore.xcodeproj/project.pbxproj:
3251
3252 2007-11-14  Eric Seidel  <eric@webkit.org>
3253
3254         Reviewed by Oliver.
3255         
3256         More PCRE style cleanup.
3257
3258         * pcre/pcre_compile.cpp:
3259         (compile_regex):
3260
3261 2007-11-14  Adam Roben  <aroben@apple.com>
3262
3263         Clean up the bison conflict checking script
3264
3265         Reviewed by Geoff.
3266
3267         * DerivedSources.make:
3268
3269 2007-11-14  Eric Seidel  <eric@webkit.org>
3270
3271         Reviewed by Geoff.
3272
3273         Another round of PCRE cleanups: inlines
3274         
3275         SunSpider claims that this, combined with my previous PCRE cleanup were a 0.7% speedup, go figure.
3276
3277         * pcre/pcre_compile.cpp:
3278         (jsRegExpCompile):
3279         * pcre/pcre_exec.cpp:
3280         (match):
3281         (jsRegExpExecute):
3282         * pcre/pcre_internal.h:
3283         (PUT):
3284         (GET):
3285         (PUT2):
3286         (GET2):
3287         (isNewline):
3288
3289 2007-11-14  Eric Seidel  <eric@webkit.org>
3290
3291         Reviewed by Sam.
3292         
3293         Give PCRE a (small) bath.
3294         Fix some formating and break things off into separate functions
3295         http://bugs.webkit.org/show_bug.cgi?id=15993
3296
3297         * pcre/pcre_compile.cpp:
3298         (calculateCompiledPatternLengthAndFlags):
3299         (printCompiledRegExp):
3300         (returnError):
3301         (jsRegExpCompile):
3302         * pcre/pcre_internal.h:
3303         (compile_data::compile_data):
3304
3305 2007-11-14  Geoffrey Garen  <ggaren@apple.com>
3306
3307         Reviewed by Eric Seidel.
3308         
3309         Cleaned up the JavaScript grammar a bit.
3310         
3311         1. Changed BlockNode to always hold a child vector (which may be empty),
3312         eliminating a few NULL-check branches in the common execution case.
3313         
3314         2. Changed the Block production to correctly report its starting and 
3315         ending line numbers to the debugger. (It used to report its ending line
3316         as its starting line.) Also, removed duplicate line-reporting code
3317         inside the BlockNode constructor.
3318         
3319         3. Moved curly braces up from FunctionBody production into parent
3320         productions. (I had to move the line number reporting code, too, since
3321         it depends on the location of the curly braces.) This matches the ECMA
3322         spec more closely, and makes some future changes I plan easier.
3323         
3324         4. Fixed statementList* convenience functions to deal appropriately with
3325         empty Vectors.
3326
3327         SunSpider reports a small and statistically insignificant speedup.
3328
3329         * kjs/grammar.y:
3330         * kjs/nodes.cpp:
3331         (KJS::statementListPushFIFO):
3332         (KJS::statementListGetDeclarations):
3333         (KJS::statementListInitializeDeclarationStack):
3334         (KJS::statementListInitializeVariableAccessStack):
3335         (KJS::BlockNode::BlockNode):
3336         (KJS::BlockNode::optimizeVariableAccess):
3337         (KJS::BlockNode::getDeclarations):
3338         (KJS::BlockNode::execute):
3339         (KJS::FunctionBodyNode::initializeDeclarationStacks):
3340         (KJS::FunctionBodyNode::optimizeVariableAccess):
3341
3342 2007-11-13  Anders Carlsson  <andersca@apple.com>
3343
3344         Add RefCounted.h (And remove Shared.h)
3345         
3346         * JavaScriptCore.vcproj/WTF/WTF.vcproj:
3347
3348 2007-11-13  Geoffrey Garen  <ggaren@apple.com>
3349
3350         Build fix.
3351
3352         * kjs/regexp.h:
3353
3354 2007-11-13  Geoffrey Garen  <ggaren@apple.com>
3355
3356         Reviewed by Anders Carlsson.
3357
3358         Renamed Shared to RefCounted.
3359
3360         * API/JSClassRef.h:
3361         * JavaScriptCore.xcodeproj/project.pbxproj:
3362         * kjs/interpreter.h:
3363         * kjs/regexp.h:
3364         * wtf/RefCounted.h: Copied from JavaScriptCore/wtf/Shared.h.
3365         (WTF::RefCounted::RefCounted):
3366         * wtf/Shared.h: Removed.
3367
3368 2007-11-13  Adam Roben  <aroben@apple.com>
3369
3370         Build fix
3371
3372         Reviewed by Geoff.
3373
3374         * kjs/regexp.h: Added a missing #include.
3375
3376 2007-11-13  Geoffrey Garen  <ggaren@apple.com>
3377
3378         Reviewed by Sam Weinig.
3379
3380         Moved Shared.h into wtf so it could be used in more places. Deployed
3381         Shared in places where JSCore previously had hand-rolled ref-counting
3382         classes.
3383
3384         * API/JSClassRef.cpp:
3385         (OpaqueJSClass::OpaqueJSClass):
3386         * API/JSClassRef.h:
3387         * API/JSObjectRef.cpp:
3388         (JSClassRetain):
3389         (JSClassRelease):
3390         * JavaScriptCore.vcproj/WTF/WTF.vcproj:
3391         * JavaScriptCore.xcodeproj/project.pbxproj:
3392         * kjs/interpreter.cpp:
3393         (KJS::Interpreter::init):
3394         * kjs/interpreter.h:
3395         * kjs/regexp.cpp:
3396         (KJS::RegExp::RegExp):
3397         * kjs/regexp.h:
3398         * wtf/Shared.h: Copied from WebCore/platform/Shared.h.
3399
3400 2007-11-13  Eric Seidel  <eric@webkit.org>
3401
3402         Reviewed by Maciej.
3403
3404         Add an ASSERT to getTruncatedInt32 to enforce proper usage.
3405         Best part about this patch?  It doesn't break the web!
3406
3407         * kjs/JSImmediate.h:
3408         (KJS::JSImmediate::getTruncatedInt32):
3409         (KJS::JSImmediate::toDouble):
3410         (KJS::JSImmediate::getUInt32):
3411
3412 2007-11-13  Alexey Proskuryakov  <ap@webkit.org>
3413
3414         Windows build fix.
3415
3416         * bindings/c/c_utility.cpp:
3417         (KJS::Bindings::convertUTF8ToUTF16):
3418         * kjs/ustring.cpp:
3419         (KJS::UString::UTF8String):
3420         * wtf/unicode/UTF8.cpp:
3421         (WTF::Unicode::ConvertUTF8ToUTF16):
3422
3423 2007-11-13  Darin Adler  <darin@apple.com>
3424
3425         Reviewed by Geoff.
3426
3427         - fix http://bugs.webkit.org/show_bug.cgi?id=11231
3428           RegExp bug when handling newline characters
3429           and a number of other differences between PCRE behvior
3430           and JavaScript regular expressions:
3431
3432           + single-digit sequences like \4 should be treated as octal
3433             character constants, unless there is a sufficient number
3434             of brackets for them to be treated as backreferences
3435
3436           + \8 turns into the character "8", not a binary zero character
3437             followed by "8" (same for 9)
3438
3439           + only the first 3 digits should be considered part of an
3440             octal character constant (the old behavior was to decode
3441             an arbitrarily long sequence and then mask with 0xFF)
3442
3443           + if \x is followed by anything other than two valid hex digits,
3444             then it should simply be treated a the letter "x"; that includes
3445             not supporting the \x{41} syntax
3446
3447           + if \u is followed by anything less than four valid hex digits,
3448             then it should simply be treated a the letter "u"
3449
3450           + an extra "+" should be a syntax error, rather than being treated
3451             as the "possessive quantifier"
3452
3453           + if a "]" character appears immediately after a "[" character that
3454             starts a character class, then that's an empty character class,
3455             rather than being the start of a character class that includes a
3456             "]" character
3457
3458           + a "$" should not match a terminating newline; we could have gotten
3459             PCRE to handle this the way we wanted by passing an appropriate option
3460
3461         Test: fast/js/regexp-no-extensions.html
3462
3463         * pcre/pcre_compile.cpp:
3464         (check_escape): Check backreferences against bracount to catch both
3465         overflows and things that should be treated as octal. Rewrite octal
3466         loop to not go on indefinitely. Rewrite both hex loops to match and
3467         remove \x{} support.
3468         (compile_branch): Restructure loops so that we don't special-case a "]"
3469         at the beginning of a character class. Remove code that treated "+" as
3470         the possessive quantifier.
3471         (jsRegExpCompile): Change the "]" handling here too.
3472
3473         * pcre/pcre_exec.cpp: (match): Changed CIRC to match the DOLL implementation.
3474         Changed DOLL to remove handling of "terminating newline", a Perl concept
3475         which we don't need.
3476
3477         * tests/mozilla/expected.html: Two tests are fixed now:
3478         ecma_3/RegExp/regress-100199.js and ecma_3/RegExp/regress-188206.js.
3479         One test fails now: ecma_3/RegExp/perlstress-002.js -- our success before
3480         was due to a bug (we treated all 1-character numeric escapes as backreferences).
3481         The date tests also now both expect success -- whatever was making them fail
3482         before was probably due to the time being close to a DST shift; maybe we need
3483         to get rid of those tests.
3484
3485 2007-11-13  Darin Adler  <darin@apple.com>
3486
3487         * kjs/JSImmediate.h: (KJS::JSImmediate::getTruncatedInt32):
3488         Remove too-strong assert that was firing constantly and preventing even basic
3489         web browsing from working in a debug build. This function is used in many
3490         cases where the immediate value is not a number; the assertion could perhaps
3491         be added back later with a bit of reorganization.
3492
3493 2007-11-13  Alp Toker  <alp@atoker.com>
3494
3495         Build fix for breakage to non-Mac builds introduced in r27746.
3496
3497         * kjs/ustring.cpp:
3498
3499 2007-11-13  Eric Seidel  <eric@webkit.org>
3500
3501         Reviewed by Maciej.
3502
3503         Clean up evaluateToBoolean functions to use inlines instead of copy/paste code
3504
3505         * kjs/JSImmediate.h:
3506         * kjs/nodes.cpp:
3507         (KJS::GreaterNode::inlineEvaluateToBoolean):
3508         (KJS::GreaterNode::evaluate):
3509         (KJS::LessEqNode::inlineEvaluateToBoolean):
3510         (KJS::LessEqNode::evaluate):
3511         (KJS::GreaterEqNode::inlineEvaluateToBoolean):
3512         (KJS::GreaterEqNode::evaluate):
3513         (KJS::InNode::evaluateToBoolean):
3514         (KJS::EqualNode::inlineEvaluateToBoolean):
3515         (KJS::EqualNode::evaluate):
3516         (KJS::NotEqualNode::inlineEvaluateToBoolean):
3517         (KJS::NotEqualNode::evaluate):
3518         (KJS::StrictEqualNode::inlineEvaluateToBoolean):
3519         (KJS::StrictEqualNode::evaluate):
3520         (KJS::NotStrictEqualNode::inlineEvaluateToBoolean):
3521         (KJS::NotStrictEqualNode::evaluate):
3522         * kjs/nodes.h:
3523
3524 2007-11-12  Geoffrey Garen  <ggaren@apple.com>
3525
3526         Reviewed by Sam Weinig.
3527         
3528         Fixed http://bugs.webkit.org/show_bug.cgi?id=15958
3529         base64 spends 1.1% of total time checking for special Infinity case
3530         
3531         Use a fast character test instead of calling strncmp.
3532         
3533         1.1% speedup on string-base64. SunSpider reports a .4% speedup overall;
3534         Sharks reports only .1%. Who are you going to believe? Huh?
3535
3536         * kjs/ustring.cpp:
3537         (KJS::UString::toDouble):
3538
3539 2007-11-12  Eric Seidel  <eric@webkit.org>
3540
3541         Reviewed by Oliver.
3542
3543         Add evaluateToInt32 and evaluateUInt32 methods and deploy them.
3544         Fix a few missing evaluateToBoolean methods
3545         Deploy all evaluateTo* functions to more nodes to avoid slowdowns
3546         http://bugs.webkit.org/show_bug.cgi?id=15950
3547         
3548         SunSpider claims this is at least a 1.4% speedup.
3549
3550         * kjs/JSImmediate.h:
3551         (KJS::JSImmediate::getTruncatedInt32):
3552         (KJS::JSImmediate::toDouble):
3553         (KJS::JSImmediate::getUInt32):
3554         * kjs/nodes.cpp:
3555         (KJS::ExpressionNode::evaluateToNumber):
3556         (KJS::ExpressionNode::evaluateToInt32):
3557         (KJS::ExpressionNode::evaluateToUInt32):
3558         (KJS::NumberNode::evaluateToInt32):
3559         (KJS::NumberNode::evaluateToUInt32):
3560         (KJS::ImmediateNumberNode::evaluateToInt32):
3561         (KJS::ImmediateNumberNode::evaluateToUInt32):
3562         (KJS::ResolveNode::evaluate):
3563         (KJS::ResolveNode::evaluateToNumber):
3564         (KJS::ResolveNode::evaluateToBoolean):
3565         (KJS::ResolveNode::evaluateToInt32):
3566         (KJS::ResolveNode::evaluateToUInt32):
3567         (KJS::LocalVarAccessNode::evaluateToInt32):
3568         (KJS::LocalVarAccessNode::evaluateToUInt32):
3569         (KJS::BracketAccessorNode::evaluateToNumber):
3570         (KJS::BracketAccessorNode::evaluateToBoolean):
3571         (KJS::BracketAccessorNode::evaluateToInt32):
3572         (KJS::BracketAccessorNode::evaluateToUInt32):
3573         (KJS::DotAccessorNode::inlineEvaluate):
3574         (KJS::DotAccessorNode::evaluate):
3575         (KJS::DotAccessorNode::evaluateToNumber):
3576         (KJS::DotAccessorNode::evaluateToBoolean):
3577         (KJS::DotAccessorNode::evaluateToInt32):
3578         (KJS::DotAccessorNode::evaluateToUInt32):
3579         (KJS::NewExprNode::inlineEvaluate):
3580         (KJS::NewExprNode::evaluate):
3581         (KJS::NewExprNode::evaluateToNumber):
3582         (KJS::NewExprNode::evaluateToBoolean):
3583         (KJS::NewExprNode::evaluateToInt32):
3584         (KJS::NewExprNode::evaluateToUInt32):
3585         (KJS::FunctionCallResolveNode::inlineEvaluate):
3586         (KJS::FunctionCallResolveNode::evaluate):
3587         (KJS::FunctionCallResolveNode::evaluateToNumber):
3588         (KJS::FunctionCallResolveNode::evaluateToBoolean):
3589         (KJS::FunctionCallResolveNode::evaluateToInt32):
3590         (KJS::FunctionCallResolveNode::evaluateToUInt32):
3591         (KJS::LocalVarFunctionCallNode::evaluate):
3592         (KJS::LocalVarFunctionCallNode::evaluateToNumber):
3593         (KJS::LocalVarFunctionCallNode::evaluateToBoolean):
3594         (KJS::LocalVarFunctionCallNode::evaluateToInt32):
3595         (KJS::LocalVarFunctionCallNode::evaluateToUInt32):
3596         (KJS::FunctionCallDotNode::evaluate):
3597         (KJS::FunctionCallDotNode::evaluateToNumber):
3598         (KJS::FunctionCallDotNode::evaluateToBoolean):
3599         (KJS::FunctionCallDotNode::evaluateToInt32):
3600         (KJS::FunctionCallDotNode::evaluateToUInt32):
3601         (KJS::PostDecLocalVarNode::inlineEvaluateToNumber):
3602         (KJS::PostDecLocalVarNode::evaluateToNumber):
3603         (KJS::PostDecLocalVarNode::evaluateToBoolean):
3604         (KJS::PostDecLocalVarNode::evaluateToInt32):
3605         (KJS::PostDecLocalVarNode::evaluateToUInt32):
3606         (KJS::typeStringForValue):
3607         (KJS::UnaryPlusNode::evaluate):
3608         (KJS::UnaryPlusNode::evaluateToBoolean):
3609         (KJS::UnaryPlusNode::evaluateToNumber):
3610         (KJS::UnaryPlusNode::evaluateToInt32):
3611         (KJS::BitwiseNotNode::inlineEvaluateToInt32):
3612         (KJS::BitwiseNotNode::evaluate):
3613         (KJS::BitwiseNotNode::evaluateToNumber):
3614         (KJS::BitwiseNotNode::evaluateToBoolean):
3615         (KJS::BitwiseNotNode::evaluateToInt32):
3616         (KJS::MultNode::evaluateToBoolean):
3617         (KJS::MultNode::evaluateToInt32):
3618         (KJS::MultNode::evaluateToUInt32):
3619         (KJS::DivNode::evaluateToInt32):
3620         (KJS::DivNode::evaluateToUInt32):
3621         (KJS::ModNode::evaluateToBoolean):
3622         (KJS::ModNode::evaluateToInt32):
3623         (KJS::ModNode::evaluateToUInt32):
3624         (KJS::AddNode::evaluateToNumber):
3625         (KJS::AddNode::evaluateToInt32):
3626         (KJS::AddNode::evaluateToUInt32):
3627         (KJS::AddNumbersNode::evaluateToInt32):
3628         (KJS::AddNumbersNode::evaluateToUInt32):
3629         (KJS::SubNode::evaluateToInt32):
3630         (KJS::SubNode::evaluateToUInt32):
3631         (KJS::LeftShiftNode::inlineEvaluateToInt32):
3632         (KJS::LeftShiftNode::evaluate):
3633         (KJS::LeftShiftNode::evaluateToNumber):
3634         (KJS::LeftShiftNode::evaluateToInt32):
3635         (KJS::RightShiftNode::inlineEvaluateToInt32):
3636         (KJS::RightShiftNode::evaluate):
3637         (KJS::RightShiftNode::evaluateToNumber):
3638         (KJS::RightShiftNode::evaluateToInt32):
3639         (KJS::UnsignedRightShiftNode::inlineEvaluateToUInt32):
3640         (KJS::UnsignedRightShiftNode::evaluate):
3641         (KJS::UnsignedRightShiftNode::evaluateToNumber):
3642         (KJS::UnsignedRightShiftNode::evaluateToInt32):
3643         (KJS::LessNode::inlineEvaluateToBoolean):
3644         (KJS::LessNode::evaluate):
3645         (KJS::LessNode::evaluateToBoolean):
3646         (KJS::LessNumbersNode::inlineEvaluateToBoolean):
3647         (KJS::LessNumbersNode::evaluate):
3648         (KJS::LessNumbersNode::evaluateToBoolean):
3649         (KJS::LessStringsNode::inlineEvaluateToBoolean):
3650         (KJS::LessStringsNode::evaluate):
3651         (KJS::BitAndNode::evaluate):
3652         (KJS::BitAndNode::inlineEvaluateToInt32):
3653         (KJS::BitAndNode::evaluateToNumber):
3654         (KJS::BitAndNode::evaluateToBoolean):
3655         (KJS::BitAndNode::evaluateToInt32):
3656         (KJS::BitXOrNode::inlineEvaluateToInt32):
3657         (KJS::BitXOrNode::evaluate):
3658         (KJS::BitXOrNode::evaluateToNumber):
3659         (KJS::BitXOrNode::evaluateToBoolean):
3660         (KJS::BitXOrNode::evaluateToInt32):
3661         (KJS::BitOrNode::inlineEvaluateToInt32):
3662         (KJS::BitOrNode::evaluate):
3663         (KJS::BitOrNode::evaluateToNumber):
3664         (KJS::BitOrNode::evaluateToBoolean):
3665         (KJS::BitOrNode::evaluateToInt32):
3666         (KJS::ConditionalNode::evaluateToNumber):
3667         (KJS::ConditionalNode::evaluateToInt32):
3668         (KJS::ConditionalNode::evaluateToUInt32):
3669         (KJS::valueForReadModifyAssignment):
3670         (KJS::AssignExprNode::evaluate):
3671         (KJS::AssignExprNode::evaluateToBoolean):
3672         (KJS::AssignExprNode::evaluateToNumber):
3673         (KJS::AssignExprNode::evaluateToInt32):
3674         (KJS::VarDeclNode::handleSlowCase):
3675         * kjs/nodes.h:
3676         (KJS::FunctionCallResolveNode::precedence):
3677         (KJS::AddNode::precedence):
3678         (KJS::AddNode::):
3679         (KJS::LessNumbersNode::):
3680         (KJS::LessStringsNode::):
3681         * kjs/value.cpp:
3682         (KJS::JSValue::toInt32SlowCase):
3683         (KJS::JSValue::toUInt32SlowCase):
3684         * kjs/value.h:
3685         (KJS::JSValue::asCell):
3686         (KJS::JSValue::toInt32):
3687         (KJS::JSValue::toUInt32):
3688
3689 2007-11-12  Alexey Proskuryakov  <ap@webkit.org>
3690
3691         Reviewed by Darin.
3692
3693         http://bugs.webkit.org/show_bug.cgi?id=15953
3694         Add UTF-8 encoding/decoding to WTF
3695
3696         * kjs/ustring.h: Moved UTF8SequenceLength() and decodeUTF8Sequence() to wtf/unicode.
3697         * kjs/ustring.cpp: (KJS::UString::UTF8String): Changed this function to take a strict/lenient
3698         parameter. Callers are not interested in getting decoding results in strict mode, so 
3699         this allows for bailing out as soon as an error is seen.
3700
3701         * kjs/function.cpp:
3702         (KJS::encode): Updated for new UString::UTF8String() signature.
3703
3704         * API/JSStringRef.cpp:
3705         (JSStringCreateWithCharacters): Disambiguate UChar.
3706         (JSStringCreateWithUTF8CString): Actually use UTF-8 when creating the string!
3707         * bindings/c/c_utility.cpp: (KJS::Bindings::convertUTF8ToUTF16): Use ConvertUTF8ToUTF16().
3708
3709         * wtf/unicode/UTF8.cpp: Added.
3710         (WTF::Unicode::inlineUTF8SequenceLengthNonASCII):
3711         (WTF::Unicode::inlineUTF8SequenceLength):
3712         (WTF::Unicode::UTF8SequenceLength):
3713         (WTF::Unicode::decodeUTF8Sequence):
3714         (WTF::Unicode::):
3715         (WTF::Unicode::ConvertUTF16ToUTF8):
3716         (WTF::Unicode::isLegalUTF8):
3717         (WTF::Unicode::ConvertUTF8ToUTF16):
3718         * wtf/unicode/UTF8.h: Added.
3719         (WTF::Unicode::):
3720         Some code moved from ustring.h, some adapted from unicode.org sources.
3721
3722         * JavaScriptCore.exp:
3723         * JavaScriptCore.pri:
3724         * JavaScriptCore.vcproj/WTF/WTF.vcproj:
3725         * JavaScriptCore.xcodeproj/project.pbxproj:
3726         * JavaScriptCoreSources.bkl:
3727         Added UTF8.{h,cpp}
3728
3729 2007-11-12  Josh Aas  <joshmoz@gmail.com>
3730
3731         Reviewed by Darin.
3732
3733         - http://bugs.webkit.org/show_bug.cgi?id=15946
3734           add NPPValue NPPVpluginDrawingModel (Mozilla bug 403418 compat)
3735
3736         * bindings/npapi.h:
3737
3738 2007-11-12  Darin Adler  <darin@apple.com>
3739
3740         Reviewed by Sam.
3741
3742         - http://bugs.webkit.org/show_bug.cgi?id=15951
3743           REGRESSION: assertion failure in regexp match() when running JS tests
3744
3745         Test: fast/js/regexp-many-brackets.html
3746
3747         * pcre/pcre_exec.cpp: (match): Added back accidentally-removed case for
3748         the BRANUMBER opcode.
3749
3750 2007-11-12  Darin Adler  <darin@apple.com>
3751
3752         Reviewed by Geoff.
3753
3754         - fix use of prefix and config.h, got rid of a few unneeded things in
3755           the PCRE code; no behavior changes
3756
3757         * API/JSBase.cpp: Added include of config.h.
3758         * API/JSCallbackConstructor.cpp: Ditto.
3759         * API/JSCallbackFunction.cpp: Ditto.
3760         * API/JSCallbackObject.cpp: Ditto.
3761         * API/JSClassRef.cpp: Ditto.
3762         * API/JSContextRef.cpp: Ditto.
3763         * API/JSObjectRef.cpp: Ditto.
3764         * API/JSStringRef.cpp: Ditto.
3765         * API/JSValueRef.cpp: Ditto.
3766
3767         * JavaScriptCorePrefix.h: Removed obsolete <ctype.h> workaround.
3768         Moved new/delete macros after includes, as they are in WebCore's prefix.
3769         Removed "config.h".
3770
3771         * pcre/dftables.cpp: (main): Changed back to not use a separate maketables
3772         function. This is needed for PCRE, but not helpful for our use. Also changed
3773         the tables to all be 128 entries long instead of 256, since only the first
3774         128 are ever used.
3775
3776         * pcre/pcre_compile.cpp: Added include of config.h. Eliminated digitab,
3777         which was only being used to check hex digits. Changed all uses of TRUE and
3778         FALSE to use the C++ true and false instead.
3779         (check_escape): Just the TRUE/FALSE thing.
3780         (is_counted_repeat): Ditto.
3781         (could_be_empty_branch): Ditto.
3782         (get_othercase_range): Ditto.
3783         (compile_branch): Ditto.
3784         (compile_regex): Ditto.
3785         (is_anchored): Ditto.
3786         (is_startline): Ditto.
3787         (find_firstassertedchar): Ditto.
3788         (jsRegExpCompile): Ditto.
3789
3790         * pcre/pcre_exec.cpp: Added include of config.h. Changed all uses of TRUE and
3791         FALSE to use the C++ true and false instead.
3792         (match_ref): Just the TRUE/FALSE thing.
3793         (match): Ditto. Removed some unneeded braces.
3794         (jsRegExpExecute): Just the TRUE/FALSE thing.
3795
3796         * pcre/pcre_internal.h: Moved the constants needed by dftables.cpp to the top
3797         of the file instead of the bottom, so they can be used. Also changed the table
3798         sizes to 128 instead of 256. Removed macro definitions of FALSE and TRUE.
3799         Set array sizes for all the const arrays. Changed _pcre_utf8_table1_size to
3800         be a macro instead of a extern int.
3801
3802         * pcre/pcre_maketables.cpp: Removed. It's all in dftables.cpp now.
3803
3804         * pcre/pcre_tables.cpp: Made table sizes explicit.
3805
3806         * pcre/pcre_xclass.cpp: Just the TRUE/FALSE thing.
3807
3808 2007-11-12  Adam Roben  <aroben@apple.com>
3809
3810         Build fix
3811
3812         * wtf/FastMalloc.h: Add missing using statement.
3813
3814 2007-11-11  Oliver Hunt  <oliver@apple.com>
3815
3816         Reviewed by Darin.
3817
3818         Add special fastZeroedMalloc function to replace a 
3819         number of fastCalloc calls where one argument was 1.
3820         
3821         This results in a 0.4% progression in SunSpider, more
3822         than making up for the earlier regression caused by 
3823         additional overflow checks.
3824
3825         * JavaScriptCore.exp:
3826         * kjs/array_instance.cpp:
3827         * kjs/property_map.cpp:
3828         * wtf/FastMalloc.cpp:
3829         * wtf/FastMalloc.h:
3830         * wtf/HashTable.h:
3831
3832 2007-11-11  Adam Roben  <aroben@apple.com>
3833
3834         Fix <rdar://5578982> ASSERT in HashTable::checkTableConsistencyExceptSize beneath WebNotificationCenter
3835
3836         The bug was due to a mismatch between HashMap::remove and
3837         HashTable::checkTableConsistency. HashMap::remove can delete the value
3838         stored in the HashTable (by derefing it), which is not normally
3839         allowed by HashTable. It's OK in this case because the value is about
3840         to be removed from the table, but HashTable wasn't aware of this.
3841
3842         HashMap::remove now performs the consistency check itself before
3843         derefing the value.
3844
3845         Darin noticed that the same bug would occur in HashSet, so I've fixed
3846         it there as well.
3847
3848         Reviewed by Darin.
3849
3850         * wtf/HashMap.h:
3851         (WTF::HashMap::remove): Perform the HashTable consistency check
3852         manually before calling deref.
3853         * wtf/HashSet.h:
3854         (WTF::HashSet::remove): Ditto.
3855         * wtf/HashTable.h: Made checkTableConsistency public so that HashMap
3856         and HashSet can call it.
3857         (WTF::HashTable::removeAndInvalidateWithoutEntryConsistencyCheck):
3858         Added.
3859         (WTF::HashTable::removeAndInvalidate): Added.
3860         (WTF::HashTable::remove):
3861         (WTF::HashTable::removeWithoutEntryConsistencyCheck): Added.
3862
3863 2007-11-11  Mark Rowe  <mrowe@apple.com>
3864
3865         Build fix.  Use the correct filename case.
3866
3867         * kjs/nodes.h:
3868
3869 2007-11-11  Geoffrey Garen  <ggaren@apple.com>
3870
3871         Reviewed by Sam Weinig.
3872         
3873         Fixed http://bugs.webkit.org/show_bug.cgi?id=15902
3874         15% of string-validate-input.js is spent compiling the same regular expression
3875         
3876         Store a compiled representation of the regular expression in the AST.
3877         
3878         Only a .2% SunSpider speedup overall, but a 10.6% speedup on 
3879         string-validate-input.js.
3880
3881         * kjs/nodes.cpp:
3882         (KJS::RegExpNode::evaluate):
3883         * kjs/nodes.h:
3884         (KJS::RegExpNode::):
3885         * kjs/nodes2string.cpp:
3886         (KJS::RegExpNode::streamTo):
3887         * kjs/regexp.cpp:
3888         (KJS::RegExp::flags):
3889         * kjs/regexp.h:
3890         (KJS::RegExp::pattern):
3891         * kjs/regexp_object.cpp:
3892         (KJS::RegExpObjectImp::construct):
3893         (KJS::RegExpObjectImp::createRegExpImp):
3894         * kjs/regexp_object.h:
3895
3896 2007-11-11  Oliver Hunt  <oliver@apple.com>
3897
3898         Reviewed by Eric.
3899
3900         Partial fix for <rdar://problem/5585334> numfuzz: integer overflows opening malformed SVG file in WebCore::ImageBuffer::create
3901
3902         Unfortunately this is a very slight regression, but is unavoidable.
3903
3904         * wtf/FastMalloc.cpp:
3905
3906 2007-11-10  Eric Seidel  <eric@webkit.org>
3907
3908         Reviewed by darin.
3909         
3910         Add simple type inferencing to the parser, and create custom
3911         AddNode and LessNode subclasses based on inferred types.
3912         http://bugs.webkit.org/show_bug.cgi?id=15884
3913         
3914         SunSpider claims this is at least a 0.5% speedup.
3915
3916         * JavaScriptCore.exp:
3917         * kjs/grammar.y:
3918         * kjs/internal.cpp:
3919         (KJS::NumberImp::getPrimitiveNumber):
3920         (KJS::GetterSetterImp::getPrimitiveNumber):
3921         * kjs/internal.h:
3922         * kjs/lexer.cpp:
3923         (KJS::Lexer::lex):
3924         * kjs/nodes.cpp:
3925         (KJS::Node::Node):
3926         (KJS::StringNode::evaluate):
3927         (KJS::StringNode::evaluateToNumber):
3928         (KJS::StringNode::evaluateToBoolean):
3929         (KJS::RegExpNode::evaluate):
3930         (KJS::UnaryPlusNode::optimizeVariableAccess):
3931         (KJS::AddNode::evaluate):
3932         (KJS::AddNode::evaluateToNumber):
3933         (KJS::AddNumbersNode::inlineEvaluateToNumber):
3934         (KJS::AddNumbersNode::evaluate):
3935         (KJS::AddNumbersNode::evaluateToNumber):
3936         (KJS::AddStringsNode::evaluate):
3937         (KJS::AddStringLeftNode::evaluate):
3938         (KJS::AddStringRightNode::evaluate):
3939         (KJS::lessThan):
3940         (KJS::lessThanEq):
3941         (KJS::LessNumbersNode::evaluate):
3942         (KJS::LessStringsNode::evaluate):
3943         * kjs/nodes.h:
3944         (KJS::ExpressionNode::):
3945         (KJS::RegExpNode::):
3946         (KJS::RegExpNode::precedence):
3947         (KJS::TypeOfResolveNode::):
3948         (KJS::LocalVarTypeOfNode::):
3949         (KJS::UnaryPlusNode::):
3950         (KJS::UnaryPlusNode::precedence):
3951         (KJS::AddNode::):
3952         (KJS::AddNode::precedence):
3953         (KJS::AddNumbersNode::):
3954         (KJS::AddStringLeftNode::):
3955         (KJS::AddStringRightNode::):
3956         (KJS::AddStringsNode::):
3957         (KJS::LessNode::):
3958         (KJS::LessNode::precedence):
3959         (KJS::LessNumbersNode::):
3960         (KJS::LessStringsNode::):
3961         * kjs/nodes2string.cpp:
3962         (KJS::StringNode::streamTo):
3963         * kjs/object.cpp:
3964         * kjs/object.h:
3965         * kjs/value.h:
3966         (KJS::JSValue::getPrimitiveNumber):
3967
3968 2007-11-11  Darin Adler  <darin@apple.com>
3969
3970         - try another way of fixing dftables builds -- refactor pcre_internal.h a bit
3971
3972         * pcre/pcre_internal.h: Make most of this header do nothing when DFTABLES is set.
3973         Later we can break it into two files.
3974
3975         * JavaScriptCore.vcproj/dftables/dftables.vcproj: Take out now-unneeded include paths.
3976         * pcre/dftables.cpp: Set DFTABLES. Use delete instead of free.
3977         * pcre/dftables.pro: Take out now-unneeded include paths.
3978         * pcre/pcre_maketables.cpp: Use new instead of malloc.
3979
3980 2007-11-11  Darin Adler  <darin@apple.com>
3981
3982         * pcre/dftables.pro: Try fixing Qt builds (I looked at qt-win) by adding
3983         another include path.
3984
3985 2007-11-11  Darin Adler  <darin@apple.com>
3986
3987         * JavaScriptCore.xcodeproj/project.pbxproj: Try fixing Mac Tiger builds
3988         by adding another include path.
3989
3990 2007-11-11  Darin Adler  <darin@apple.com>
3991
3992         Reviewed by Sam.
3993
3994         - http://bugs.webkit.org/show_bug.cgi?id=15924
3995           next round of changes to JSRegExp (formerly PCRE)
3996
3997         This is a combination of converting to C++, tweaking the API, and adding
3998         some additional optimizations.
3999
4000         Future steps will involve getting rid of the use of UTF-8 completely
4001         (we'll use UTF-16 exclusively instead), eliminating more source files,
4002         and some more speed-ups.
4003
4004         SunSpider says the current round is an 0.9% speed-up overall, and a
4005         5.3% speed-up for regexp.
4006
4007         * JavaScriptCore.exp: Updated for new entry points.
4008
4009         * JavaScriptCore.pri:
4010         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
4011         * JavaScriptCore.vcproj/dftables/dftables.vcproj:
4012         * JavaScriptCore.xcodeproj/project.pbxproj:
4013         * JavaScriptCoreSources.bkl:
4014         * jscore.bkl:
4015         Updated for new source file names and ForwardingHeaders.
4016
4017         * kjs/regexp.cpp:
4018         (KJS::RegExp::RegExp): Changed to use the error message without calling
4019         strdup on it and to pass the new types and options.
4020         (KJS::RegExp::~RegExp): Removed the now-unneeded free of the error message.
4021         (KJS::RegExp::match): Pass the new types and options.
4022         * kjs/regexp.h: Update type of m_constructionError.
4023
4024         * pcre/AUTHORS: Update to reflect the status of the project -- we don't include
4025         the Google parts, and this isn't the PCRE library, per se.
4026         * pcre/COPYING: Ditto.
4027
4028         * pcre/dftables.cpp: Copied from JavaScriptCore/pcre/dftables.c.
4029         (main): Removed unneeded ctype_digit.
4030
4031         * pcre/pcre.h: Convert to C++, tweak API a bit. Use UChar instead of JSRegExpChar.
4032
4033         * pcre/pcre_compile.cpp: Copied from JavaScriptCore/pcre/pcre_compile.c.
4034         Moved a lot of private stuff used only within this file here from pcre_internal.h.
4035         Renumbered the error codes.
4036         (error_text): Use a single string with embedded nulls for the error text (I got
4037         this idea from newer versions of PCRE).
4038         (check_escape): Changed return type to be enum instead of int. Replaced ctype_digit
4039         uses with isASCIIDigit.
4040         (is_counted_repeat): Ditto.
4041         (read_repeat_counts): Ditto.
4042         (first_significant_code): Ditto.
4043         (find_fixedlength): Ditto.
4044         (could_be_empty_branch): Ditto.
4045         (compile_branch): Ditto. Also removed some code that handles changing options.
4046         JavaScript doesn't have any of the features that allow options to change.
4047         (compile_regex): Updated for change to options parameter.
4048         (is_anchored): Ditto.
4049         (find_firstassertedchar): Ditto.
4050         (jsRegExpCompile): Changed to take separate flags instead of an options int.
4051         Also changed to call new/delete instead of pcre_malloc/free.
4052         (jsRegExpFree): Ditto.
4053
4054         * pcre/pcre_exec.cpp: Copied from JavaScriptCore/pcre/pcre_exec.c.
4055         Added a case that uses computed goto for the opcode loop, but did not turn it on.
4056         Changed the RMATCH macro to handle returns more efficiently by putting the where
4057         pointer in the new frame instead of the old one, allowing us to branch to the
4058         return with a single statement. Switched to new/delete from pcre_malloc/free.
4059         Changed many RRETURN callers to not set the return value since it's already
4060         set correctly. Replaced the rrc variable with an is_match variable. Values other
4061         than "match" and "no match" are now handled differently. This allows us to remove
4062         the code to check for those cases in various rules.
4063         (match): All the case statements use a macro BEGIN_OPCODE instead. And all the
4064         continue statements, or break statements that break out of the outer case use
4065         a macro NEXT_OPCODE instead. Replaced a few if statements with assertions.
4066         (jsRegExpExecute): Use new/delete instead of pcre_malloc/free. Removed unused
4067         start_match field from the match block.
4068
4069         * pcre/pcre_internal.h: Moved the last few configuration macros from pcre-config.h
4070         in here. Removed various unused types. Converted from JSRegExpChar to UChar.
4071         Eliminated pcre_malloc/free. Replaced the opcode enum with a macro that can be
4072         used in multiple places. Unfortunately we lose the comments for each opcode; we
4073         should find a place to put those back. Removed ctype_digit.
4074
4075         * pcre/pcre_maketables.cpp: Copied from JavaScriptCore/pcre/pcre_maketables.c.
4076         (pcre_maketables): Got rid of the conditional code that allows this to be compiled
4077         in -- it's only used for dftables now (and soon may be obsolete entirely).
4078         Changed code for cbit_digit to not use isdigit, and took the "_" case out of the
4079         loop. Removed ctype_digit.
4080
4081         * pcre/pcre_ord2utf8.cpp: Copied from JavaScriptCore/pcre/pcre_ord2utf8.c.
4082
4083         * pcre/pcre_tables.cpp: Copied from JavaScriptCore/pcre/pcre_tables.c.
4084         Moved _pcre_OP_lengths out of here into pcre_exec.cpp.
4085
4086         * pcre/pcre_ucp_searchfuncs.cpp: Copied from JavaScriptCore/pcre/pcre_ucp_searchfuncs.c.
4087         Updated for other file name changes.
4088
4089         * pcre/pcre_xclass.cpp: Copied from JavaScriptCore/pcre/pcre_xclass.c.
4090
4091         * pcre/ucpinternal.h: Updated header.
4092
4093         * pcre/ucptable.cpp: Copied from JavaScriptCore/pcre/ucptable.c.
4094
4095         * wtf/ASCIICType.h: (WTF::isASCIIDigit): Removed a branch by changing from && to
4096         & for this operation. Also added an overload that takes an int because that's
4097         useful for PCRE. Later we could optimize for int and overload other functions in
4098         this file; stuck to this simple one for now.
4099
4100         * wtf/unicode/icu/UnicodeIcu.h: Removed unused isUpper.
4101         * wtf/unicode/qt4/UnicodeQt4.h: Ditto.
4102
4103         * pcre/LICENCE: Removed.
4104         * pcre/pcre-config.h: Removed.
4105         * wtf/FastMallocPCRE.cpp: Removed.
4106
4107         * pcre/dftables.c: Renamed to cpp.
4108         * pcre/pcre_compile.c: Ditto.
4109         * pcre/pcre_exec.c: Ditto.
4110         * pcre/pcre_maketables.c: Ditto.
4111         * pcre/pcre_ord2utf8.c: Ditto.
4112         * pcre/pcre_tables.c: Ditto.
4113         * pcre/pcre_ucp_searchfuncs.c: Ditto.
4114         * pcre/pcre_xclass.c: Ditto.
4115         * pcre/ucptable.c: Ditto.
4116
4117 2007-11-11  Eric Seidel  <eric@webkit.org>
4118
4119         Reviewed by Oliver.
4120
4121         Add KJS_CHECKEXCEPTIONBOOLEAN to match rest of nodes.cpp
4122
4123         * kjs/nodes.cpp:
4124         (KJS::ExpressionNode::evaluateToBoolean):
4125         (KJS::LessNode::evaluateToBoolean):
4126         (KJS::GreaterNode::evaluateToBoolean):
4127         (KJS::LessEqNode::evaluateToBoolean):
4128         (KJS::GreaterEqNode::evaluateToBoolean):
4129         (KJS::InstanceOfNode::evaluateToBoolean):
4130         (KJS::InNode::evaluateToBoolean):
4131         (KJS::EqualNode::evaluateToBoolean):
4132         (KJS::NotEqualNode::evaluateToBoolean):
4133         (KJS::StrictEqualNode::evaluateToBoolean):
4134         (KJS::NotStrictEqualNode::evaluateToBoolean):
4135         (KJS::LogicalAndNode::evaluateToBoolean):
4136         (KJS::LogicalOrNode::evaluateToBoolean):
4137         (KJS::ConditionalNode::evaluateToBoolean):
4138
4139 2007-11-10  Darin Adler  <darin@apple.com>
4140
4141         Reviewed by Sam.
4142
4143         - fix http://bugs.webkit.org/show_bug.cgi?id=15927
4144           REGRESSION(r27487): delete a.c followed by __defineGetter__("c", ...) incorrectly deletes another property
4145           and <rdar://problem/5586384> REGRESSION (r27487): Can't switch out of Edit HTML Source mode on Leopard Wiki
4146
4147         Test: fast/js/delete-then-put.html
4148
4149         * kjs/property_map.cpp:
4150         (KJS::PropertyMap::put): Added a missing "- 1"; code to find an empty slot was not working.
4151         (KJS::PropertyMap::checkConsistency): Added a missing range check that would have caught this
4152         problem before.
4153
4154         - roll out a last-minute change to my evaluateToBoolean patch that was incorrect.
4155
4156         * kjs/nodes.h: (KJS::ExprStatementNode::ExprStatementNode): Take out call to
4157         optimizeForUnnecessaryResult, since the result is used in some cases.
4158
4159 2007-11-10  Adam Roben  <aroben@apple.com>
4160
4161         Windows build fix
4162
4163         Roll out some changes that were (seemingly accidentally) checked in
4164         with r27664.
4165
4166         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
4167
4168 2007-11-10  Darin Adler  <darin@apple.com>
4169
4170         Reviewed by Sam.
4171
4172         - http://bugs.webkit.org/show_bug.cgi?id=15915
4173           add an evaluation path for booleans like the one we have for numbers
4174
4175         Gives 1.1% on SunSpider.
4176
4177         * kjs/grammar.y: Create TrueNode and FalseNode instead of BooleanNode.
4178
4179         * kjs/nodes.h: Changed to use Noncopyable. Moved optimizeForUnnecessaryResult
4180         down from Node to ExpressionNode. Changed some classes to not inherit from
4181         ExpressionNode where not necessary, and removed unnneeded evaluate functions
4182         as well as evaluate functions that need not be virtual. Call the
4183         optimizeForUnnecessaryResult function on the start of a for loop too.
4184         * kjs/nodes.cpp:
4185         (KJS::ExpressionNode::evaluateToBoolean): Added.
4186         (KJS::FalseNode::evaluate): Added.
4187         (KJS::TrueNode::evaluate): Added.
4188         (KJS::NumberNode::evaluateToBoolean): Added.
4189         (KJS::StringNode::evaluateToBoolean): Added.
4190         (KJS::LocalVarAccessNode::evaluateToBoolean): Added.
4191         (KJS::BracketAccessorNode::evaluateToBoolean): Added.
4192         (KJS::LogicalNotNode::evaluate): Changed to call evaluateToBoolean.
4193         (KJS::LogicalNotNode::evaluateToBoolean): Added.
4194         (KJS::lessThan): Changed to return bool.
4195         (KJS::lessThanEq): Ditto.
4196         (KJS::LessNode::evaluate): Changed since lessThan returns bool.
4197         (KJS::LessNode::evaluateToBoolean): Added.
4198         (KJS::GreaterNode::evaluate): Changed since lessThanEq returns bool.
4199         (KJS::GreaterNode::evaluateToBoolean): Added.
4200         (KJS::LessEqNode::evaluate): Changed since lessThanEq returns bool.
4201         (KJS::LessEqNode::evaluateToBoolean): Added.
4202         (KJS::GreaterEqNode::evaluate): Changed since lessThan returns bool.
4203         (KJS::GreaterEqNode::evaluateToBoolean): Added.
4204         (KJS::InstanceOfNode::evaluateToBoolean): Added.
4205         (KJS::InNode::evaluateToBoolean): Added.
4206         (KJS::EqualNode::evaluateToBoolean): Added.
4207         (KJS::NotEqualNode::evaluateToBoolean): Added.
4208         (KJS::StrictEqualNode::evaluateToBoolean): Added.
4209         (KJS::NotStrictEqualNode::evaluateToBoolean): Added.
4210         (KJS::ConditionalNode::evaluate): Changed to call evaluateToBoolean.
4211         (KJS::IfNode::execute): Ditto.
4212         (KJS::DoWhileNode::execute): Ditto.
4213         (KJS::WhileNode::execute): Ditto.