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