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