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