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