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