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