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