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