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