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