0601c6d80329c00103025bd687a761bb2e328312
[WebKit-https.git] / JavaScriptCore / ChangeLog
1 2008-03-04  Mark Rowe  <mrowe@apple.com>
2
3         Mac build fix.
4
5         * JavaScriptCore.exp:  Add new symbol to exports file.
6
7 2008-03-03  Oliver Hunt  <oliver@apple.com>
8
9         Reviewed by Anders.
10
11         Make ForInNode check for the timeout interrupt
12
13         * kjs/nodes.cpp:
14         (KJS::ForInNode::execute):
15
16 2008-03-02  Brent Fulgham  <bfulgham@gmail.com>
17
18         Reviewed by Alp Toker.
19
20         http://bugs.webkit.org/show_bug.cgi?id=17415
21         GTK Build (using autotools) on Mac OS (DarwinPorts) Fails
22
23         Add -lstdc++ to link flags for minidom program.  This corrects
24         a build error for the GTK+ on Mac OS.
25
26         * GNUmakefile.am:
27
28 2008-03-01  Mark Rowe  <mrowe@apple.com>
29
30         Reviewed by Tim Hatcher.
31
32         Update Xcode configuration to support building debug and release from the mysterious future.
33
34         * Configurations/Base.xcconfig:
35         * Configurations/DebugRelease.xcconfig:
36
37 2008-02-29  Brent Fulgham  <bfulgham@gmail.com>
38
39         http://bugs.webkit.org/show_bug.cgi?id=17483
40         Implement scrollbars on Windows (Cairo)
41
42         Reviewed by Adam Roben.
43
44         * wtf/Platform.h:
45
46 2008-02-29  Adam Roben  <aroben@apple.com>
47
48         Remove unused DebuggerImp::abort and DebuggerImp::aborted
49
50         Reviewed by Tim and Sam.
51
52         * kjs/function_object.cpp:
53         (KJS::FunctionObjectImp::construct):
54         * kjs/internal.h:
55         (KJS::DebuggerImp::DebuggerImp):
56         * kjs/nodes.cpp:
57         (KJS::Node::handleException):
58         (KJS::FunctionBodyNodeWithDebuggerHooks::execute):
59
60 2008-02-28  Eric Christopher  <echristo@apple.com>
61
62         Reviewed by Geoffrey Garen.
63
64         ** TOTAL **:          1.005x as fast    2867.6ms +/- 0.4%  2853.2ms +/- 0.3%    significant
65
66         * kjs/nodes.cpp: Tell the compiler that exceptions are unexpected (for
67         the sake of branch prediction and code organization).
68
69 2008-02-27  Alexey Proskuryakov  <ap@webkit.org>
70
71         Reviewed by Sam Weinig.
72
73         http://bugs.webkit.org/show_bug.cgi?id=17030
74         Small buffer overflow within initialization
75
76         * kjs/date_object.cpp:
77         (KJS::DateObjectFuncImp::callAsFunction):
78         (KJS::parseDate):
79         Remove unnecessary and incorrect memset() calls - GregorianDateTime can initialize itself.
80
81 2008-02-25  Sam Weinig  <sam@webkit.org>
82
83         Reviewed by Dan Bernstein.
84
85         - Add a variant of remove that takes a position and a length.
86
87         * wtf/Vector.h:
88         (WTF::Vector::remove):
89
90 2008-02-25  Mark Mentovai  <mark@moxienet.com>
91
92         Reviewed by Mark Rowe.
93
94         Enable CollectorHeapIntrospector to build by itself, as well as in an AllInOneFile build.
95         http://bugs.webkit.org/show_bug.cgi?id=17538
96
97         * kjs/CollectorHeapIntrospector.cpp: Provide "using" declaration for
98           WTF::RemoteMemoryReader.
99         * kjs/collector.h: Move CollectorHeap declaration here...
100         * kjs/collector.cpp: ... from here.
101
102 2008-02-25  Darin Adler  <darin@apple.com>
103
104         Reviewed by Adam.
105
106         * JavaScriptCore.exp: Sort the contents of this file.
107
108 2008-02-25  Adam Roben  <aroben@apple.com>
109
110         MSVC build fix
111
112         * kjs/testkjs.cpp:
113         (functionQuit): Don't add a return statement after exit(0) for MSVC.
114
115 2008-02-24  Sam Weinig  <sam@webkit.org>
116
117         Reviewed by Mark Rowe.
118
119         http://bugs.webkit.org/show_bug.cgi?id=17529
120         Add support for reading from stdin from testkjs
121
122         * kjs/testkjs.cpp:
123         (GlobalObject::GlobalObject): Add readline function to global object.
124         (functionReadline): Added. Reads characters from stdin until a '\n' or
125         EOF is encountered. The input is returned as a String to the caller.
126
127 2008-02-24  Sam Weinig  <sam@webkit.org>
128
129         Reviewed by Mark Rowe.
130
131         http://bugs.webkit.org/show_bug.cgi?id=17528
132         Give testkjs a bath
133
134         * JavaScriptCore.exp:
135         * JavaScriptCore.xcodeproj/project.pbxproj: Make the testkjs.cpp use 4 space indentation.
136         * kjs/testkjs.cpp:
137         (StopWatch::getElapsedMS):
138         (GlobalObject::className):
139         (GlobalObject::GlobalObject):
140         Rename GlobalImp to GlobalObject and setup the global functions
141         in the GlobalObject's constructor. Also, use static functions for
142         the implementation so we can use the standard PrototypeFunction
143         class and remove TestFunctionImp.
144         (functionPrint): Move print() functionality here.
145         (functionDebug): Move debug() functionality here.
146         (functionGC): Move gc() functionality here.
147         (functionVersion): Move version() functionality here.
148         (functionRun): Move run() functionality here.
149         (functionLoad): Move load() functionality here.
150         (functionQuit): Move quit() functionality here.
151         (prettyPrintScript): Fix indentation.
152         (runWithScripts): Since all the functionality of createGlobalObject is
153         now in the GlobalObject constructor, just call new here.
154         (parseArguments): Fix indentation.
155         (kjsmain): Ditto
156         (fillBufferWithContentsOfFile): Ditto.
157
158 2008-02-24  Sam Weinig  <sam@webkit.org>
159
160         Reviewed by Oliver Hunt and Mark Rowe.
161
162         http://bugs.webkit.org/show_bug.cgi?id=17505
163         Add support for getting command line arguments in testkjs
164
165         - This slightly changes the behavior of parsing arguments by requiring
166           a '-f' before all files. 
167
168         * kjs/testkjs.cpp:
169         (createGlobalObject): Add a global property called 'arguments' which
170         contains an array with the parsed arguments as strings.
171         (runWithScripts): Pass in the arguments vector so that it can be passed
172         to the global object.
173         (parseArguments): Change parsing rules to require a '-f' before any script
174         file. After all '-f' and '-p' arguments have been parsed, the remaining
175         are added to the arguments vector and exposed to the script. If there is a
176         chance of ambiguity (the user wants to pass the string '-f' to the script),
177         the string '--' can be used separate the options from the pass through 
178         arguments.
179         (kjsmain):
180
181 2008-02-24  Dan Bernstein  <mitz@apple.com>
182
183         Reviewed by Darin Adler.
184
185         - fix http://bugs.webkit.org/show_bug.cgi?id=17511
186           REGRESSION: Reproducible crash in SegmentedSubstring::SegmentedSubstring(SegmentedSubstring const&)
187
188         * wtf/Deque.h:
189         (WTF::::expandCapacityIfNeeded): Fixed the case where m_start and m_end
190         are both zero but the buffer capacity is non-zero.
191         (WTF::::prepend): Added validity checks.
192
193 2008-02-23  Jan Michael Alonzo  <jmalonzo@unpluggable.com>
194
195         Rubber stamped by Darin.
196
197         Add separator '\' after libJavaScriptCore_la_LIBADD and cleanup
198         whitespaces introduced in the previous commit.
199
200         * GNUmakefile.am: 
201
202 2008-02-23  Jan Michael Alonzo  <jmalonzo@unpluggable.com>
203
204         * GNUmakefile.am: Add GLOBALDEPS for testkjs and minidom.
205
206 2008-02-23  Darin Adler  <darin@apple.com>
207
208         Reviewed by Anders.
209
210         - http://bugs.webkit.org/show_bug.cgi?id=17496
211           make Deque use a circular array; add iterators
212
213         * wtf/Deque.h: Wrote an all-new version of this class that uses a circular
214         buffer. Growth policy is identical to vector. Added iterators.
215
216         * wtf/Vector.h: Made two small refinements while using this to implement
217         Deque: Made VectorBufferBase derive from Noncopyable, which would have
218         saved me some debugging time if it had been there. Renamed Impl and
219         m_impl to Buffer and m_buffer.
220
221 2008-02-23  Darin Adler  <darin@apple.com>
222
223         Reviewed by Anders.
224
225         - http://bugs.webkit.org/show_bug.cgi?id=17067
226           eliminate attributes parameter from JSObject::put for speed/clarity
227
228         * API/JSCallbackObject.h: Removed attribute arguments.
229         * API/JSCallbackObjectFunctions.h:
230         (KJS::JSCallbackObject<Base>::put): Ditto.
231         * API/JSObjectRef.cpp:
232         (JSObjectSetProperty): Use initializeVariable or putDirect when necessary
233         to set attribute values.
234         * JavaScriptCore.exp: Updated.
235         * bindings/objc/objc_runtime.h: Removed attribute arguments.
236         * bindings/objc/objc_runtime.mm:
237         (ObjcFallbackObjectImp::put): Ditto.
238         * bindings/runtime_array.cpp:
239         (RuntimeArray::put): Ditto.
240         * bindings/runtime_array.h: Ditto.
241         * bindings/runtime_object.cpp:
242         (RuntimeObjectImp::put): Ditto.
243         * bindings/runtime_object.h: Ditto. Also removed canPut which was only
244         called from one place in WebCore that can use hasProperty instead.
245
246         * kjs/Activation.h: Removed attribute argument from put and added the new
247         initializeVariable function that's used to put variables in variable objects.
248         Also made isActivationObject a const member.
249
250         * kjs/JSGlobalObject.cpp:
251         (KJS::JSGlobalObject::put): Removed attribute argument.
252         (KJS::JSGlobalObject::initializeVariable): Added. Used to give variables
253         their initial values, which can include the read-only property.
254         (KJS::JSGlobalObject::reset): Removed obsolete comments about flags.
255         Removed Internal flag, which is no longer needed.
256         * kjs/JSGlobalObject.h: More of the same.
257
258         * kjs/JSVariableObject.h: Added pure virtual initializeVariable function.
259         (KJS::JSVariableObject::symbolTablePut): Removed checkReadOnly flag; we always
260         check read-only.
261         (KJS::JSVariableObject::symbolTableInitializeVariable): Added.
262
263         * kjs/array_instance.cpp:
264         (KJS::ArrayInstance::put): Removed attribute argument.
265         * kjs/array_instance.h: Ditto.
266
267         * kjs/function.cpp:
268         (KJS::FunctionImp::put): Ditto.
269         (KJS::Arguments::put): Ditto.
270         (KJS::ActivationImp::put): Ditto.
271         (KJS::ActivationImp::initializeVariable): Added.
272         * kjs/function.h: Removed attribute arguments.
273
274         * kjs/function_object.cpp:
275         (KJS::FunctionObjectImp::construct): Removed Internal flag.
276
277         * kjs/lookup.h:
278         (KJS::lookupPut): Removed attributes argument. Also changed to use putDirect
279         instead of calling JSObject::put.
280         (KJS::cacheGlobalObject): Ditto.
281
282         * kjs/nodes.cpp:
283         (KJS::ConstDeclNode::handleSlowCase): Call initializeVariable to initialize
284         the constant.
285         (KJS::ConstDeclNode::evaluateSingle): Ditto.
286         (KJS::TryNode::execute): Use putDirect to set up the new object.
287         (KJS::FunctionBodyNode::processDeclarations): Removed Internal.
288         (KJS::ProgramNode::processDeclarations): Ditto.
289         (KJS::EvalNode::processDeclarations): Call initializeVariable to initialize
290         the variables and functions.
291         (KJS::FuncDeclNode::makeFunction): Removed Internal.
292         (KJS::FuncExprNode::evaluate): Ditto.
293
294         * kjs/object.cpp: Removed canPut, which was only being used in one code path,
295         not the normal high speed one.
296         (KJS::JSObject::put): Removed attribute argument. Moved the logic from
297         canPut here, in the one code ath that was still using it.
298         * kjs/object.h: Removed Internal attribute, ad canPut function. Removed the
299         attributes argument to the put function. Made isActivationObject const.
300
301         * kjs/regexp_object.cpp:
302         (KJS::RegExpImp::put): Removed attributes argument.
303         (KJS::RegExpImp::putValueProperty): Ditto.
304         (KJS::RegExpObjectImp::put): Ditto.
305         (KJS::RegExpObjectImp::putValueProperty): Ditto.
306         * kjs/regexp_object.h: Ditto.
307
308         * kjs/string_object.cpp:
309         (KJS::StringInstance::put): Removed attributes argument.
310         * kjs/string_object.h: Ditto.
311
312 2008-02-23  Jan Michael Alonzo  <jmalonzo@unpluggable.com>
313
314         Not reviewed, Gtk build fix.
315
316         * kjs/testkjs.pro:
317
318 2008-02-23  Alexey Proskuryakov  <ap@webkit.org>
319
320         Windows build fix - move ThreadCondition implementation from WebCore to WTF.
321
322         * wtf/ThreadingWin.cpp:
323         (WTF::ThreadCondition::ThreadCondition):
324         (WTF::ThreadCondition::~ThreadCondition):
325         (WTF::ThreadCondition::wait):
326         (WTF::ThreadCondition::signal):
327         (WTF::ThreadCondition::broadcast):
328
329 2008-02-23  Alexey Proskuryakov  <ap@webkit.org>
330
331         Touch some files, hoping that Windows build bot will create JSC headers.
332
333         * kjs/AllInOneFile.cpp:
334         * kjs/array_instance.cpp:
335         * wtf/HashTable.cpp:
336
337 2008-02-23  Alexey Proskuryakov  <ap@webkit.org>
338
339         Qt/Wx build fix - this file was still in a wrong namespace, too.
340
341         * wtf/ThreadingNone.cpp:
342
343 2008-02-23  Alexey Proskuryakov  <ap@webkit.org>
344
345         More build fixing - fix mismatched braces.
346
347         * JavaScriptCore.pri:
348
349 2008-02-23  Alexey Proskuryakov  <ap@webkit.org>
350
351         Wx and Gtk build fixes.
352
353         * JavaScriptCore.pri: Don't try to compile ThreadingPthreads.
354         * wtf/ThreadingGtk.cpp: Use a correct namespace.
355
356 2008-02-23  Alexey Proskuryakov  <ap@webkit.org>
357
358         Reviewed by Darin.
359
360         Move basic threading support from WebCore to WTF.
361
362         Added mutex protection to MessageQueue::killed() for paranoia sake.
363
364         * GNUmakefile.am:
365         * JavaScriptCore.exp:
366         * JavaScriptCore.pri:
367         * JavaScriptCore.vcproj/WTF/WTF.vcproj:
368         * JavaScriptCore.xcodeproj/project.pbxproj:
369         * JavaScriptCoreSources.bkl:
370         * wtf/Locker.h: Copied from WebCore/platform/Locker.h.
371         * wtf/MessageQueue.h: Copied from WebCore/platform/MessageQueue.h.
372         (WTF::::killed):
373         * wtf/Threading.h: Copied from WebCore/platform/Threading.h.
374         * wtf/ThreadingGtk.cpp: Copied from WebCore/platform/gtk/ThreadingGtk.cpp.
375         (WebCore::createThread):
376         * wtf/ThreadingNone.cpp: Copied from WebCore/platform/ThreadingNone.cpp.
377         * wtf/ThreadingPthreads.cpp: Copied from WebCore/platform/pthreads/ThreadingPthreads.cpp.
378         (WTF::createThread):
379         * wtf/ThreadingWin.cpp: Copied from WebCore/platform/win/ThreadingWin.cpp.
380         (WTF::createThread):
381         (WTF::Mutex::Mutex):
382         (WTF::Mutex::~Mutex):
383         (WTF::Mutex::lock):
384         (WTF::Mutex::tryLock):
385         (WTF::Mutex::unlock):
386
387 2008-02-22  Geoffrey Garen  <ggaren@apple.com>
388
389         Reviewed by Sam Weinig.
390         
391         Partial fix for <rdar://problem/5744037> Gmail out of memory (17455)
392         
393         I'm removing KJS_MEM_LIMIT for the following reasons:
394         
395         - We have a few reports of KJS_MEM_LIMIT breaking important web
396         applications, like GMail and Google Reader. (For example, if you
397         simply open 12 GMail tabs, tab #12 will hit the limit.)
398
399         - Firefox has no discernable JS object count limit, so any limit, even
400         a large one, is a potential compatibility problem.
401         
402         - KJS_MEM_LIMIT does not protect against malicious memory allocation,
403         since there are many ways to maliciously allocate memory without
404         increasing the JS object count.
405         
406         - KJS_MEM_LIMIT is already mostly broken, since it only aborts the
407         script that breaches the limit, not any subsequent scripts.
408         
409         - We've never gotten bug reports about websites that would have
410         benefited from an unbroken KJS_MEM_LIMIT. The initial check-in of
411         KJS_MEM_LIMIT (KJS revision 80061) doesn't mention a website that
412         needed it.
413         
414         - Any website that brings you anywhere close to crashing due to the
415         number of live JS objects will almost certainly put up the "slow
416         script" dialog at least 20 times beforehand.
417
418         * kjs/collector.cpp:
419         (KJS::Collector::collect):
420         * kjs/collector.h:
421         * kjs/nodes.cpp:
422         (KJS::TryNode::execute):
423
424 2008-02-22  Oliver Hunt  <oliver@apple.com>
425
426         Reviewed by Alexey P.
427
428         <rdar://problem/5759327> REGRESSION: while(NaN) acts like while(true)
429
430         Fix yet another case where we incorrectly relied on implicit double
431         to bool coercion.
432
433         * kjs/nodes.cpp:
434         (KJS::PostDecLocalVarNode::evaluateToBoolean):
435
436 2008-02-20  Michael Knaup  <michael.knaup@mac.com>
437
438         Reviewed by Darin.
439
440         Fix for Bug 16753: date set methods with no args should result in NaN (Acid3 bug)
441         The set values result in NaN now when called with no args, NaN or +/- inf values.
442         The setYear, setFullYear and setUTCFullYear methods used on NaN dates work as 
443         descripted in the standard.
444
445         * kjs/date_object.cpp:
446         (KJS::fillStructuresUsingTimeArgs):
447         (KJS::fillStructuresUsingDateArgs):
448         (KJS::setNewValueFromTimeArgs):
449         (KJS::setNewValueFromDateArgs):
450         (KJS::dateProtoFuncSetYear):
451
452 2008-02-19  Anders Carlsson  <andersca@apple.com>
453
454         Reviewed by Darin.
455
456         Change OpaqueJSClass and RootObject to start with a ref count of 1.
457         
458         * API/JSClassRef.cpp:
459         (OpaqueJSClass::OpaqueJSClass):
460         (OpaqueJSClass::createNoAutomaticPrototype):
461         (OpaqueJSClass::create):
462         * API/JSClassRef.h:
463         * API/JSObjectRef.cpp:
464         (JSClassCreate):
465         * bindings/runtime_root.cpp:
466         (KJS::Bindings::RootObject::create):
467         (KJS::Bindings::RootObject::RootObject):
468
469 2008-02-19  Darin Adler  <darin@apple.com>
470
471         Rubber stamped by Anders.
472
473         - removed explicit initialization to 1 for RefCounted; that's now the default
474
475         * kjs/regexp.cpp:
476         (KJS::RegExp::RegExp): Removed RefCounted initializer.
477
478 2008-02-19  Darin Adler  <darin@apple.com>
479
480         Reviewed by Anders.
481
482         - next step for http://bugs.webkit.org/show_bug.cgi?id=17257
483           start ref counts at 1 instead of 0 for speed
484
485         * wtf/RefCounted.h:
486         (WTF::RefCounted::RefCounted): Have refcounts default to 1. This allows us to start
487         removing the explicit initialization of RefCounted from classes and eventually we
488         can remove the ability to have the initial count of 0 entirely.
489
490 2008-02-18  Samuel Weinig  <sam@webkit.org>
491
492         Reviewed by Geoff Garen.
493
494         Fix for http://bugs.webkit.org/show_bug.cgi?id=17419
495         Remove CompatMode from JavaScriptCore as it is never set to anything other than NativeMode
496
497         * kjs/JSGlobalObject.cpp:
498         (KJS::JSGlobalObject::init):
499         * kjs/JSGlobalObject.h:
500         (KJS::JSGlobalObject::setDebugger):
501         * kjs/date_object.cpp:
502         (KJS::dateProtoFuncGetYear):
503
504 2008-02-18  Darin Adler  <darin@apple.com>
505
506         Reviewed by Sam.
507
508         * wtf/ASCIICType.h:
509         (WTF::toASCIIHexValue): Added.
510
511 2008-02-17  Darin Adler  <darin@apple.com>
512
513         * wtf/ListHashSet.h: (WTF::swap): Removed stray return statement.
514
515 2008-02-15  Adam Roben  <aroben@apple.com>
516
517         Make JavaScriptCore's FEATURE_DEFINES match WebCore's
518
519         Reviewed by Mark.
520
521         * Configurations/JavaScriptCore.xcconfig:
522
523 2008-02-14  Stephanie Lewis <slewis@apple.com>
524
525         Reviewed by Geoff.
526
527         Update order files.
528
529         * JavaScriptCore.order:
530
531 2008-02-14  Geoffrey Garen  <ggaren@apple.com>
532
533         Reviewed by Sam Weinig.
534         
535         Fixed <rdar://problem/5737835> nee http://bugs.webkit.org/show_bug.cgi?id=17329
536         Crash in JSGlobalObject::popActivation when inserting hyperlink in Wordpress (17329)
537         
538         Don't reset the "activations" stack in JSGlobalObject::reset, since we
539         might be executing a script during the call to reset, and the script
540         needs to safely run to completion.
541         
542         Instead, initialize the "activations" stack when the global object is
543         created, and subsequently rely on pushing and popping during normal
544         execution to maintain the stack's state.
545         
546         * kjs/JSGlobalObject.cpp:
547         (KJS::JSGlobalObject::init):
548         (KJS::JSGlobalObject::reset):
549
550 2008-02-13  Bernhard Rosenkraenzer  <bero@arklinux.org>
551
552         Reviewed by Darin.
553
554         - http://bugs.webkit.org/show_bug.cgi?id=17339
555           JavaScriptCore does not build with gcc 4.3
556
557         * kjs/interpreter.cpp: Add include of <unistd.h>, since that's where
558         getpid() comes from.
559
560 2008-02-13  Oliver Hunt  <oliver@apple.com>
561
562         Reviewed by Alexey P.
563
564         <rdar://problem/5737003> REGRESSION (r27747): can't browse pictures on fastcupid.com
565
566         When converting numeric values to booleans we need to account for NaN
567
568         * kjs/nodes.cpp:
569         (KJS::MultNode::evaluateToBoolean):
570         (KJS::ModNode::evaluateToBoolean):
571
572 2008-02-08  Samuel Weinig  <sam@webkit.org>
573
574         Reviewed by Brady Eidson.
575
576         <rdar://problem/5659216> REGRESSION: PLT 0.3% slower due to r28868 (caching ClassNodeList and NamedNodeList)
577
578         - Tweak the statements in isASCIISpace to account for the statistical distribution of
579           usage in the PLT.
580
581         .4% speedup on my machine.  Stephanie's machine shows this as .3% speedup.
582
583         * wtf/ASCIICType.h:
584         (WTF::isASCIISpace): 
585
586 2008-02-11  Sam Weinig  <sam@webkit.org>
587
588         Reviewed by Anders Carlsson.
589
590         Fixes for:
591         <rdar://problem/5735497> Match Firefox's cross-domain model more accurately by return the built-in version of functions even if they have been overridden
592         <rdar://problem/5735443> Crash when setting the Window objects prototype to a custom Object and then calling a method on it
593
594         - Expose the native Object.prototype.toString implementation so that it can be used for cross-domain
595           toString calling.
596
597         * JavaScriptCore.exp:
598         * kjs/object_object.cpp:
599         * kjs/object_object.h:
600
601 2008-02-10  Darin Adler  <darin@apple.com>
602
603         Rubber stamped by Eric.
604
605         * kjs/ExecState.h:
606         (KJS::ExecState::takeException): Added.
607
608 2008-02-10  Darin Adler  <darin@apple.com>
609
610         Reviewed by Eric.
611
612         - http://bugs.webkit.org/show_bug.cgi?id=17256
613           eliminate default ref. count of 0 in RefCounted class
614
615         * wtf/RefCounted.h:
616         (WTF::RefCounted::RefCounted): Remove default of 0.
617
618 2008-02-10  Darin Adler  <darin@apple.com>
619
620         Reviewed by Eric.
621
622         - http://bugs.webkit.org/show_bug.cgi?id=17256
623           Make clients of RefCounted explicitly set the count to 0.
624
625         * API/JSClassRef.cpp:
626         (OpaqueJSClass::OpaqueJSClass):
627         * bindings/runtime_root.cpp:
628         (KJS::Bindings::RootObject::RootObject):
629
630 2008-02-09  Darin Adler  <darin@apple.com>
631
632         Reviewed by Mitz.
633
634         - http://bugs.webkit.org/show_bug.cgi?id=17256
635           Change RegExp to start its ref count at 1, not 0
636
637         We'll want to do this to every RefCounted class, one at a time.
638
639         * kjs/nodes.h:
640         (KJS::RegExpNode::RegExpNode): Use RegExp::create instead of new RegExp.
641         * kjs/regexp.cpp:
642         (KJS::RegExp::RegExp): Marked inline, set initial ref count to 1.
643         (KJS::RegExp::create): Added. Calls new RegExp then adopts the initial ref.
644         * kjs/regexp.h: Reformatted. Made the constructors private. Added static
645         create functions that return objects already wrapped in PassRefPtr.
646         * kjs/regexp_object.cpp:
647         (KJS::regExpProtoFuncCompile): Use RegExp::create instead of new RegExp.
648         (KJS::RegExpObjectImp::construct): Ditto.
649         * kjs/string_object.cpp:
650         (KJS::stringProtoFuncMatch): Ditto.
651         (KJS::stringProtoFuncSearch): Ditto.
652
653 2008-02-08  Oliver Hunt  <oliver@apple.com>
654
655         Reviewed by Maciej.
656
657         <rdar://problem/5731773> REGRESSION (r28973): Extraneous parentheses in function.toString()
658         https://bugs.webkit.org/show_bug.cgi?id=17214
659
660         Make a subclass of CommaNode to provide the correct precedence for each expression in
661         a variable declaration list.
662
663         * kjs/grammar.y:
664         * kjs/nodes.h:
665         (KJS::VarDeclCommaNode::):
666
667 2008-02-08  Darin Adler  <darin@apple.com>
668
669         Reviewed by Oliver.
670
671         - fix http://bugs.webkit.org/show_bug.cgi?id=17247
672           Labelled continue/break can fail in some cases
673
674         Test: fast/js/continue-break-multiple-labels.html
675
676         * kjs/nodes.h:
677         (KJS::StatementNode::pushLabel): Made this virtual.
678         (KJS::LabelNode::pushLabel): Forward pushLabel calls to the statement inside.
679
680 2008-02-08  Darin Adler  <darin@apple.com>
681
682         Reviewed by Eric.
683
684         - fix http://bugs.webkit.org/show_bug.cgi?id=15003
685           Function.prototype.constructor should not be DontDelete/ReadOnly (Acid3 bug)
686
687         Test: fast/js/constructor-attributes.html
688
689         * kjs/JSGlobalObject.cpp:
690         (KJS::JSGlobalObject::reset): Remove unwanted attributes from "constructor".
691         * kjs/function_object.cpp:
692         (KJS::FunctionObjectImp::construct): Ditto.
693         * kjs/nodes.cpp:
694         (KJS::FuncDeclNode::makeFunction): Ditto.
695         (KJS::FuncExprNode::evaluate): Ditto.
696
697 2008-02-06  Geoffrey Garen  <ggaren@apple.com>
698
699         Reviewed by Oliver Hunt.
700         
701         Added an ASSERT to catch refCount underflow, since it caused a leak in
702         my last check-in.
703
704         * wtf/RefCounted.h:
705         (WTF::RefCounted::deref):
706
707 2008-02-06  Geoffrey Garen  <ggaren@apple.com>
708
709         Reviewed by Darin Adler.
710
711         PLT speedup related to <rdar://problem/5659272> REGRESSION: PLT .4%
712         slower due to r28884 (global variable symbol table optimization)
713         
714         Tweaked RefCounted::deref() to be a little more efficient.
715
716         1% - 1.5% speedup on my machine. .7% speedup on Stephanie's machine.
717         
718         * wtf/RefCounted.h:
719         (WTF::RefCounted::deref): Don't modify m_refCount if we're just going
720         to delete the object anyway. Also, use a simple == test, which might be
721         faster than <= on some hardware.
722
723 2008-02-06  Darin Adler  <darin@apple.com>
724
725         Reviewed by Sam.
726
727         - fix http://bugs.webkit.org/show_bug.cgi?id=17094
728           Array.prototype functions create length properties with DontEnum/DontDelete
729
730         Test results match Gecko with very few obscure exceptions that seem to be
731         bugs in Gecko.
732
733         Test: fast/js/array-functions-non-arrays.html
734
735         * kjs/array_object.cpp:
736         (KJS::arrayProtoFuncConcat):  Removed DontEnum and DontDelete from the call
737         to set length.
738         (KJS::arrayProtoFuncPop): Ditto. Also added missing call to deleteProperty,
739         which is not needed for real arrays, but is needed for non-arrays.
740         (KJS::arrayProtoFuncPush): Ditto.
741         (KJS::arrayProtoFuncShift): Ditto.
742         (KJS::arrayProtoFuncSlice): Ditto.
743         (KJS::arrayProtoFuncSort): Removed incorrect call to set length when
744         the array has no elements.
745         (KJS::arrayProtoFuncSplice): Removed DontEnum and DontDelete from the call
746         to set length.
747         (KJS::arrayProtoFuncUnShift): Ditto. Also added a check for 0 arguments to
748         make behavior match the specification in that case.
749         * kjs/nodes.cpp:
750         (KJS::ArrayNode::evaluate): Removed DontEnum and DontDelete from the call
751         to set length.
752
753 2008-02-06  Darin Adler  <darin@apple.com>
754
755         Reviewed by Sam.
756
757         - replace calls to put to set up properties with calls to putDirect, to
758           prepare for a future change where put won't take attributes any more,
759           and for a slight performance boost
760
761         * API/JSObjectRef.cpp:
762         (JSObjectMakeConstructor): Use putDirect instead of put.
763         * kjs/CommonIdentifiers.h: Removed lastIndex.
764         * kjs/JSGlobalObject.cpp:
765         (KJS::JSGlobalObject::reset): Use putDirect instead of put.
766         * kjs/array_object.cpp:
767         (KJS::arrayProtoFuncConcat): Took out extra call to get length (unused).
768         (KJS::ArrayObjectImp::ArrayObjectImp): Use putDirect instead of put.
769         * kjs/error_object.cpp:
770         (KJS::ErrorPrototype::ErrorPrototype): Use putDirect instead of put.
771         * kjs/function.cpp:
772         (KJS::Arguments::Arguments): Use putDirect instead of put.
773         (KJS::PrototypeFunction::PrototypeFunction): Use putDirect instead of put.
774         * kjs/function_object.cpp:
775         (KJS::FunctionObjectImp::construct): Use putDirect instead of put.
776         * kjs/nodes.cpp:
777         (KJS::FuncDeclNode::makeFunction): Use putDirect instead of put.
778         (KJS::FuncExprNode::evaluate): Use putDirect instead of put.
779         * kjs/regexp_object.cpp:
780         (KJS::regExpProtoFuncCompile): Use setLastIndex instead of put(lastIndex).
781         (KJS::RegExpImp::match): Get and set lastIndex by using m_lastIndex instead of
782         calling get and put.
783         * kjs/regexp_object.h:
784         (KJS::RegExpImp::setLastIndex): Added.
785         * kjs/string_object.cpp:
786         (KJS::stringProtoFuncMatch): Use setLastIndex instead of put(lastIndex).
787
788 2008-02-05  Sam Weinig  <sam@webkit.org>
789
790         Reviewed by Anders Carlsson.
791
792         Fix for http://bugs.webkit.org/show_bug.cgi?id=8080
793         NodeList (and other DOM lists) items are not enumeratable using for..in
794
795         * JavaScriptCore.exp:
796
797 2008-02-05  Mark Rowe  <mrowe@apple.com>
798
799         Reviewed by Oliver Hunt.
800
801         Update versioning to support the mysterious future.
802
803         * Configurations/Version.xcconfig: Add SYSTEM_VERSION_PREFIX_1060.
804
805 2008-02-04  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
806
807         Reviewed by Oliver Hunt.
808
809         Fixes Bug 16889: REGRESSION (r29425): Canvas-based graphing calculator fails to run
810               Bug 17015: REGRESSION (r29414-29428): www.fox.com "shows" menu fails to render
811               Bug 17164: REGRESSION: JavaScript pop-up menu appears at wrong location when hovering image at http://news.chinatimes.com/
812
813         <http://bugs.webkit.org/show_bug.cgi?id=16889>
814         <rdar://problem/5696255>
815
816         <http://bugs.webkit.org/show_bug.cgi?id=17015>
817
818         <http://bugs.webkit.org/show_bug.cgi?id=17164>
819         <rdar://problem/5720947>
820
821         The ActivationImp tear-off (r29425) introduced a problem with ReadModify
822         nodes that first resolve a slot, call valueForReadModifyNode(), and then
823         store a value in the previously resolved slot. Since valueForReadModifyNode()
824         may cause a tear-off, the slot needs to be resolved again, but this was
825         not happening with the existing code.
826
827         * kjs/nodes.cpp:
828         (KJS::ReadModifyLocalVarNode::evaluate):
829         (KJS::ReadModifyResolveNode::evaluate):
830
831 2008-02-04  Cameron McCormack <cam@mcc.id.au>
832
833         Reviewed by Geoff Garen.
834
835         Remove some unneccesary UNUSED_PARAMs.  Clarify ownership rule of return value of JSObjectCopyPropertyNames.
836
837         * API/JSNode.c:
838         (JSNode_appendChild):
839         (JSNode_removeChild):
840         (JSNode_replaceChild):
841         (JSNode_getNodeType):
842         (JSNode_getFirstChild):
843         * API/JSNodeList.c:
844         (JSNodeList_length):
845         * API/JSObjectRef.h:
846
847 2008-02-04  Rodney Dawes  <dobey@wayofthemonkey.com>
848
849         Reviewed by Alp Toker and Mark Rowe.
850
851         Fix http://bugs.webkit.org/show_bug.cgi?id=17175.
852         Bug 17175: Use of C++ compiler flags in CFLAGS
853
854         * GNUmakefile.am: Use global_cxxflags as well as global_cflags in CXXFLAGS.
855
856 2008-02-04  Alp Toker  <alp@atoker.com>
857
858         Rubber-stamped by Mark Rowe.
859
860         Remove all trailing whitespace in the GTK+ port and related
861         components.
862
863         * GNUmakefile.am:
864
865 2008-02-02  Darin Adler  <darin@apple.com>
866
867         Reviewed by Geoff Garen.
868
869         PLT speedup related to <rdar://problem/5659272> REGRESSION: PLT .4%
870         slower due to r28884 (global variable symbol table optimization)
871
872         Geoff's theory is that the slowdown was due to copying hash tables when
873         putting things into the back/forward cache. If that's true, then this
874         should fix the problem.
875
876         (According to Geoff's measurements, in a PLT that exaggerates the
877         importance of symbol table saving during cached page creation, this
878         patch is a ~3X speedup in cached page creation, and a 9% speedup overall.)
879
880         * JavaScriptCore.exp: Updated.
881
882         * kjs/JSVariableObject.cpp:
883         (KJS::JSVariableObject::saveLocalStorage): Updated for changes to SavedProperty,
884         which has been revised to avoid initializing each SavedProperty twice when building
885         the array. Store the property names too, so we don't have to store the symbol table
886         separately. Do this by iterating the symbol table instead of the local storage vector.
887         (KJS::JSVariableObject::restoreLocalStorage): Ditto. Restore the symbol table as
888         well as the local storage vector.
889
890         * kjs/JSVariableObject.h: Removed save/restoreSymbolTable and do that work inside
891         save/restoreLocalStorage instead. Made restoreLocalStorage a non-const member function
892         that takes a const reference to a SavedProperties object.
893
894         * kjs/LocalStorage.h: Changed attributes to be unsigned instead of int to match
895         other declarations of attributes elsewhere.
896
897         * kjs/property_map.cpp:
898         (KJS::SavedProperties::SavedProperties): Updated for data member name change.
899         (KJS::PropertyMap::save): Updated for data member name change and to use the new
900         inline init function instead of setting the fields directly. This allows us to
901         skip initializing the SavedProperty objects when first allocating the array, and
902         just do it when we're actually setting up the individual elements.
903         (KJS::PropertyMap::restore): Updated for SavedProperty changes.
904
905         * kjs/property_map.h: Changed SavedProperty from a struct to a class. Set it up so
906         it does not get initialized at construction time to avoid initializing twice when
907         creating an array of SavedProperty. Removed the m_ prefixes from the members of
908         the SavedProperties struct. Generally we use m_ for class members and not struct.
909
910 2008-02-02  Tony Chang  <idealisms@gmail.com>
911
912         Reviewed by darin.  Landed by eseidel.
913
914         Add #define guards for WIN32_LEAN_AND_MEAN and _CRT_RAND_S.
915
916         * kjs/config.h:
917         * wtf/FastMalloc.cpp:
918         * wtf/TCSpinLock.h:
919
920 2008-01-28  Sam Weinig  <sam@webkit.org>
921
922         Rubber-stamped by Darin Adler.
923
924         - Fix whitespace in nodes.h/cpp and nodes2string.cpp.
925
926         (NOTE: Specific changed functions elided for space and clarity)
927         * kjs/nodes.cpp:
928         * kjs/nodes.h:
929         * kjs/nodes2string.cpp:
930
931 2008-01-27  Sam Weinig  <sam@webkit.org>
932
933         Reviewed by Oliver Hunt.
934
935         Patch for http://bugs.webkit.org/show_bug.cgi?id=17025
936         nodes.h/cpp has been rolling around in the mud - lets hose it down
937
938         - Rename member variables to use the m_ prefix.
939
940         (NOTE: Specific changed functions elided for space and clarity)
941         * kjs/grammar.y:
942         * kjs/nodes.cpp:
943         * kjs/nodes.h:
944         * kjs/nodes2string.cpp:
945
946 2008-01-27  Darin Adler  <darin@apple.com>
947
948         Reviewed by Oliver.
949
950         - fix <rdar://problem/5657450> REGRESSION: const is broken
951
952         Test: fast/js/const.html
953
954         SunSpider said this was 0.3% slower. And I saw some Shark samples in
955         JSGlobalObject::put -- not a lot but a few. We may be able to regain the
956         speed, but for now we will take that small hit for correctness sake.
957
958         * kjs/JSGlobalObject.cpp:
959         (KJS::JSGlobalObject::put): Pass the checkReadOnly flag in to symbolTablePut
960         instead of passing attributes.
961
962         * kjs/JSVariableObject.h:
963         (KJS::JSVariableObject::symbolTablePut): Removed the code to set attributes
964         here, since we only set attributes when creating a property. Added the code
965         to check read-only here, since we need that to implement const!
966
967         * kjs/function.cpp:
968         (KJS::ActivationImp::put): Pass the checkReadOnly flag in to symbolTablePut
969         instead of passing attributes.
970
971         * kjs/nodes.cpp:
972         (KJS::isConstant): Added.
973         (KJS::PostIncResolveNode::optimizeVariableAccess): Create a PostIncConstNode
974         if optimizing for a local variable and the variable is constant.
975         (KJS::PostDecResolveNode::optimizeVariableAccess): Ditto. But PostDecConstNode.
976         (KJS::PreIncResolveNode::optimizeVariableAccess): Ditto. But PreIncConstNode.
977         (KJS::PreDecResolveNode::optimizeVariableAccess): Ditto. But PreDecConstNode.
978         (KJS::PreIncConstNode::evaluate): Return the value + 1.
979         (KJS::PreDecConstNode::evaluate): Return the value - 1.
980         (KJS::PostIncConstNode::evaluate): Return the value converted to a number.
981         (KJS::PostDecConstNode::evaluate): Ditto.
982         (KJS::ReadModifyResolveNode::optimizeVariableAccess): Create a ReadModifyConstNode
983         if optimizing for a local variable and the variable is constant.
984         (KJS::AssignResolveNode::optimizeVariableAccess): Ditto. But AssignConstNode.
985         (KJS::ScopeNode::optimizeVariableAccess): Pass the local storage to the
986         node optimizeVariableAccess functions, since that's where we need to look to
987         figure out if a variable is constant.
988         (KJS::FunctionBodyNode::processDeclarations): Moved the call to
989         optimizeVariableAccess until after localStorage is set up.
990         (KJS::ProgramNode::processDeclarations): Ditto.
991
992         * kjs/nodes.h: Fixed the IsConstant and HasInitializer values. They are used
993         as flag masks, so a value of 0 will not work for IsConstant. Changed the
994         first parameter to optimizeVariableAccess to be a const reference to a symbol
995         table and added a const reference to local storage. Added classes for const
996         versions of local variable access: PostIncConstNode, PostDecConstNode,
997         PreIncConstNode, PreDecConstNode, ReadModifyConstNode, and AssignConstNode.
998
999         * kjs/object.cpp:
1000         (KJS::JSObject::put): Tweaked comments a bit, and changed the checkReadOnly
1001         expression to match the form used at the two other call sites.
1002
1003 2008-01-27  Darin Adler  <darin@apple.com>
1004
1005         Reviewed by Oliver.
1006
1007         - fix http://bugs.webkit.org/show_bug.cgi?id=16498
1008           ''.constructor.toString() gives [function]
1009
1010         Test: fast/js/function-names.html
1011
1012         * kjs/array_object.cpp:
1013         (KJS::ArrayObjectImp::ArrayObjectImp): Use the class name as the constructor's function name.
1014         * kjs/bool_object.cpp:
1015         (KJS::BooleanObjectImp::BooleanObjectImp): Ditto.
1016         * kjs/date_object.cpp:
1017         (KJS::DateObjectImp::DateObjectImp): Ditto.
1018         * kjs/error_object.cpp:
1019         (KJS::ErrorPrototype::ErrorPrototype): Make the error object be an Error.
1020         (KJS::ErrorObjectImp::ErrorObjectImp): Use the class name as the constructor's function name.
1021         (KJS::NativeErrorPrototype::NativeErrorPrototype): Take const UString&.
1022         (KJS::NativeErrorImp::NativeErrorImp): Use the prototype's name as the constructor's function
1023         name.
1024         * kjs/error_object.h: Change ErrorPrototype to inherit from ErrorInstance. Change the
1025         NativeErrorImp constructor to take a NativeErrorPrototype pointer for its prototype.
1026         * kjs/function.h: Removed unneeded constructor for internal functions without names.
1027         We want to avoid those!
1028         * kjs/function_object.cpp:
1029         (KJS::functionProtoFuncToString): Removed code that writes out just [function] for functions
1030         that have no names. There's no reason to do that.
1031         (KJS::FunctionObjectImp::FunctionObjectImp): Use the class name as the constructor's
1032         function name.
1033         * kjs/internal.cpp: Removed the unused constructor.
1034         * kjs/number_object.cpp:
1035         (KJS::fractionalPartToString): Marked static for internal linkage.
1036         (KJS::exponentialPartToString): Ditto.
1037         (KJS::numberProtoFuncToPrecision): Removed an unneeded else.
1038         (KJS::NumberObjectImp::NumberObjectImp): Use the class name as the constructor's
1039         function name.
1040         (KJS::NumberObjectImp::getValueProperty): Tweaked formatting.
1041         * kjs/object_object.cpp:
1042         (KJS::ObjectObjectImp::ObjectObjectImp): Use "Object" for the function name.
1043         * kjs/regexp_object.cpp:
1044         (KJS::RegExpObjectImp::RegExpObjectImp): Use "RegExp" for the function name.
1045         * kjs/string_object.cpp:
1046         (KJS::StringObjectImp::StringObjectImp): Use the class name as the constructor's
1047         function name.
1048
1049 2008-01-26  Darin Adler  <darin@apple.com>
1050
1051         Reviewed by Oliver.
1052
1053         - fix http://bugs.webkit.org/show_bug.cgi?id=17027
1054           Incorrect Function.toString behaviour with read/modify/write operators performed on negative numbers
1055
1056         Test: fast/js/function-toString-parentheses.html
1057
1058         The problem here was that a NumberNode with a negative number in it had the wrong
1059         precedence. It's not a primary expression, it's a unary operator with a primary
1060         expression after it.
1061
1062         Once the precedence of NumberNode was fixed, the cases from bug 17020 were also
1063         fixed without trying to treat bracket nodes like dot nodes. That wasn't needed.
1064         The reason we handle numbers before dot nodes specially is that the dot is a
1065         legal character in a number. The same is not true of a bracket. Eventually we
1066         could get smarter, and only add the parentheses when there is actual ambiguity.
1067         There is none if the string form of the number already has a dot in it, or if
1068         it's a number with a alphabetic name like infinity or NAN.
1069
1070         * kjs/nodes.h: Renamed back from ObjectAccess to DotExpr.
1071         (KJS::NumberNode::precedence): Return PrecUnary for negative numbers, since
1072         they serialize as a unary operator, not a primary expression.
1073         * kjs/nodes2string.cpp:
1074         (KJS::SourceStream::operator<<): Clear m_numberNeedsParens if this adds
1075         parens; one set is enough.
1076         (KJS::bracketNodeStreamTo): Remove unneeded special flag here. Normal
1077         operator precedence suffices.
1078         (KJS::NewExprNode::streamTo): Ditto.
1079
1080 2008-01-26  Oliver Hunt  <oliver@apple.com>
1081
1082         Reviewed by Maciej and Darin.
1083
1084         Fix for http://bugs.webkit.org/show_bug.cgi?id=17020
1085         Function.toString does not parenthesise numbers for the bracket accessor
1086
1087         It turns out that logic was there for all of the dot accessor nodes to make numbers be
1088         parenthesised properly, so it was a trivial extension to extend that to the bracket nodes.
1089         I renamed the enum type to reflect the fact that it is now used for both dot and bracket
1090         accessors.
1091
1092         * kjs/nodes2string.cpp:
1093         (KJS::bracketNodeStreamTo):
1094         (KJS::BracketAccessorNode::streamTo):
1095
1096 2008-01-26  Oliver Hunt  <oliver@apple.com>
1097
1098         Reviewed by Darin.
1099
1100         Fix Bug 17018: Incorrect code generated from Function.toString for get/setters in object literals
1101
1102         Don't quote getter and setter names during output, as that is simply wrong.
1103
1104         * kjs/nodes2string.cpp:
1105         (KJS::PropertyNode::streamTo):
1106
1107 2008-01-26  Darin Adler  <darin@apple.com>
1108
1109         Reviewed by Eric Seidel.
1110
1111         - http://bugs.webkit.org/show_bug.cgi?id=16860
1112           a bit of cleanup after the Activation optimization
1113
1114         * JavaScriptCore.exp: Export the GlobalExecState constructor instead of
1115         the global flavor of the ExecState constructor. It'd probably be cleaner
1116         to not export either one, but JSGlobalObject inlines the code that
1117         constructs the ExecState. If we changed that, we could remove this export.
1118
1119         * JavaScriptCore.xcodeproj/project.pbxproj: Re-sorted a few things and
1120         put the new source files into the kjs group rather than at the top level.
1121
1122         * kjs/ExecState.cpp:
1123         (KJS::ExecState::ExecState): Marked inline and updated for data member
1124         name changes. This is now only for use for the derived classes. Also removed
1125         code that sets the unused m_savedExec data member for the global case. That
1126         data member is only used for the other two types.
1127         (KJS::ExecState::~ExecState): Marked inline and removed all the code.
1128         The derived class destructors now inclde the appropriate code.
1129         (KJS::ExecState::lexicalGlobalObject): Removed unneeded special case for
1130         an empty scope chain. The bottom function already returns 0 for that case,
1131         so the general case code handles it fine. Also changed to use data members
1132         directly rather than calling functions.
1133         (KJS::GlobalExecState::GlobalExecState): Added. Calls through to the base
1134         class constructor.
1135         (KJS::GlobalExecState::~GlobalExecState): Added.
1136         (KJS::InterpreterExecState::InterpreterExecState): Added. Moved code to
1137         manipulate activeExecStates here since we don't want to have to check for the
1138         special case of globalExec.
1139         (KJS::InterpreterExecState::~InterpreterExecState): Added.
1140         (KJS::EvalExecState::EvalExecState): Added.
1141         (KJS::EvalExecState::~EvalExecState): Added.
1142         (KJS::FunctionExecState::FunctionExecState): Added.
1143         (KJS::FunctionExecState::~FunctionExecState): Added.
1144
1145         * kjs/ExecState.h: Tweaked the header, includes, and declarations a bit.
1146         Made ExecState inherit from Noncopyable. Reformatted some comments and
1147         made them a bit more brief. Rearranged declarations a little bit and removed
1148         unused savedExec function. Changed seenLabels function to return a reference
1149         rather than a pointer. Made constructors and destructor protected, and also
1150         did the same with all data members. Renamed m_thisVal to m_thisValue and
1151         ls to m_labelStack. Added three new derived classes for each of the
1152         types of ExecState. The primary goal here was to remove a branch from the
1153         code in the destructor, but it's also clearer than overloading the arguments
1154         to the ExecState constructor.
1155
1156         * kjs/JSGlobalObject.cpp:
1157         (KJS::getCurrentTime): Fixed formatting.
1158         (KJS::JSGlobalObject::pushActivation): Removed parentheses that don't make
1159         the expression clearer -- other similar sites didn't have these parentheses,
1160         even the one a couple lines earlier that sets stackEntry.
1161         (KJS::JSGlobalObject::tearOffActivation): Got rid of unneeded static_cast
1162         (I think I mentioned this during patch review) and used an early exit so that
1163         the entire contents of the function aren't nested inside an if statement.
1164         Also removed the check of codeType, instead checking Activation for 0.
1165         For now, I kept the codeType check, but inside an assertion.
1166
1167         * kjs/JSGlobalObject.h: Changed type of globalExec to GlobalExecState.
1168         * kjs/function.cpp:
1169         (KJS::FunctionImp::callAsFunction): Changed type to FunctionExecState.
1170         (KJS::GlobalFuncImp::callAsFunction): Changed type to EvalExecState.
1171         * kjs/interpreter.cpp:
1172         (KJS::Interpreter::evaluate): Changed type to GlobalExecState.
1173
1174         * kjs/nodes.cpp:
1175         (KJS::ContinueNode::execute): Changed code since seenLabels() returns a
1176         reference now instead of a pointer.
1177         (KJS::BreakNode::execute): Ditto.
1178         (KJS::LabelNode::execute): Ditto.
1179
1180 2008-01-26  Sam Weinig  <sam@webkit.org>
1181
1182         Reviewed by Mark Rowe.
1183
1184         Cleanup node2string a little.
1185         - Remove some unnecessary branching.
1186         - Factor out bracket and dot streaming into static inline functions.
1187
1188         * kjs/nodes.h:
1189         * kjs/nodes2string.cpp:
1190         (KJS::bracketNodeStreamTo):
1191         (KJS::dotNodeStreamTo):
1192         (KJS::FunctionCallBracketNode::streamTo):
1193         (KJS::FunctionCallDotNode::streamTo):
1194         (KJS::PostIncBracketNode::streamTo):
1195         (KJS::PostDecBracketNode::streamTo):
1196         (KJS::PostIncDotNode::streamTo):
1197         (KJS::PostDecDotNode::streamTo):
1198         (KJS::DeleteBracketNode::streamTo):
1199         (KJS::DeleteDotNode::streamTo):
1200         (KJS::PreIncBracketNode::streamTo):
1201         (KJS::PreDecBracketNode::streamTo):
1202         (KJS::PreIncDotNode::streamTo):
1203         (KJS::PreDecDotNode::streamTo):
1204         (KJS::ReadModifyBracketNode::streamTo):
1205         (KJS::AssignBracketNode::streamTo):
1206         (KJS::ReadModifyDotNode::streamTo):
1207         (KJS::AssignDotNode::streamTo):
1208         (KJS::WhileNode::streamTo):
1209
1210 2008-01-26  Mark Rowe  <mrowe@apple.com>
1211
1212         Reviewed by Darin Adler.
1213
1214         Fix http://bugs.webkit.org/show_bug.cgi?id=17001
1215         Bug 17001: Build error with Gtk port on Mac OS X
1216
1217         If both XP_MACOSX and XP_UNIX are defined then X11.h and Carbon.h will both be included.
1218         These provide conflicting definitions for a type named 'Cursor'.  As XP_UNIX is set by
1219         the build system when targeting X11, it doesn't make sense for XP_MACOSX to also be set
1220         in this instance.
1221
1222         * bindings/npapi.h: Don't define XP_MACOSX if XP_UNIX is defined.
1223
1224 2008-01-26  Darin Adler  <darin@apple.com>
1225
1226         Reviewed by Oliver.
1227
1228         - fix http://bugs.webkit.org/show_bug.cgi?id=17013
1229           JSC can't round trip certain for-loops
1230
1231         Test: fast/js/toString-for-var-decl.html
1232
1233         * kjs/nodes.h: Added PlaceholderTrueNode so we can put nodes into
1234         for loops without injecting the word "true" into them (nice, but not
1235         the bug fix). Fixed ForNode constructor so expr1WasVarDecl is set
1236         only when there is an expression, since it's common for the actual
1237         variable declaration to be moved by the parser.
1238
1239         * kjs/nodes2string.cpp:
1240         (KJS::PlaceholderTrueNode::streamTo): Added. Empty.
1241
1242 2008-01-25  Oliver Hunt  <oliver@apple.com>
1243
1244         Reviewed by Maciej.
1245
1246         Fix for bug 17012: REGRESSION: JSC can't round trip an object literal
1247
1248         Add logic to ensure that object literals and function expressions get
1249         parentheses when necessary.
1250
1251         * kjs/nodes.h:
1252         * kjs/nodes2string.cpp:
1253         (KJS::SourceStream::operator<<):
1254
1255 2008-01-24  Steve Falkenburg  <sfalken@apple.com>
1256
1257         Build fix.
1258
1259         * JavaScriptCore.vcproj/JavaScriptCore.sln:
1260
1261 2008-01-24  Steve Falkenburg  <sfalken@apple.com>
1262
1263         Build fix.
1264
1265         * JavaScriptCore.vcproj/JavaScriptCoreSubmit.sln:
1266
1267 2008-01-24  Michael Goddard  <michael.goddard@trolltech.com>
1268
1269         Reviewed by Simon.
1270
1271         Fix QDateTime to JS Date conversion.
1272         Several conversion errors (some UTC related, some month
1273         offset related) and the conversion distance for Date
1274         to DateTime conversion weights were fixed (it should never
1275         be better to convert a JS Number into a Date rather than
1276         an int).
1277         
1278         * bindings/qt/qt_runtime.cpp:
1279         (KJS::Bindings::convertValueToQVariant):
1280         (KJS::Bindings::convertQVariantToValue):
1281
1282 2008-01-24  Michael Goddard  <michael.goddard@trolltech.com>
1283
1284         Reviewed by Simon.
1285
1286         Add support for calling QObjects.
1287         Add support for invokeDefaultMethod (via a call to
1288         a specific slot), and also allow using it as a
1289         constructor, like QtScript.
1290         
1291
1292         * bindings/qt/qt_class.cpp:
1293         (KJS::Bindings::QtClass::fallbackObject):
1294         * bindings/qt/qt_instance.cpp:
1295         (KJS::Bindings::QtRuntimeObjectImp::construct):
1296         (KJS::Bindings::QtInstance::QtInstance):
1297         (KJS::Bindings::QtInstance::~QtInstance):
1298         (KJS::Bindings::QtInstance::implementsCall):
1299         (KJS::Bindings::QtInstance::invokeDefaultMethod):
1300         * bindings/qt/qt_instance.h:
1301         * bindings/qt/qt_runtime.cpp:
1302         (KJS::Bindings::findMethodIndex):
1303         (KJS::Bindings::QtRuntimeMetaMethod::QtRuntimeMetaMethod):
1304         (KJS::Bindings::QtRuntimeMetaMethod::callAsFunction):
1305         * bindings/qt/qt_runtime.h:
1306
1307 2008-01-24  Michael Goddard  <michael.goddard@trolltech.com>
1308
1309         Reviewed by Simon.
1310
1311         Code style cleanups.
1312         Add spaces before/after braces in inline function.
1313
1314         * bindings/qt/qt_instance.h:
1315
1316 2008-01-24  Michael Goddard  <michael.goddard@trolltech.com>
1317
1318         Reviewed by Simon.
1319
1320         Code style cleanups.
1321         Remove spaces and unneeded declared parameter names.
1322
1323         * bindings/qt/qt_instance.cpp:
1324         (KJS::Bindings::QtRuntimeObjectImp::removeFromCache):
1325
1326 2008-01-24  Michael Goddard  <michael.goddard@trolltech.com>
1327
1328         Reviewed by Simon.
1329
1330         Clear stale RuntimeObjectImps.
1331         Since other objects can have refs to the QtInstance,
1332         we can't rely on the QtInstance being deleted when the
1333         RuntimeObjectImp is invalidate or deleted.  This
1334         could result in a stale JSObject being returned for
1335         a valid Instance.
1336
1337         * bindings/qt/qt_instance.cpp:
1338         (KJS::Bindings::QtRuntimeObjectImp::QtRuntimeObjectImp):
1339         (KJS::Bindings::QtRuntimeObjectImp::~QtRuntimeObjectImp):
1340         (KJS::Bindings::QtRuntimeObjectImp::invalidate):
1341         (KJS::Bindings::QtRuntimeObjectImp::removeFromCache):
1342         (KJS::Bindings::QtInstance::getRuntimeObject):
1343         * bindings/runtime.cpp:
1344         (KJS::Bindings::Instance::createRuntimeObject):
1345         * bindings/runtime.h:
1346
1347 2008-01-23  Alp Toker  <alp@atoker.com>
1348
1349         Rubber-stamped by Mark Rowe.
1350
1351         Remove whitespace after -I in automake include lists.
1352
1353         * GNUmakefile.am:
1354
1355 2008-01-23  Michael Goddard <michael.goddard@trolltech.com>
1356
1357         Reviewed by Lars Knoll <lars@trolltech.com>.
1358
1359         Reworked the JavaScriptCore Qt bindings:
1360         
1361         * Add initial support for string and variant arrays, as well
1362         as sub QObjects in the JS bindings.
1363         
1364         * Don't expose fields marked as not scriptable by moc.
1365         
1366         * Add support for dynamic properties and accessing named
1367         QObject children of an object (like QtScript and older
1368         IE DOM style JS).
1369         * Add support for custom toString methods.
1370         
1371         * Fine tune some bindings to be closer to QtScript.
1372         Make void functions return undefined, and empty/
1373         null QStrings return a zero length string.
1374         
1375         * Create framework for allowing more direct method calls.
1376         Since RuntimeMethod doesn't allow us to add additional
1377         methods/properties to a function, add these classes.
1378         Start prototyping object.signal.connect(...).
1379         
1380         * Add signal support to the Qt bindings.
1381         Allow connecting to signals (object.signal.connect(slot)),
1382         disconnecting, and emitting signals.  Currently chooses
1383         the first signal that matches the name, so this will need
1384         improvement.
1385         
1386         * Add property names, and resolve signals closer to use.
1387         Enumerating properties now returns some of the Qt properties
1388         and signals.  Slots and methods aren't quite present.  Also,
1389         resolve signal connections etc. closer to the time of use, so
1390         we can do more dynamic resolution based on argument type etc.
1391         Still picks the first one with the same name, at the moment.
1392         
1393         * Make signature comparison code consistent.
1394         Use the same code for checking meta signatures in
1395         the method and fallback getters, and avoid a
1396         QByteArray construction when we can.
1397         
1398         * Fix minor memory leak, and handle pointers better.
1399         Delete the private object in the dtors, and use RefPtrs
1400         for holding Instances etc.
1401         
1402         * Handle method lookup better.
1403         Allow invocation time method lookup based on the arguments,
1404         which is closer to QtScript behaviour.  Also, cache the
1405         method lists and delete them in the QtClass dtor (stops
1406         a memory leak).
1407         
1408         * Improve JS to Qt data type conversions.
1409         Add some support for Date & RegExp JS objects,
1410         and provide some metrics on the quality of the
1411         conversion.
1412         
1413         * A couple of fixes for autotest failures.
1414         Better support for converting lists, read/write only
1415         QMetaProperty support, modified slot search order...)
1416
1417         * bindings/qt/qt_class.cpp:
1418         (KJS::Bindings::QtClass::QtClass):
1419         (KJS::Bindings::QtClass::~QtClass):
1420         (KJS::Bindings::QtClass::name):
1421         (KJS::Bindings::QtClass::fallbackObject):
1422         (KJS::Bindings::QtClass::methodsNamed):
1423         (KJS::Bindings::QtClass::fieldNamed):
1424         * bindings/qt/qt_class.h:
1425         * bindings/qt/qt_instance.cpp:
1426         (KJS::Bindings::QtInstance::QtInstance):
1427         (KJS::Bindings::QtInstance::~QtInstance):
1428         (KJS::Bindings::QtInstance::getRuntimeObject):
1429         (KJS::Bindings::QtInstance::getClass):
1430         (KJS::Bindings::QtInstance::implementsCall):
1431         (KJS::Bindings::QtInstance::getPropertyNames):
1432         (KJS::Bindings::QtInstance::invokeMethod):
1433         (KJS::Bindings::QtInstance::invokeDefaultMethod):
1434         (KJS::Bindings::QtInstance::stringValue):
1435         (KJS::Bindings::QtInstance::booleanValue):
1436         (KJS::Bindings::QtInstance::valueOf):
1437         (KJS::Bindings::QtField::name):
1438         (KJS::Bindings::QtField::valueFromInstance):
1439         (KJS::Bindings::QtField::setValueToInstance):
1440         * bindings/qt/qt_instance.h:
1441         (KJS::Bindings::QtInstance::getBindingLanguage):
1442         (KJS::Bindings::QtInstance::getObject):
1443         * bindings/qt/qt_runtime.cpp:
1444         (KJS::Bindings::QWKNoDebug::QWKNoDebug):
1445         (KJS::Bindings::QWKNoDebug::~QWKNoDebug):
1446         (KJS::Bindings::QWKNoDebug::operator<<):
1447         (KJS::Bindings::):
1448         (KJS::Bindings::valueRealType):
1449         (KJS::Bindings::convertValueToQVariant):
1450         (KJS::Bindings::convertQVariantToValue):
1451         (KJS::Bindings::QtRuntimeMethod::QtRuntimeMethod):
1452         (KJS::Bindings::QtRuntimeMethod::~QtRuntimeMethod):
1453         (KJS::Bindings::QtRuntimeMethod::codeType):
1454         (KJS::Bindings::QtRuntimeMethod::execute):
1455         (KJS::Bindings::QtRuntimeMethodData::~QtRuntimeMethodData):
1456         (KJS::Bindings::QtRuntimeMetaMethodData::~QtRuntimeMetaMethodData):
1457         (KJS::Bindings::QtRuntimeConnectionMethodData::~QtRuntimeConnectionMethodData):
1458         (KJS::Bindings::QtMethodMatchType::):
1459         (KJS::Bindings::QtMethodMatchType::QtMethodMatchType):
1460         (KJS::Bindings::QtMethodMatchType::kind):
1461         (KJS::Bindings::QtMethodMatchType::isValid):
1462         (KJS::Bindings::QtMethodMatchType::isVariant):
1463         (KJS::Bindings::QtMethodMatchType::isMetaType):
1464         (KJS::Bindings::QtMethodMatchType::isUnresolved):
1465         (KJS::Bindings::QtMethodMatchType::isMetaEnum):
1466         (KJS::Bindings::QtMethodMatchType::enumeratorIndex):
1467         (KJS::Bindings::QtMethodMatchType::variant):
1468         (KJS::Bindings::QtMethodMatchType::metaType):
1469         (KJS::Bindings::QtMethodMatchType::metaEnum):
1470         (KJS::Bindings::QtMethodMatchType::unresolved):
1471         (KJS::Bindings::QtMethodMatchType::typeId):
1472         (KJS::Bindings::QtMethodMatchType::name):
1473         (KJS::Bindings::QtMethodMatchData::QtMethodMatchData):
1474         (KJS::Bindings::QtMethodMatchData::isValid):
1475         (KJS::Bindings::QtMethodMatchData::firstUnresolvedIndex):
1476         (KJS::Bindings::indexOfMetaEnum):
1477         (KJS::Bindings::findMethodIndex):
1478         (KJS::Bindings::findSignalIndex):
1479         (KJS::Bindings::QtRuntimeMetaMethod::QtRuntimeMetaMethod):
1480         (KJS::Bindings::QtRuntimeMetaMethod::mark):
1481         (KJS::Bindings::QtRuntimeMetaMethod::callAsFunction):
1482         (KJS::Bindings::QtRuntimeMetaMethod::getOwnPropertySlot):
1483         (KJS::Bindings::QtRuntimeMetaMethod::lengthGetter):
1484         (KJS::Bindings::QtRuntimeMetaMethod::connectGetter):
1485         (KJS::Bindings::QtRuntimeMetaMethod::disconnectGetter):
1486         (KJS::Bindings::QtRuntimeConnectionMethod::QtRuntimeConnectionMethod):
1487         (KJS::Bindings::QtRuntimeConnectionMethod::callAsFunction):
1488         (KJS::Bindings::QtRuntimeConnectionMethod::getOwnPropertySlot):
1489         (KJS::Bindings::QtRuntimeConnectionMethod::lengthGetter):
1490         (KJS::Bindings::QtConnectionObject::QtConnectionObject):
1491         (KJS::Bindings::QtConnectionObject::~QtConnectionObject):
1492         (KJS::Bindings::QtConnectionObject::metaObject):
1493         (KJS::Bindings::QtConnectionObject::qt_metacast):
1494         (KJS::Bindings::QtConnectionObject::qt_metacall):
1495         (KJS::Bindings::QtConnectionObject::execute):
1496         (KJS::Bindings::QtConnectionObject::match):
1497         (KJS::Bindings::::QtArray):
1498         (KJS::Bindings::::~QtArray):
1499         (KJS::Bindings::::rootObject):
1500         (KJS::Bindings::::setValueAt):
1501         (KJS::Bindings::::valueAt):
1502         * bindings/qt/qt_runtime.h:
1503         (KJS::Bindings::QtField::):
1504         (KJS::Bindings::QtField::QtField):
1505         (KJS::Bindings::QtField::fieldType):
1506         (KJS::Bindings::QtMethod::QtMethod):
1507         (KJS::Bindings::QtMethod::name):
1508         (KJS::Bindings::QtMethod::numParameters):
1509         (KJS::Bindings::QtArray::getLength):
1510         (KJS::Bindings::QtRuntimeMethod::d_func):
1511         (KJS::Bindings::QtRuntimeMetaMethod::d_func):
1512         (KJS::Bindings::QtRuntimeConnectionMethod::d_func):
1513         (KJS::Bindings::):
1514         * bindings/runtime.cpp:
1515         (KJS::Bindings::Instance::createBindingForLanguageInstance):
1516         (KJS::Bindings::Instance::createRuntimeObject):
1517         (KJS::Bindings::Instance::reallyCreateRuntimeObject):
1518         * bindings/runtime.h:
1519
1520 2008-01-22  Anders Carlsson  <andersca@apple.com>
1521
1522         Reviewed by Darin and Adam.
1523
1524         <rdar://problem/5688975>
1525         div element on microsoft site has wrong left offset.
1526         
1527         Return true even if NPN_GetProperty returns null or undefined. This matches Firefox 
1528         (and is what the Silverlight plug-in expects).
1529         
1530         * bindings/NP_jsobject.cpp:
1531         (_NPN_GetProperty):
1532
1533 2008-01-21  Geoffrey Garen  <ggaren@apple.com>
1534
1535         Reviewed by Maciej Stachowiak.
1536         
1537         Fixed http://bugs.webkit.org/show_bug.cgi?id=16909
1538         REGRESSION: Amazon.com crash (ActivationImp)
1539         
1540         (and a bunch of other crashes)
1541         
1542         Plus, a .7% SunSpider speedup to boot.
1543         
1544         Replaced the buggy currentExec and savedExec mechanisms with an
1545         explicit ExecState stack.
1546
1547         * kjs/collector.cpp:
1548         (KJS::Collector::collect): Explicitly mark the ExecState stack.
1549
1550         (KJS::Collector::reportOutOfMemoryToAllExecStates): Slight change in
1551         behavior: We no longer throw an exception in any global ExecStates,
1552         since global ExecStates are more like pseudo-ExecStates, and aren't
1553         used for script execution. (It's unclear what would happen if you left
1554         an exception waiting around in a global ExecState, but it probably
1555         wouldn't be good.)
1556
1557 2008-01-21  Jan Michael Alonzo  <jmalonzo@unpluggable.com>
1558
1559         Reviewed by Alp Toker.
1560
1561         http://bugs.webkit.org/show_bug.cgi?id=16955
1562         Get errors when cross-compile webkit-gtk
1563
1564         * GNUmakefile.am: removed ICU_CFLAGS
1565
1566 2008-01-18  Kevin McCullough  <kmccullough@apple.com>
1567
1568         - Build fix.
1569
1570         * kjs/ustring.h:
1571
1572 2008-01-18  Kevin McCullough  <kmccullough@apple.com>
1573
1574         - Build fix.
1575
1576         * kjs/ustring.cpp:
1577         * kjs/ustring.h:
1578         (KJS::UString::cost):
1579
1580 2008-01-18  Kevin McCullough  <kmccullough@apple.com>
1581
1582         Reviewed by Geoff.
1583
1584         - Correctly report cost of appended strings to trigger GC.
1585
1586         * kjs/ustring.cpp:
1587         (KJS::):
1588         (KJS::UString::Rep::create):
1589         (KJS::UString::UString): Don't create unnecssary objects.
1590         (KJS::UString::cost): Report cost if necessary but also keep track of 
1591         reported cost.
1592         * kjs/ustring.h:
1593
1594 2008-01-18  Simon Hausmann  <hausmann@webkit.org>
1595
1596         Reviewed by Holger.
1597
1598         Fix return type conversions from Qt slots to JS values.
1599         
1600         This also fixes fast/dom/open-and-close-by-DOM.html, which called
1601         layoutTestController.windowCount().
1602         
1603         When constructing the QVariant that holds the return type we cannot
1604         use the QVarian(Type) constuctor as that will create a null variant.
1605         We have to use the QVariant(Type, void *) constructor instead, just
1606         like in QMetaObject::read() for example.
1607         
1608
1609         * bindings/qt/qt_instance.cpp:
1610         (KJS::Bindings::QtInstance::getRuntimeObject):
1611
1612 2008-01-18  Prasanth Ullattil  <prasanth.ullattil@trolltech.com>
1613
1614         Reviewed by Simon Hausmann <hausmann@webkit.org>.
1615
1616         Fix compilation on Win64(2): Implemented currentThreadStackBase on X86-64 on Windows
1617         
1618
1619         * kjs/collector.cpp:
1620         (KJS::Collector::heapAllocate):
1621
1622 2008-01-18  Prasanth Ullattil  <prasanth.ullattil@trolltech.com>
1623
1624         Reviewed by Simon Hausmann <hausmann@webkit.org>.
1625
1626         Fix compilation on Win64(1): Define WTF_PLATFORM_X86_64 correctly on Win64.
1627         
1628
1629         * wtf/Platform.h:
1630
1631 2008-01-17  Antti Koivisto  <antti@apple.com>
1632
1633         Fix Windows build.
1634
1635         * kjs/regexp_object.cpp:
1636         (KJS::regExpProtoFuncToString):
1637
1638 2008-01-16  Sam Weinig  <sam@webkit.org>
1639
1640         Reviewed by Darin.
1641
1642         Fix for http://bugs.webkit.org/show_bug.cgi?id=16901
1643         Convert remaining JS function objects to use the new PrototypeFunction class
1644
1645         - Moves Boolean, Function, RegExp, Number, Object and Global functions to their
1646           own static function implementations so that they can be used with the
1647           PrototypeFunction class.  SunSpider says this is 1.003x as fast.
1648
1649         * kjs/JSGlobalObject.cpp:
1650         (KJS::JSGlobalObject::reset):
1651         * kjs/array_object.h:
1652         * kjs/bool_object.cpp:
1653         (KJS::BooleanInstance::BooleanInstance):
1654         (KJS::BooleanPrototype::BooleanPrototype):
1655         (KJS::booleanProtoFuncToString):
1656         (KJS::booleanProtoFuncValueOf):
1657         (KJS::BooleanObjectImp::BooleanObjectImp):
1658         (KJS::BooleanObjectImp::implementsConstruct):
1659         (KJS::BooleanObjectImp::construct):
1660         (KJS::BooleanObjectImp::callAsFunction):
1661         * kjs/bool_object.h:
1662         (KJS::BooleanInstance::classInfo):
1663         * kjs/error_object.cpp:
1664         (KJS::ErrorPrototype::ErrorPrototype):
1665         (KJS::errorProtoFuncToString):
1666         * kjs/error_object.h:
1667         * kjs/function.cpp:
1668         (KJS::globalFuncEval):
1669         (KJS::globalFuncParseInt):
1670         (KJS::globalFuncParseFloat):
1671         (KJS::globalFuncIsNaN):
1672         (KJS::globalFuncIsFinite):
1673         (KJS::globalFuncDecodeURI):
1674         (KJS::globalFuncDecodeURIComponent):
1675         (KJS::globalFuncEncodeURI):
1676         (KJS::globalFuncEncodeURIComponent):
1677         (KJS::globalFuncEscape):
1678         (KJS::globalFuncUnEscape):
1679         (KJS::globalFuncKJSPrint):
1680         (KJS::PrototypeFunction::PrototypeFunction):
1681         * kjs/function.h:
1682         * kjs/function_object.cpp:
1683         (KJS::FunctionPrototype::FunctionPrototype):
1684         (KJS::functionProtoFuncToString):
1685         (KJS::functionProtoFuncApply):
1686         (KJS::functionProtoFuncCall):
1687         * kjs/function_object.h:
1688         * kjs/number_object.cpp:
1689         (KJS::NumberPrototype::NumberPrototype):
1690         (KJS::numberProtoFuncToString):
1691         (KJS::numberProtoFuncToLocaleString):
1692         (KJS::numberProtoFuncValueOf):
1693         (KJS::numberProtoFuncToFixed):
1694         (KJS::numberProtoFuncToExponential):
1695         (KJS::numberProtoFuncToPrecision):
1696         * kjs/number_object.h:
1697         (KJS::NumberInstance::classInfo):
1698         (KJS::NumberObjectImp::classInfo):
1699         (KJS::NumberObjectImp::):
1700         * kjs/object_object.cpp:
1701         (KJS::ObjectPrototype::ObjectPrototype):
1702         (KJS::objectProtoFuncValueOf):
1703         (KJS::objectProtoFuncHasOwnProperty):
1704         (KJS::objectProtoFuncIsPrototypeOf):
1705         (KJS::objectProtoFuncDefineGetter):
1706         (KJS::objectProtoFuncDefineSetter):
1707         (KJS::objectProtoFuncLookupGetter):
1708         (KJS::objectProtoFuncLookupSetter):
1709         (KJS::objectProtoFuncPropertyIsEnumerable):
1710         (KJS::objectProtoFuncToLocaleString):
1711         (KJS::objectProtoFuncToString):
1712         * kjs/object_object.h:
1713         * kjs/regexp_object.cpp:
1714         (KJS::RegExpPrototype::RegExpPrototype):
1715         (KJS::regExpProtoFuncTest):
1716         (KJS::regExpProtoFuncExec):
1717         (KJS::regExpProtoFuncCompile):
1718         (KJS::regExpProtoFuncToString):
1719         * kjs/regexp_object.h:
1720
1721 2008-01-16  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
1722
1723         Reviewed by Maciej & Darin.
1724
1725         Fixes Bug 16868: Gmail crash
1726           and Bug 16871: Crash when loading apple.com/startpage
1727
1728         <http://bugs.webkit.org/show_bug.cgi?id=16868>
1729         <rdar://problem/5686108>
1730
1731         <http://bugs.webkit.org/show_bug.cgi?id=16871>
1732         <rdar://problem/5686670>
1733
1734         Adds ActivationImp tear-off for cross-window eval() and fixes an
1735         existing garbage collection issue exposed by the ActivationImp tear-off
1736         patch (r29425) that can occur when an ExecState's m_callingExec is
1737         different than its m_savedExec.
1738
1739         * kjs/ExecState.cpp:
1740         (KJS::ExecState::mark):
1741         * kjs/function.cpp:
1742         (KJS::GlobalFuncImp::callAsFunction):
1743
1744 2008-01-16  Sam Weinig  <sam@webkit.org>
1745
1746         Reviewed by Oliver.
1747
1748         Clean up MathObjectImp, it needed a little scrubbing.
1749
1750         * kjs/math_object.cpp:
1751         (KJS::MathObjectImp::MathObjectImp):
1752         (KJS::MathObjectImp::getOwnPropertySlot):
1753         (KJS::MathObjectImp::getValueProperty):
1754         (KJS::mathProtoFuncACos):
1755         (KJS::mathProtoFuncASin):
1756         (KJS::mathProtoFuncATan):
1757         (KJS::mathProtoFuncATan2):
1758         (KJS::mathProtoFuncCos):
1759         (KJS::mathProtoFuncExp):
1760         (KJS::mathProtoFuncLog):
1761         (KJS::mathProtoFuncSin):
1762         (KJS::mathProtoFuncSqrt):
1763         (KJS::mathProtoFuncTan):
1764         * kjs/math_object.h:
1765         (KJS::MathObjectImp::classInfo):
1766         (KJS::MathObjectImp::):
1767
1768 2008-01-16  Sam Weinig  <sam@webkit.org>
1769
1770         Reviewed by Geoffrey Garen.
1771
1772         Rename Lexer variable bol to atLineStart.
1773
1774         * kjs/lexer.cpp:
1775         (KJS::Lexer::Lexer):
1776         (KJS::Lexer::setCode):
1777         (KJS::Lexer::nextLine):
1778         (KJS::Lexer::lex):
1779         * kjs/lexer.h:
1780
1781 2008-01-16  Sam Weinig  <sam@webkit.org>
1782
1783         Reviewed by Geoffrey Garen and Anders Carlsson.
1784
1785         Remove uses of KJS_PURE_ECMA as we don't ever build with it defined,
1786         and we have many features that are not included in the ECMA spec.
1787
1788         * kjs/lexer.cpp:
1789         (KJS::Lexer::Lexer):
1790         (KJS::Lexer::setCode):
1791         (KJS::Lexer::nextLine):
1792         (KJS::Lexer::lex):
1793         * kjs/lexer.h:
1794         * kjs/string_object.cpp:
1795         * kjs/string_object.h:
1796
1797 2008-01-15  Sam Weinig  <sam@webkit.org>
1798
1799         Reviewed by Geoffrey Garen.
1800
1801         Fix <rdar://problem/5595552> r27608 introduced a 20% increase in JS binary size, 4% increase in WebCore binary size
1802
1803         - This changes the way JS functions that use Lookup tables are handled.  Instead of using
1804           one class per function, which allowed specialization of the virtual callAsFunction
1805           method, we now use one class, PrototypeFunction, which takes a pointer to a static
1806           function to use as the implementation.  This significantly decreases the binary size
1807           of JavaScriptCore (about 145k on an Intel only build) while still keeping some of the
1808           speedup r27608 garnered (SunSpider says this is 1.005x as slow, which should leave some
1809           wiggle room from the original 1% speedup) and keeps the functions implementations in separate
1810           functions to help with optimizations.
1811
1812         * JavaScriptCore.exp:
1813         * JavaScriptCore.xcodeproj/project.pbxproj:
1814         * kjs/array_object.cpp:
1815         (KJS::arrayProtoFuncToString):
1816         (KJS::arrayProtoFuncToLocaleString):
1817         (KJS::arrayProtoFuncJoin):
1818         (KJS::arrayProtoFuncConcat):
1819         (KJS::arrayProtoFuncPop):
1820         (KJS::arrayProtoFuncPush):
1821         (KJS::arrayProtoFuncReverse):
1822         (KJS::arrayProtoFuncShift):
1823         (KJS::arrayProtoFuncSlice):
1824         (KJS::arrayProtoFuncSort):
1825         (KJS::arrayProtoFuncSplice):
1826         (KJS::arrayProtoFuncUnShift):
1827         (KJS::arrayProtoFuncFilter):
1828         (KJS::arrayProtoFuncMap):
1829         (KJS::arrayProtoFuncEvery):
1830         (KJS::arrayProtoFuncForEach):
1831         (KJS::arrayProtoFuncSome):
1832         (KJS::arrayProtoFuncIndexOf):
1833         (KJS::arrayProtoFuncLastIndexOf):
1834         * kjs/array_object.h:
1835         * kjs/date_object.cpp:
1836         (KJS::DatePrototype::getOwnPropertySlot):
1837         (KJS::dateProtoFuncToString):
1838         (KJS::dateProtoFuncToUTCString):
1839         (KJS::dateProtoFuncToDateString):
1840         (KJS::dateProtoFuncToTimeString):
1841         (KJS::dateProtoFuncToLocaleString):
1842         (KJS::dateProtoFuncToLocaleDateString):
1843         (KJS::dateProtoFuncToLocaleTimeString):
1844         (KJS::dateProtoFuncValueOf):
1845         (KJS::dateProtoFuncGetTime):
1846         (KJS::dateProtoFuncGetFullYear):
1847         (KJS::dateProtoFuncGetUTCFullYear):
1848         (KJS::dateProtoFuncToGMTString):
1849         (KJS::dateProtoFuncGetMonth):
1850         (KJS::dateProtoFuncGetUTCMonth):
1851         (KJS::dateProtoFuncGetDate):
1852         (KJS::dateProtoFuncGetUTCDate):
1853         (KJS::dateProtoFuncGetDay):
1854         (KJS::dateProtoFuncGetUTCDay):
1855         (KJS::dateProtoFuncGetHours):
1856         (KJS::dateProtoFuncGetUTCHours):
1857         (KJS::dateProtoFuncGetMinutes):
1858         (KJS::dateProtoFuncGetUTCMinutes):
1859         (KJS::dateProtoFuncGetSeconds):
1860         (KJS::dateProtoFuncGetUTCSeconds):
1861         (KJS::dateProtoFuncGetMilliSeconds):
1862         (KJS::dateProtoFuncGetUTCMilliseconds):
1863         (KJS::dateProtoFuncGetTimezoneOffset):
1864         (KJS::dateProtoFuncSetTime):
1865         (KJS::dateProtoFuncSetMilliSeconds):
1866         (KJS::dateProtoFuncSetUTCMilliseconds):
1867         (KJS::dateProtoFuncSetSeconds):
1868         (KJS::dateProtoFuncSetUTCSeconds):
1869         (KJS::dateProtoFuncSetMinutes):
1870         (KJS::dateProtoFuncSetUTCMinutes):
1871         (KJS::dateProtoFuncSetHours):
1872         (KJS::dateProtoFuncSetUTCHours):
1873         (KJS::dateProtoFuncSetDate):
1874         (KJS::dateProtoFuncSetUTCDate):
1875         (KJS::dateProtoFuncSetMonth):
1876         (KJS::dateProtoFuncSetUTCMonth):
1877         (KJS::dateProtoFuncSetFullYear):
1878         (KJS::dateProtoFuncSetUTCFullYear):
1879         (KJS::dateProtoFuncSetYear):
1880         (KJS::dateProtoFuncGetYear):
1881         * kjs/date_object.h:
1882         * kjs/function.cpp:
1883         (KJS::PrototypeFunction::PrototypeFunction):
1884         (KJS::PrototypeFunction::callAsFunction):
1885         * kjs/function.h:
1886         * kjs/lookup.h:
1887         (KJS::HashEntry::):
1888         (KJS::staticFunctionGetter):
1889         * kjs/math_object.cpp:
1890         (KJS::mathProtoFuncAbs):
1891         (KJS::mathProtoFuncACos):
1892         (KJS::mathProtoFuncASin):
1893         (KJS::mathProtoFuncATan):
1894         (KJS::mathProtoFuncATan2):
1895         (KJS::mathProtoFuncCeil):
1896         (KJS::mathProtoFuncCos):
1897         (KJS::mathProtoFuncExp):
1898         (KJS::mathProtoFuncFloor):
1899         (KJS::mathProtoFuncLog):
1900         (KJS::mathProtoFuncMax):
1901         (KJS::mathProtoFuncMin):
1902         (KJS::mathProtoFuncPow):
1903         (KJS::mathProtoFuncRandom):
1904         (KJS::mathProtoFuncRound):
1905         (KJS::mathProtoFuncSin):
1906         (KJS::mathProtoFuncSqrt):
1907         (KJS::mathProtoFuncTan):
1908         * kjs/math_object.h:
1909         * kjs/string_object.cpp:
1910         (KJS::stringProtoFuncToString):
1911         (KJS::stringProtoFuncValueOf):
1912         (KJS::stringProtoFuncCharAt):
1913         (KJS::stringProtoFuncCharCodeAt):
1914         (KJS::stringProtoFuncConcat):
1915         (KJS::stringProtoFuncIndexOf):
1916         (KJS::stringProtoFuncLastIndexOf):
1917         (KJS::stringProtoFuncMatch):
1918         (KJS::stringProtoFuncSearch):
1919         (KJS::stringProtoFuncReplace):
1920         (KJS::stringProtoFuncSlice):
1921         (KJS::stringProtoFuncSplit):
1922         (KJS::stringProtoFuncSubstr):
1923         (KJS::stringProtoFuncSubstring):
1924         (KJS::stringProtoFuncToLowerCase):
1925         (KJS::stringProtoFuncToUpperCase):
1926         (KJS::stringProtoFuncToLocaleLowerCase):
1927         (KJS::stringProtoFuncToLocaleUpperCase):
1928         (KJS::stringProtoFuncLocaleCompare):
1929         (KJS::stringProtoFuncBig):
1930         (KJS::stringProtoFuncSmall):
1931         (KJS::stringProtoFuncBlink):
1932         (KJS::stringProtoFuncBold):
1933         (KJS::stringProtoFuncFixed):
1934         (KJS::stringProtoFuncItalics):
1935         (KJS::stringProtoFuncStrike):
1936         (KJS::stringProtoFuncSub):
1937         (KJS::stringProtoFuncSup):
1938         (KJS::stringProtoFuncFontcolor):
1939         (KJS::stringProtoFuncFontsize):
1940         (KJS::stringProtoFuncAnchor):
1941         (KJS::stringProtoFuncLink):
1942         * kjs/string_object.h:
1943
1944 2008-01-15  Geoffrey Garen  <ggaren@apple.com>
1945
1946         Reviewed by Adam Roben.
1947         
1948         Some tweaks to our headerdoc, suggested by David Gatwood on the docs
1949         team.
1950
1951         * API/JSBase.h:
1952         * API/JSObjectRef.h:
1953         * API/JSStringRef.h:
1954         * API/JSValueRef.h:
1955
1956 2008-01-15  Alp Toker  <alp@atoker.com>
1957
1958         Rubber-stamped by Anders.
1959
1960         Make the HTTP backend configurable in the GTK+ port. curl is currently
1961         the only option.
1962
1963         * wtf/Platform.h: Don't hard-code WTF_USE_CURL for GTK
1964
1965 2008-01-15  Sam Weinig  <sam@webkit.org>
1966
1967         Reviewed by Beth Dakin.
1968
1969         Remove unneeded variable.
1970
1971         * kjs/string_object.cpp:
1972         (KJS::StringProtoFuncSubstr::callAsFunction):
1973
1974 2008-01-14  Steve Falkenburg  <sfalken@apple.com>
1975
1976         Use shared vsprops for most vcproj properties.
1977         
1978         Reviewed by Darin.
1979
1980         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Add missing Debug_Internal config.
1981         * JavaScriptCore.vcproj/WTF/WTF.vcproj: Add missing Debug_Internal config.
1982         * JavaScriptCore.vcproj/testkjs/testkjs.vcproj:
1983
1984 2008-01-14  Adam Roben  <aroben@apple.com>
1985
1986         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Added
1987         some headers that were missing from the vcproj so their contents will
1988         be included in Find in Files.
1989
1990 2008-01-14  Adam Roben  <aroben@apple.com>
1991
1992         Fix Bug 16871: Crash when loading apple.com/startpage
1993
1994         <http://bugs.webkit.org/show_bug.cgi?id=16871>
1995         <rdar://problem/5686670>
1996
1997         Patch written by Darin, reviewed by me.
1998
1999         * kjs/ExecState.cpp:
2000         (KJS::ExecState::mark): Call ActivationImp::markChildren if our
2001         m_activation is on the stack. This is what ScopeChain::mark also does,
2002         but apparently in some cases it's possible for an ExecState's
2003         ActivationImp to not be in any ScopeChain.
2004
2005 2008-01-14  Kevin McCullough  <kmccullough@apple.com>
2006
2007         Reviewed by Oliver.
2008
2009         -<rdar://problem/5622667> REGRESSION (Leopard-ToT): Endless loading loop
2010         trying to view techreport.com comments
2011         - We need to set values in the map, because if they are already in the
2012         map they will not be reset when we use add().
2013
2014         * kjs/array_instance.cpp:
2015         (KJS::ArrayInstance::put):
2016
2017 2008-01-14  Darin Adler  <darin@apple.com>
2018
2019         Reviewed by Adam.
2020
2021         - re-speed-up the page load test (my StringImpl change slowed it down)
2022
2023         * wtf/RefCounted.h:
2024         (WTF::RefCounted::RefCounted): Allow derived classes to start with a reference
2025         count other than 0. Eventually everyone will want to start with a 1. This is a
2026         staged change. For now, there's a default of 0, and you can specify 1. Later,
2027         there will be no default and everyone will have to specify. And then later, there
2028         will be a default of 1. Eventually, we can take away even the option of starting
2029         with 0!
2030
2031         * wtf/Vector.h:
2032         (WTF::Vector::Vector): Sped up creation of non-empty vectors by removing the
2033         overhead of first constructing something empty and then calling resize.
2034         (WTF::Vector::clear): Sped up the common case of calling clear on an empty
2035         vector by adding a check for that case.
2036         (WTF::Vector::releaseBuffer): Marked this function inline and removed a branch
2037         in the case of vectors with no inline capacity (normal vectors) by leaving out
2038         the code to copy the inline buffer in that case.
2039
2040 2008-01-14  Alexey Proskuryakov  <ap@webkit.org>
2041
2042         Reviewed by David Kilzer.
2043
2044         http://bugs.webkit.org/show_bug.cgi?id=16787
2045         array.splice() with 1 element not working
2046
2047         Test: fast/js/array-splice.html
2048
2049         * kjs/array_object.cpp:
2050         (KJS::ArrayProtoFuncSplice::callAsFunction): Implement this Mozilla extension, and fix
2051         some other edge cases.
2052
2053 2008-01-13  Steve Falkenburg  <sfalken@apple.com>
2054
2055         Share common files across projects.
2056         
2057         Unify vsprops files
2058         Debug:          common.vsprops, debug.vsprops
2059         Debug_Internal: common.vsprops, debug.vsprops, debug_internal.vsprops
2060         Release:        common.vsprops, release.vsprops
2061         
2062         Shared properties can go into common.vsprops, shared debug settings can go into debug.vsprops.
2063         debug_internal.vsprops will be mostly empty except for file path prefix modifiers.
2064
2065         Reviewed by Adam Roben.
2066
2067         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
2068         * JavaScriptCore.vcproj/WTF/WTF.vcproj:
2069         * JavaScriptCore.vcproj/debug.vsprops: Removed.
2070         * JavaScriptCore.vcproj/debug_internal.vsprops: Removed.
2071         * JavaScriptCore.vcproj/release.vsprops: Removed.
2072         * JavaScriptCore.vcproj/testkjs/testkjs.vcproj:
2073
2074 2008-01-13  Marius Bugge Monsen  <mbm@trolltech.com>
2075
2076         Contributions and review by Adriaan de Groot,
2077         Simon Hausmann, Eric Seidel, and Darin Adler.
2078
2079         - http://bugs.webkit.org/show_bug.cgi?id=16590
2080           Compilation fixes for Solaris.
2081
2082         * kjs/DateMath.h:
2083         (KJS::GregorianDateTime::GregorianDateTime): Use the WIN_OS code path
2084         for SOLARIS too, presumably because Solaris also lacks the tm_gtoff and tm_zone
2085         fields.
2086         (KJS::GregorianDateTime::operator tm): Ditto.
2087
2088         * kjs/collector.cpp:
2089         (KJS::currentThreadStackBase): Use thr_stksegment on Solaris.
2090
2091         * wtf/MathExtras.h:
2092         (isfinite): Implement for Solaris.
2093         (isinf): Ditto.
2094         (signbit): Ditto. But this one is wrong, so I added a FIXME.
2095
2096         * wtf/Platform.h: Define PLATFORM(SOLARIS) when "sun" or "__sun" is defined.
2097
2098 2008-01-13  Michael Goddard  <michael.goddard@trolltech.com>
2099
2100         Reviewed by Anders Carlsson.
2101
2102         Add binding language type to Instance.
2103         Allows runtime determination of the type of an
2104         Instance, to allow safe casting.  Doesn't actually
2105         add any safe casting yet, though.
2106
2107         Add a helper function to get an Instance from a JSObject*.
2108         Given an object and the expected binding language, see if
2109         the JSObject actually wraps an Instance of the given type
2110         and return it.  Otherwise return 0.
2111
2112         Move RuntimeObjectImp creations into Instance.
2113         Make the ctor protected, and Instance a friend class, so
2114         that all creation of RuntimeObjectImps goes through
2115         one place.
2116
2117         Remove copy ctor/assignment operator for QtInstance.
2118         Instance itself is Noncopyable, so QtInstance doesn't
2119         need to have these.
2120
2121         Add caching for QtInstance and associated RuntimeObjectImps.
2122         Push any dealings with QtLanguage bindings into QtInstance,
2123         and cache them there, rather than in the Instance layer.  Add
2124         a QtRuntimeObjectImp to help with caching.
2125
2126         * JavaScriptCore.exp:
2127         * bindings/c/c_instance.h:
2128         * bindings/jni/jni_instance.h:
2129         * bindings/objc/objc_instance.h:
2130         * bindings/qt/qt_instance.cpp:
2131         (KJS::Bindings::QtRuntimeObjectImp::QtRuntimeObjectImp):
2132         (KJS::Bindings::QtRuntimeObjectImp::~QtRuntimeObjectImp):
2133         (KJS::Bindings::QtRuntimeObjectImp::invalidate):
2134         (KJS::Bindings::QtRuntimeObjectImp::removeFromCache):
2135         (KJS::Bindings::QtInstance::QtInstance):
2136         (KJS::Bindings::QtInstance::~QtInstance):
2137         (KJS::Bindings::QtInstance::getQtInstance):
2138         (KJS::Bindings::QtInstance::getRuntimeObject):
2139         * bindings/qt/qt_instance.h:
2140         (KJS::Bindings::QtInstance::getBindingLanguage):
2141         * bindings/runtime.cpp:
2142         (KJS::Bindings::Instance::createBindingForLanguageInstance):
2143         (KJS::Bindings::Instance::createRuntimeObject):
2144         (KJS::Bindings::Instance::getInstance):
2145         * bindings/runtime.h:
2146         * bindings/runtime_object.h:
2147         (KJS::RuntimeObjectImp::getInternalInstance):
2148
2149 2008-01-12  Alp Toker  <alp@atoker.com>
2150
2151         Reviewed by Mark Rowe.
2152
2153         Hide non-public symbols in GTK+/autotools release builds.
2154
2155         * GNUmakefile.am:
2156
2157 2008-01-12  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
2158
2159         Reviewed by Mark Rowe.
2160
2161         Fix http://bugs.webkit.org/show_bug.cgi?id=16852
2162         Fixes leaking of ActivationStackNode objects.
2163
2164         * kjs/JSGlobalObject.cpp:
2165         (KJS::JSGlobalObject::deleteActivationStack):
2166         (KJS::JSGlobalObject::~JSGlobalObject):
2167         (KJS::JSGlobalObject::init):
2168         (KJS::JSGlobalObject::reset):
2169         * kjs/JSGlobalObject.h:
2170
2171 2008-01-12  Darin Adler  <darin@apple.com>
2172
2173         - try to fix Qt Windows build
2174
2175         * pcre/dftables: Remove reliance on the list form of Perl pipes.
2176
2177 2008-01-12  Darin Adler  <darin@apple.com>
2178
2179         - try to fix Qt build
2180
2181         * kjs/function.cpp: Added include of scope_chain_mark.h.
2182         * kjs/scope_chain_mark.h: Added multiple-include guards.
2183
2184 2008-01-12  Mark Rowe  <mrowe@apple.com>
2185
2186         Another Windows build fix.
2187
2188         * kjs/Activation.h:
2189
2190 2008-01-12  Mark Rowe  <mrowe@apple.com>
2191
2192         Attempted Windows build fix.  Use struct consistently when forward-declaring
2193         ActivationStackNode and StackActivation.
2194
2195         * kjs/Activation.h:
2196         * kjs/JSGlobalObject.h:
2197
2198 2008-01-12  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
2199
2200         Reviewed by Maciej.
2201
2202         Fixes a problem with the ActivationImp tear-off patch (r29425) where
2203         some of the calls to JSGlobalObject::tearOffActivation() were using
2204         the wrong test to determine whether it should leave a relic behind.
2205
2206         * kjs/function.cpp:
2207         (KJS::FunctionImp::argumentsGetter):
2208         (KJS::ActivationImp::getOwnPropertySlot):
2209
2210 2008-01-11  Geoffrey Garen  <ggaren@apple.com>
2211
2212         Reviewed by Oliver Hunt.
2213         
2214         Fixed <rdar://problem/5665251> REGRESSION (r28880-r28886): Global
2215         variable access (16644)
2216         
2217         This bug was caused by var declarations shadowing built-in properties of
2218         the global object.
2219         
2220         To match Firefox, we've decided that var declarations will never shadow
2221         built-in properties of the global object or its prototypes. We used to
2222         behave more like IE, which allows shadowing, but walking that line got
2223         us into trouble with websites that sent us down the Firefox codepath.
2224
2225         * kjs/JSVariableObject.h:
2226         (KJS::JSVariableObject::symbolTableGet): New code to support calling
2227         hasProperty before the variable object is fully initialized (so you
2228         can call it during initialization).
2229
2230         * kjs/nodes.cpp:.
2231         (KJS::ProgramNode::initializeSymbolTable): Always do a full hasProperty
2232         check when looking for duplicates, not getDirect, since it only checks
2233         the property map, and not hasOwnProperty, since it doesn't check
2234         prototypes.
2235         (KJS::EvalNode::processDeclarations): ditto
2236
2237         * kjs/property_slot.h:
2238         (KJS::PropertySlot::ungettableGetter): Best function name evar.
2239
2240 2008-01-11  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
2241
2242         Reviewed by Maciej.
2243
2244         Optimized ActivationImp allocation, so that activation records are now
2245         first allocated on an explicitly managed stack and only heap allocated
2246         when necessary. Roughly a 5% improvement on SunSpider, and a larger
2247         improvement on benchmarks that use more function calls.
2248
2249         * JavaScriptCore.xcodeproj/project.pbxproj:
2250         * kjs/Activation.h: Added.
2251         (KJS::ActivationImp::ActivationData::ActivationData):
2252         (KJS::ActivationImp::ActivationImp):
2253         (KJS::ActivationImp::classInfo):
2254         (KJS::ActivationImp::isActivationObject):
2255         (KJS::ActivationImp::isOnStack):
2256         (KJS::ActivationImp::d):
2257         (KJS::StackActivation::StackActivation):
2258         * kjs/ExecState.cpp:
2259         (KJS::ExecState::ExecState):
2260         (KJS::ExecState::~ExecState):
2261         * kjs/ExecState.h:
2262         (KJS::ExecState::replaceScopeChainTop):
2263         (KJS::ExecState::setActivationObject):
2264         (KJS::ExecState::setLocalStorage):
2265         * kjs/JSGlobalObject.cpp:
2266         (KJS::JSGlobalObject::reset):
2267         (KJS::JSGlobalObject::pushActivation):
2268         (KJS::JSGlobalObject::checkActivationCount):
2269         (KJS::JSGlobalObject::popActivationHelper):
2270         (KJS::JSGlobalObject::popActivation):
2271         (KJS::JSGlobalObject::tearOffActivation):
2272         * kjs/JSGlobalObject.h:
2273         * kjs/JSVariableObject.h:
2274         (KJS::JSVariableObject::JSVariableObjectData::JSVariableObjectData):
2275         (KJS::JSVariableObject::JSVariableObject):
2276         * kjs/function.cpp:
2277         (KJS::FunctionImp::argumentsGetter):
2278         (KJS::ActivationImp::ActivationImp):
2279         (KJS::ActivationImp::~ActivationImp):
2280         (KJS::ActivationImp::init):
2281         (KJS::ActivationImp::getOwnPropertySlot):
2282         (KJS::ActivationImp::markHelper):
2283         (KJS::ActivationImp::mark):
2284         (KJS::ActivationImp::ActivationData::ActivationData):
2285         (KJS::GlobalFuncImp::callAsFunction):
2286         * kjs/function.h:
2287         * kjs/nodes.cpp:
2288         (KJS::PostIncResolveNode::evaluate):
2289         (KJS::PostDecResolveNode::evaluate):
2290         (KJS::PreIncResolveNode::evaluate):
2291         (KJS::PreDecResolveNode::evaluate):
2292         (KJS::ReadModifyResolveNode::evaluate):
2293         (KJS::AssignResolveNode::evaluate):
2294         (KJS::WithNode::execute):
2295         (KJS::TryNode::execute):
2296         (KJS::FunctionBodyNode::processDeclarations):
2297         (KJS::FuncExprNode::evaluate):
2298         * kjs/object.h:
2299         * kjs/scope_chain.h:
2300         (KJS::ScopeChain::replace):
2301         * kjs/scope_chain_mark.h: Added.
2302         (KJS::ScopeChain::mark):
2303
2304 2008-01-11  Simon Hausmann  <hausmann@webkit.org>
2305
2306         Reviewed by Mark Rowe.
2307
2308         Fix the (clean) qmake build. For generating chartables.c we don't
2309         depend on a separate input source file anymore, the dftables perl
2310         script is enough. So use that instead as value for the .input
2311         variable, to ensure that qmake also generates a rule to call dftables.
2312
2313         * pcre/pcre.pri:
2314
2315 2008-01-10  Geoffrey Garen  <ggaren@apple.com>
2316
2317         Reviewed by John Sullivan.
2318
2319         Fixed some world leak reports:
2320         * <rdar://problem/5669436> PLT complains about world leak of 1 JavaScript
2321         Interpreter after running cvs-base suite
2322
2323         * <rdar://problem/5669423> PLT complains about world leak if browser
2324         window is open when PLT starts
2325         
2326         * kjs/collector.h: Added the ability to distinguish between global
2327         objects and GC-protected global objects, since we only consider the
2328         latter to be world leaks.
2329         * kjs/collector.cpp:
2330
2331 2008-01-11  Mark Rowe  <mrowe@apple.com>
2332
2333         Silence qmake warning about ctgen lacking input.
2334
2335         Rubber-stamped by Alp Toker.
2336
2337         * pcre/pcre.pri:
2338
2339 2008-01-10  David Kilzer  <ddkilzer@apple.com>
2340
2341         dftables should be rewritten as a script
2342
2343         <http://bugs.webkit.org/show_bug.cgi?id=16818>
2344         <rdar://problem/5681463>
2345
2346         Reviewed by Darin.
2347
2348         Rewrote the dftables utility in Perl.  Attempted to switch all
2349         build systems to call the script directly instead of building
2350         a binary first.  Only the Xcode build was able to be tested.
2351
2352         * DerivedSources.make: Added pcre directory to VPATH and changed
2353         to invoke dftables directly.
2354         * GNUmakefile.am: Removed build information and changed to invoke
2355         dftables directly.
2356         * JavaScriptCore.vcproj/JavaScriptCore.sln: Removed reference to
2357         dftables project.
2358         * JavaScriptCore.vcproj/JavaScriptCoreSubmit.sln: Ditto.
2359         * JavaScriptCore.vcproj/dftables: Removed.
2360         * JavaScriptCore.vcproj/dftables/dftables.vcproj: Removed.
2361         * JavaScriptCore.xcodeproj/project.pbxproj: Removed dftables target.
2362         * jscore.bkl: Removed dftables executable definition.
2363         * pcre/dftables: Copied from JavaScriptCore/pcre/dftables.cpp.
2364         * pcre/dftables.cpp: Removed.
2365         * pcre/dftables.pro: Removed.
2366         * pcre/pcre.pri: Removed references to dftables.cpp and changed to
2367         invoke dftables directly.
2368
2369 2008-01-10  Dan Bernstein  <mitz@apple.com>
2370
2371         Reviewed by Darin Adler.
2372
2373         - fix http://bugs.webkit.org/show_bug.cgi?id=16782
2374           <rdar://problem/5675331> REGRESSION(r29266): Reproducible crash in fast/replaced/image-map.html
2375
2376         The crash resulted from a native object (DumpRenderTree's
2377         EventSender) causing its wrapper to be invalidated (by clicking a
2378         link that replaced the document in the window) and consequently
2379         deallocated. The fix is to use RefPtrs to protect the native object
2380         from deletion by self-invalidation.
2381
2382         * bindings/runtime_method.cpp:
2383         (RuntimeMethod::callAsFunction):
2384         * bindings/runtime_object.cpp:
2385         (RuntimeObjectImp::fallbackObjectGetter):
2386         (RuntimeObjectImp::fieldGetter):
2387         (RuntimeObjectImp::methodGetter):
2388         (RuntimeObjectImp::put):
2389         (RuntimeObjectImp::defaultValue):
2390         (RuntimeObjectImp::callAsFunction):
2391
2392 2008-01-07  Mark Rowe  <mrowe@apple.com>
2393
2394         Reviewed by Maciej Stachowiak.
2395
2396         Turn testIsInteger assertions into compile-time asserts and move them into HashTraits.h
2397         where possible.
2398
2399         * kjs/testkjs.cpp:
2400         * wtf/HashTraits.h:
2401
2402 2008-01-07  Nikolas Zimmermann  <zimmermann@kde.org>
2403
2404         Reviewed by Mark.
2405
2406         Enable SVG_FONTS by default.
2407
2408         * Configurations/JavaScriptCore.xcconfig:
2409
2410 2008-01-07  Darin Adler  <darin@apple.com>
2411
2412         Rubber stamped by David Kilzer.
2413
2414         - get rid of empty fpconst.cpp
2415
2416         * GNUmakefile.am: Remove fpconst.cpp.
2417         * JavaScriptCore.pri: Ditto.
2418         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Ditto.
2419         * JavaScriptCore.xcodeproj/project.pbxproj: Ditto.
2420         * JavaScriptCoreSources.bkl: Ditto.
2421
2422         * kjs/fpconst.cpp: Removed.
2423
2424 2008-01-07  Darin Adler  <darin@apple.com>
2425
2426         Reviewed by David Kilzer.
2427
2428         - fix alignment problem with NaN and Inf globals
2429
2430         * kjs/fpconst.cpp: Move the contents of this file from here back to
2431         value.cpp. The reason this was in a separate file is that the DARWIN
2432         version of this used a declaration of the globals with a different
2433         type to avoid creating "init routines". That's no longer necessary for
2434         DARWIN and was never necessary for the non-DARWIN code path.
2435         To make this patch easy to merge, I didn't actually delete this file
2436         yet. We'll do that in a separate changeset.
2437
2438         * kjs/value.cpp: If C99's NAN and INFINITY are present, then use them,
2439         othrewise use the union trick from fpconst.cpp. I think it would be
2440         better to eliminate KJS::NaN and KJS::Inf and just use NAN and INFINITY
2441         directly or std::numeric_limits<double>::quiet_nan() and
2442         std::numeric_limits<double>::infinity(). But when I tried that, it
2443         slowed down SunSpider. Someone else could do that cleanup if they
2444         could do it without slowing down the engine.
2445
2446 2008-01-07  Adam Roben  <aroben@apple.com>
2447
2448         Windows build fix
2449
2450         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Added
2451         JavaScript.h to the project.
2452         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.make:
2453         Copy JavaScript.h to WEBKITOUTPUTDIR.
2454
2455 2008-01-07  Timothy Hatcher  <timothy@apple.com>
2456
2457         Reviewed by Darin.
2458
2459         Fix Mac build.
2460
2461         * API/JSNode.c:
2462         * API/JSNode.h:
2463         * API/JSNodeList.c:
2464         * API/JSNodeList.h:
2465         * API/JavaScript.h:
2466         * API/JavaScriptCore.h:
2467         * API/minidom.c:
2468         * JavaScriptCore.xcodeproj/project.pbxproj:
2469
2470 2008-01-07  Alp Toker  <alp@atoker.com>
2471
2472         Reviewed by Darin.
2473
2474         http://bugs.webkit.org/show_bug.cgi?id=16029
2475         JavaScriptCore.h is not suitable for platforms other than Mac OS X
2476
2477         Introduce a new JavaScriptCore/JavaScript.h public API header. This
2478         should be used by all new portable code using the JavaScriptCore API.
2479
2480         JavaScriptCore/JavaScriptCore.h will remain for compatibility with
2481         existing applications that depend on it including JSStringRefCF.h
2482         which isn't portable.
2483
2484         Also add minidom to the GTK+/autotools build since we can now support
2485         it on all platforms.
2486
2487         * API/JSNode.h:
2488         * API/JSNodeList.h:
2489         * API/JavaScript.h: Added.
2490         * API/JavaScriptCore.h:
2491         * ForwardingHeaders/JavaScriptCore/JavaScript.h: Added.
2492         * GNUmakefile.am:
2493         * JavaScriptCore.xcodeproj/project.pbxproj:
2494
2495 2008-01-06  Eric Seidel  <eric@webkit.org>
2496
2497         Reviewed by Sam.
2498
2499         Abstract all DateObject.set* functions in preparation for fixing:
2500         http://bugs.webkit.org/show_bug.cgi?id=16753
2501         
2502         SunSpider had random changes here and there but was overall a wash.
2503
2504         * kjs/date_object.cpp:
2505         (KJS::fillStructuresUsingTimeArgs):
2506         (KJS::setNewValueFromTimeArgs):
2507         (KJS::setNewValueFromDateArgs):
2508         (KJS::DateProtoFuncSetMilliSeconds::callAsFunction):
2509         (KJS::DateProtoFuncSetUTCMilliseconds::callAsFunction):
2510         (KJS::DateProtoFuncSetSeconds::callAsFunction):
2511         (KJS::DateProtoFuncSetUTCSeconds::callAsFunction):
2512         (KJS::DateProtoFuncSetMinutes::callAsFunction):
2513         (KJS::DateProtoFuncSetUTCMinutes::callAsFunction):
2514         (KJS::DateProtoFuncSetHours::callAsFunction):
2515         (KJS::DateProtoFuncSetUTCHours::callAsFunction):
2516         (KJS::DateProtoFuncSetDate::callAsFunction):
2517         (KJS::DateProtoFuncSetUTCDate::callAsFunction):
2518         (KJS::DateProtoFuncSetMonth::callAsFunction):
2519         (KJS::DateProtoFuncSetUTCMonth::callAsFunction):
2520         (KJS::DateProtoFuncSetFullYear::callAsFunction):
2521         (KJS::DateProtoFuncSetUTCFullYear::callAsFunction):
2522
2523 2008-01-06  Nikolas Zimmermann  <zimmermann@kde.org>
2524
2525         Reviewed by Dan.
2526
2527         Add new helper function isArabicChar - SVG Fonts support needs it.
2528
2529         * wtf/unicode/icu/UnicodeIcu.h:
2530         (WTF::Unicode::isArabicChar):
2531         * wtf/unicode/qt4/UnicodeQt4.h:
2532         (WTF::Unicode::isArabicChar):
2533
2534 2008-01-06  Alp Toker  <alp@atoker.com>
2535
2536         Reviewed by Mark Rowe.
2537
2538         Use $(EXEEXT) to account for the .exe extension in the GTK+ Windows
2539         build. (This is already done correctly in DerivedSources.make.) Issue
2540         noticed by Mikkel when building in Cygwin.
2541
2542         Add a missing slash. This was a hack from the qmake build system that
2543         isn't necessary with autotools.
2544
2545         * GNUmakefile.am:
2546
2547 2008-01-05  Darin Adler  <darin@apple.com>
2548
2549         * API/JSRetainPtr.h: One more file that needed the change below.
2550
2551 2008-01-05  Darin Adler  <darin@apple.com>
2552
2553         * wtf/OwnPtr.h: OwnPtr needs the same fix as RefPtr below.
2554
2555 2008-01-05  Adam Roben  <aroben@apple.com>
2556
2557         Build fix.
2558
2559         Reviewed by Maciej.
2560
2561         * wtf/RetainPtr.h: Use PtrType instead of T* because of the
2562         RemovePointer magic.
2563
2564 2008-01-05  Darin Adler  <darin@apple.com>
2565
2566         Rubber stamped by Maciej Stachowiak.
2567
2568         - cut down own PIC branches by using a pointer-to-member-data instead of a
2569           pointer-to-member-function in WTF smart pointers
2570
2571         * wtf/OwnArrayPtr.h:
2572         * wtf/OwnPtr.h:
2573         * wtf/PassRefPtr.h:
2574         * wtf/RefPtr.h:
2575         * wtf/RetainPtr.h:
2576         Use a pointer to the m_ptr member instead of the get member.
2577         The GCC compiler generates better code for this idiom.
2578
2579 2008-01-05  Henry Mason  <hmason@mac.com>
2580
2581         Reviewed by Maciej Stachowiak.
2582
2583         http://bugs.webkit.org/show_bug.cgi?id=16738
2584         Bug 16738: Collector block offset could be stored as an cell offset instead of a byte offset
2585
2586         Gives a 0.4% SunSpider boost and prettier code.
2587
2588         * kjs/collector.cpp: Switched to cell offsets from byte offsets
2589         (KJS::Collector::heapAllocate):
2590         (KJS::Collector::sweep):
2591
2592 2008-01-04  Mark Rowe  <mrowe@apple.com>
2593
2594         Reviewed by Maciej Stachowiak.
2595
2596         Have the two malloc zones print useful diagnostics if their free method are unexpectedly invoked.
2597         Due to <rdar://problem/5671357> this can happen if an application attempts to free a pointer that
2598         was not allocated by any registered malloc zone on the system.
2599
2600         * kjs/CollectorHeapIntrospector.h:
2601         * wtf/FastMalloc.cpp:
2602
2603 2008-01-04  Alp Toker  <alp@atoker.com>
2604
2605         GTK+ autotools build fix. Terminate empty rules.
2606
2607         * GNUmakefile.am:
2608
2609 2008-01-03  Simon Hausmann  <hausmann@webkit.org>
2610
2611         Reviewed by Mark Rowe.
2612
2613         Fix compilation with gcc 4.3: limits.h is needed for INT_MAX.
2614
2615         * pcre/pcre_exec.cpp:
2616
2617 2008-01-03  Darin Adler  <darin@apple.com>
2618
2619         * tests/mozilla/expected.html: The fix for bug 16696 also fixed a test
2620         case, ecma_3/RegExp/perlstress-002.js, so updated results to expect
2621         that test to succeed.
2622
2623 2008-01-02  Darin Adler  <darin@apple.com>
2624
2625         Reviewed by Geoff.
2626
2627         - fix http://bugs.webkit.org/show_bug.cgi?id=16696
2628           JSCRE fails fails to match Acid3 regexp
2629
2630         Test: fast/regex/early-acid3-86.html
2631
2632         The problem was with the cutoff point between backreferences and octal
2633         escape sequences. We need to determine the cutoff point by counting the
2634         total number of capturing brackets, which requires an extra pass through
2635         the expression when compiling it.
2636
2637         * pcre/pcre_compile.cpp:
2638         (CompileData::CompileData): Added numCapturingBrackets. Removed some
2639         unused fields.
2640         (compileBranch): Use numCapturingBrackets when calling checkEscape.
2641         (calculateCompiledPatternLength): Use numCapturingBrackets when calling
2642         checkEscape, and also store the bracket count at the end of the compile.
2643         (jsRegExpCompile): Call calculateCompiledPatternLength twice -- once to
2644         count the number of brackets and then a second time to calculate the length.
2645
2646 2008-01-02  Darin Adler  <darin@apple.com>
2647
2648         Reviewed by Geoff.
2649
2650         - fix http://bugs.webkit.org/show_bug.cgi?id=16696
2651           JSCRE fails fails to match Acid3 regexp
2652
2653         Test: fast/regex/early-acid3-86.html
2654
2655         The problem was with the cutoff point between backreferences and octal
2656         escape sequences. We need to determine the cutoff point by counting the
2657         total number of capturing brackets, which requires an extra pass through
2658         the expression when compiling it.
2659
2660         * pcre/pcre_compile.cpp:
2661         (CompileData::CompileData): Added numCapturingBrackets. Removed some
2662         unused fields.
2663         (compileBranch): Use numCapturingBrackets when calling checkEscape.
2664         (calculateCompiledPatternLength): Use numCapturingBrackets when calling
2665         checkEscape, and also store the bracket count at the end of the compile.
2666         (jsRegExpCompile): Call calculateCompiledPatternLength twice -- once to
2667         count the number of brackets and then a second time to calculate the length.
2668
2669 2008-01-02  David Kilzer <ddkilzer@webkit.org>
2670
2671         Reviewed and landed by Darin.
2672
2673         * kjs/nodes.cpp:
2674         (KJS::DoWhileNode::execute): Added a missing return.
2675
2676 2008-01-02  Darin Adler  <darin@apple.com>
2677
2678         - try to fix Qt build
2679
2680         * wtf/unicode/qt4/UnicodeQt4.h:
2681         (WTF::Unicode::foldCase): Add some missing const.
2682
2683 2008-01-02  Alice Liu  <alice.liu@apple.com>
2684
2685         Reviewed by Sam Weinig.
2686
2687         need to export ASCIICType.h for use in DRT
2688
2689         * JavaScriptCore.vcproj/WTF/WTF.vcproj:
2690         * wtf/ASCIICType.h:
2691         (WTF::isASCIIUpper):
2692
2693 2008-01-02  Sam Weinig  <sam@webkit.org>
2694
2695         Reviewed by Beth Dakin.
2696
2697         Cleanup error_object.h/cpp.
2698
2699         * kjs/JSGlobalObject.cpp:
2700         (KJS::JSGlobalObject::reset):
2701         * kjs/error_object.cpp:
2702         (KJS::):
2703         (KJS::ErrorInstance::ErrorInstance):
2704         (KJS::ErrorPrototype::ErrorPrototype):
2705         (KJS::ErrorProtoFuncToString::ErrorProtoFuncToString):
2706         (KJS::ErrorProtoFuncToString::callAsFunction):
2707         (KJS::ErrorObjectImp::ErrorObjectImp):
2708         (KJS::ErrorObjectImp::implementsConstruct):
2709         (KJS::ErrorObjectImp::construct):
2710         (KJS::ErrorObjectImp::callAsFunction):
2711         (KJS::NativeErrorPrototype::NativeErrorPrototype):
2712         (KJS::NativeErrorImp::NativeErrorImp):
2713         (KJS::NativeErrorImp::implementsConstruct):
2714         (KJS::NativeErrorImp::construct):
2715         (KJS::NativeErrorImp::callAsFunction):
2716         (KJS::NativeErrorImp::mark):
2717         * kjs/error_object.h:
2718         (KJS::ErrorInstance::classInfo):
2719         (KJS::NativeErrorImp::classInfo):
2720
2721 2008-01-02  Mark Rowe  <mrowe@apple.com>
2722
2723         Rubber-stamped by Alp Toker.
2724
2725         * GNUmakefile.am: Add missing dependency on grammar.y.
2726
2727 2008-01-01  Darin Adler  <darin@apple.com>
2728
2729         Reviewed by Eric.
2730
2731         - fix for http://bugs.webkit.org/show_bug.cgi?id=16695
2732           JSC allows non-identifier codepoints in identifiers (affects Acid3)
2733
2734         Test: fast/js/kde/parse.html
2735
2736         * kjs/lexer.cpp:
2737         (KJS::Lexer::lex): Added additional states to distinguish Unicode escapes at the
2738         start of identifiers from ones inside identifiers. Rejected characters that don't pass
2739         the isIdentStart and isIdentPart tests.
2740         (KJS::Lexer::convertUnicode): Removed incorrect FIXME comment.
2741
2742         * kjs/lexer.h: Added new states to distinguish \u escapes at the start of identifiers
2743         from \u escapes inside identifiers.
2744
2745 2008-01-01  Darin Adler  <darin@apple.com>
2746
2747         - rolled scope chain optimization out; it was breaking the world
2748
2749 2008-01-01  Darin Adler  <darin@apple.com>
2750
2751         Reviewed by Geoff.
2752
2753         - http://bugs.webkit.org/show_bug.cgi?id=16685
2754           eliminate List::empty() to cut down on PIC branches
2755
2756         Also included one other speed-up -- remove the call to reserveCapacity from
2757         FunctionBodyNode::processDeclarations in all but the most unusual cases.
2758
2759         Together these make SunSpider 1.016x as fast.
2760
2761         * JavaScriptCore.exp: Updated.
2762         * kjs/ExecState.cpp:
2763         (KJS::globalEmptyList): Added. Called only when creating global ExecState
2764         instances.
2765         (KJS::ExecState::ExecState): Broke constructor up into three separate functions,
2766         for the three separate node types. Also went through each of the three and
2767         streamlined as much as possible, removing dead code. This prevents us from having
2768         to access the global in the function body version of the constructor.
2769
2770         * kjs/ExecState.h: Added emptyList(). Replaced the constructor with a set of
2771         three that are specific to the different node types that can create new execution
2772         state objects.
2773
2774         * kjs/array_object.cpp:
2775         (KJS::ArrayProtoFuncToLocaleString::callAsFunction): Use exec->emptyList() instead
2776         of List::empty().
2777         (KJS::ArrayProtoFuncConcat::callAsFunction): Ditto.
2778         (KJS::ArrayProtoFuncSlice::callAsFunction): Ditto.
2779         (KJS::ArrayProtoFuncSplice::callAsFunction): Ditto.
2780         (KJS::ArrayProtoFuncFilter::callAsFunction): Ditto.
2781         * kjs/function.cpp:
2782         (KJS::FunctionImp::callAsFunction): Updated to call new ExecState constructor.
2783         (KJS::GlobalFuncImp::callAsFunction): Ditto (for eval).
2784         * kjs/function_object.cpp:
2785         (FunctionObjectImp::construct): Use exec->emptyList() instead of List::empty().
2786
2787         * kjs/list.cpp: Removed List::empty.
2788         * kjs/list.h: Ditto.
2789
2790         * kjs/nodes.cpp:
2791         (KJS::ElementNode::evaluate): Use exec->emptyList() instead of List::empty().
2792         (KJS::ArrayNode::evaluate): Ditto.
2793         (KJS::ObjectLiteralNode::evaluate): Ditto.
2794         (KJS::PropertyListNode::evaluate): Ditto.
2795         (KJS::FunctionBodyNode::processDeclarations): Another speed-up. Check the capacity
2796         before calling reserveCapacity, because it doesn't get inlined the local storage
2797         vector is almost always big enough -- saving the function call overhead is a big
2798         deal.
2799         (KJS::FuncDeclNode::makeFunction): Use exec->emptyList() instead of List::empty().
2800         (KJS::FuncExprNode::evaluate): Ditto.
2801         * kjs/object.cpp:
2802         (KJS::tryGetAndCallProperty): Ditto.
2803         * kjs/property_slot.cpp:
2804         (KJS::PropertySlot::functionGetter): Ditto.
2805         * kjs/string_object.cpp:
2806         (KJS::StringProtoFuncSplit::callAsFunction): Ditto.
2807
2808 2008-01-01  Darin Adler  <darin@apple.com>
2809
2810         Reviewed by Geoff.
2811
2812         - fix http://bugs.webkit.org/show_bug.cgi?id=16648
2813           REGRESSION (r28165): Yuku.com navigation prints "jsRegExpExecute failed with result -2"
2814           <rdar://problem/5646486> REGRESSION (r28165): Layout test fast/regex/test1 fails intermittently
2815
2816         Fixes 34 failing test cases in the fast/regex/test1.html test.
2817
2818         Restored the stack which prevents infinite loops for brackets that match the empty
2819         string; it had been removed as an optimization.
2820
2821         Unfortunately, restoring this stack causes the regular expression test in SunSpider
2822         to be 1.095x as slow and the overall test to be 1.004x as slow. Maybe we can find
2823         a correct optimization to restore the speed!
2824
2825         It's possible the original change was on the right track but just off by one.
2826
2827         * pcre/pcre_exec.cpp: Add back eptrblock, but name it BracketChainNode.
2828         (MatchStack::pushNewFrame): Add back the logic needed here.
2829         (startNewGroup): Ditto.
2830         (match): Ditto.
2831
2832 2008-01-01  Darin Adler  <darin@apple.com>
2833
2834         Reviewed by Geoff.
2835
2836         - http://bugs.webkit.org/show_bug.cgi?id=16683
2837           speed up function calls by making ScopeChain::push cheaper
2838
2839         This gives a 1.019x speedup on SunSpider.
2840
2841         After doing this, I realized this probably will be obsolete when the optimization
2842         to avoid creating an activation object is done. When we do that one we should check
2843         if rolling this out will speed things up, since this does add overhead at the time
2844         you copy the scope chain.
2845
2846         * kjs/object.h: Removed the ScopeChain::release function. It was
2847         marked inline, and called in exactly one place, so moved it there.
2848         No idea why it was in this header file!
2849
2850         * kjs/scope_chain.cpp: Removed the overload of the ScopeChain::push
2851         function that takes another ScopeChain. It was unused. I think we used
2852         it over in WebCore at one point, but not any more.
2853
2854         * kjs/scope_chain.h: Changed ScopeChainNode into a struct rather than
2855         a class, got rid of its constructor so we can have one that's uninitialized,
2856         and moved the refCount into a derived struct, ScopeChainHeapNode. Made _node
2857         mutable so it can be changed in the moveToHeap function. Changed the copy
2858         constructor and assignment operator to call moveToHeap, since the top node
2859         can't be shared when it's embedded in another ScopeChain object. Updated
2860         functions as needed to handle the case where the first object isn't on the
2861         heap or to add casts for cases where it's guaranteed to be. Changed the push
2862         function to always put the new node into the ScopeChain object; it will get
2863         put onto the heap when needed later.
2864
2865 2008-01-01  Geoffrey Garen  <ggaren@apple.com>
2866
2867         Reviewed by Darin Adler.
2868         
2869         Fixed slight logic error in reserveCapacity, where we would reallocate
2870         the storage buffer unnecessarily.
2871
2872         * wtf/Vector.h:
2873         (WTF::::reserveCapacity): No need to grow the buffer if newCapacity is
2874         equal to capacity().
2875
2876 2008-01-01  Darin Adler  <darin@apple.com>
2877
2878         Reviewed by Oliver.
2879
2880         - http://bugs.webkit.org/show_bug.cgi?id=16684
2881           eliminate debugger overhead from function body execution
2882
2883         Speeds SunSpider up 1.003x. That's a small amount, but measurable.
2884
2885         * JavaScriptCore.exp: Updated.
2886         * kjs/Parser.h:
2887         (KJS::Parser::parse): Create the node with a static member function named create() instead
2888         of using new explicitly.
2889
2890         * kjs/grammar.y: Changed calls to new FunctionBodyNode to use FunctionBodyNode::create().
2891
2892         * kjs/nodes.cpp:
2893         (KJS::ProgramNode::create): Added. Calls new.
2894         (KJS::EvalNode::create): Ditto.
2895         (KJS::FunctionBodyNode::create): Ditto, but creates FunctionBodyNodeWithDebuggerHooks
2896         when a debugger is present.
2897         (KJS::FunctionBodyNode::execute): Removed debugger hooks.
2898         (KJS::FunctionBodyNodeWithDebuggerHooks::FunctionBodyNodeWithDebuggerHooks): Added.
2899         (KJS::FunctionBodyNodeWithDebuggerHooks::execute): Calls the debugger, then the code,
2900         then the debugger again.
2901
2902         * kjs/nodes.h: Added create functions, made the constructors private and protected.
2903
2904 2007-12-30  Eric Seidel  <eric@webkit.org>
2905
2906         Reviewed by Sam.
2907
2908         More small cleanup to array_object.cpp
2909
2910         * kjs/array_object.cpp:
2911         (KJS::ArrayProtoFuncToString::callAsFunction):
2912         (KJS::ArrayProtoFuncToLocaleString::callAsFunction):
2913         (KJS::ArrayProtoFuncJoin::callAsFunction):
2914         (KJS::ArrayProtoFuncConcat::callAsFunction):
2915         (KJS::ArrayProtoFuncReverse::callAsFunction):
2916         (KJS::ArrayProtoFuncShift::callAsFunction):
2917         (KJS::ArrayProtoFuncSlice::callAsFunction):
2918         (KJS::ArrayProtoFuncSort::callAsFunction):
2919         (KJS::ArrayProtoFuncSplice::callAsFunction):
2920         (KJS::ArrayProtoFuncUnShift::callAsFunction):
2921         (KJS::ArrayProtoFuncFilter::callAsFunction):
2922         (KJS::ArrayProtoFuncMap::callAsFunction):
2923         (KJS::ArrayProtoFuncEvery::callAsFunction):
2924
2925 2007-12-30  Eric Seidel  <eric@webkit.org>
2926
2927         Reviewed by Sam.
2928
2929         Apply wkstyle to array_object.cpp
2930
2931         * kjs/array_object.cpp:
2932         (KJS::ArrayPrototype::ArrayPrototype):
2933         (KJS::ArrayPrototype::getOwnPropertySlot):
2934         (KJS::ArrayProtoFuncConcat::callAsFunction):
2935         (KJS::ArrayProtoFuncPop::callAsFunction):
2936         (KJS::ArrayProtoFuncReverse::callAsFunction):
2937         (KJS::ArrayProtoFuncShift::callAsFunction):
2938         (KJS::ArrayProtoFuncSlice::callAsFunction):
2939         (KJS::ArrayProtoFuncSort::callAsFunction):
2940         (KJS::ArrayProtoFuncSplice::callAsFunction):
2941         (KJS::ArrayProtoFuncUnShift::callAsFunction):
2942         (KJS::ArrayProtoFuncFilter::callAsFunction):
2943         (KJS::ArrayProtoFuncMap::callAsFunction):
2944         (KJS::ArrayProtoFuncEvery::callAsFunction):
2945         (KJS::ArrayProtoFuncLastIndexOf::callAsFunction):
2946         (KJS::ArrayObjectImp::ArrayObjectImp):
2947         (KJS::ArrayObjectImp::implementsConstruct):
2948         (KJS::ArrayObjectImp::construct):
2949         (KJS::ArrayObjectImp::callAsFunction):
2950
2951 2007-12-30  Eric Seidel  <eric@webkit.org>
2952
2953         Reviewed by Sam.
2954
2955         Remove maxInt/minInt, replacing with std:max/min<int>()
2956
2957         * kjs/array_object.cpp:
2958         (KJS::ArrayProtoFuncSplice::callAsFunction):
2959         * kjs/operations.cpp:
2960         * kjs/operations.h:
2961
2962 2007-12-30  Eric Seidel  <eric@webkit.org>
2963
2964         Reviewed by Sam.
2965         
2966         Update Number.toString to properly throw exceptions.
2967         Cleanup code in Number.toString implementation.
2968
2969         * kjs/number_object.cpp:
2970         (KJS::numberToString):
2971         * kjs/object.cpp:
2972         (KJS::Error::create): Remove bogus debug lines.
2973
2974 2007-12-28  Eric Seidel  <eric@webkit.org>
2975
2976         Reviewed by Oliver.
2977
2978         ASSERT when debugging via Drosera due to missed var lookup optimization.
2979         http://bugs.webkit.org/show_bug.cgi?id=16634
2980         
2981         No test case possible.
2982
2983         * kjs/nodes.cpp:
2984         (KJS::BreakpointCheckStatement::optimizeVariableAccess):
2985         * kjs/nodes.h:
2986
2987 2007-12-28  Eric Seidel  <eric@webkit.org>
2988
2989         Reviewed by Oliver.
2990
2991         Fix (-0).toFixed() and re-factor a little
2992         Fix (-0).toExponential() and printing of trailing 0s in toExponential
2993         Fix toPrecision(nan) handling
2994         http://bugs.webkit.org/show_bug.cgi?id=16640
2995
2996         * kjs/number_object.cpp:
2997         (KJS::numberToFixed):
2998         (KJS::fractionalPartToString):
2999         (KJS::numberToExponential):
3000         (KJS::numberToPrecision):
3001
3002 2007-12-28  Eric Seidel  <eric@webkit.org>
3003
3004         Reviewed by Sam.
3005
3006         More changes to make number code readable
3007
3008         * kjs/number_object.cpp:
3009         (KJS::integer_part_noexp):
3010         (KJS::numberToFixed):
3011         (KJS::numberToExponential):
3012
3013 2007-12-28  Eric Seidel  <eric@webkit.org>
3014
3015         Reviewed by Sam.
3016
3017         More small cleanups to toPrecision
3018
3019         * kjs/number_object.cpp:
3020         (KJS::numberToPrecision):
3021
3022 2007-12-28  Eric Seidel  <eric@webkit.org>
3023
3024         Reviewed by Sam.
3025
3026         More small attempts to make number code readable
3027
3028         * kjs/number_object.cpp:
3029         (KJS::exponentialPartToString):
3030         (KJS::numberToExponential):
3031         (KJS::numberToPrecision):
3032
3033 2007-12-28  Eric Seidel  <eric@webkit.org>
3034
3035         Reviewed by Sam.
3036
3037         Break out callAsFunction implementations into static functions
3038
3039         * kjs/number_object.cpp:
3040         (KJS::numberToString):
3041         (KJS::numberToFixed):
3042         (KJS::numberToExponential):
3043         (KJS::numberToPrecision):
3044         (KJS::NumberProtoFunc::callAsFunction):
3045
3046 2007-12-28  Eric Seidel  <eric@webkit.org>
3047
3048         Reviewed by Sam.
3049
3050         Apply wkstyle/astyle and fix placement of *
3051
3052         * kjs/number_object.cpp:
3053         (KJS::):
3054         (KJS::NumberInstance::NumberInstance):
3055         (KJS::NumberPrototype::NumberPrototype):
3056         (KJS::NumberProtoFunc::NumberProtoFunc):
3057         (KJS::integer_part_noexp):
3058         (KJS::intPow10):
3059         (KJS::NumberProtoFunc::callAsFunction):
3060         (KJS::NumberObjectImp::NumberObjectImp):
3061         (KJS::NumberObjectImp::getOwnPropertySlot):
3062         (KJS::NumberObjectImp::getValueProperty):
3063         (KJS::NumberObjectImp::implementsConstruct):
3064         (KJS::NumberObjectImp::construct):
3065         (KJS::NumberObjectImp::callAsFunction):
3066         * kjs/object.cpp:
3067         (KJS::JSObject::put):
3068
3069 2007-12-27  Eric Seidel  <eric@webkit.org>
3070
3071         Reviewed by Sam.
3072
3073         ASSERT in JavaScriptCore while viewing WICD test case
3074         http://bugs.webkit.org/show_bug.cgi?id=16626
3075         
3076         * kjs/nodes.cpp:
3077         (KJS::ForInNode::execute): move KJS_CHECK_EXCEPTION to proper place
3078
3079 2007-12-26  Jan Michael Alonzo  <jmalonzo@unpluggable.com>
3080
3081         Reviewed by Alp Toker.
3082
3083         http://bugs.webkit.org/show_bug.cgi?id=16390
3084         Use autotools or GNU make as the build system for the GTK port
3085
3086         * GNUmakefile.am: Added.
3087
3088 2007-12-25  Maciej Stachowiak  <mjs@apple.com>
3089         
3090         Reviewed by Oliver.
3091                 
3092         - Remove unnecessary redundant check from property setting
3093         http://bugs.webkit.org/show_bug.cgi?id=16602
3094                 
3095         1.3% speedup on SunSpider.
3096         
3097         * kjs/object.cpp:
3098         (KJS::JSObject::put): Don't do canPut check when not needed; let
3099         the PropertyMap handle it.        
3100         (KJS::JSObject::canPut): Don't check the static property
3101         table. lookupPut does that already.
3102         
3103 2007-12-24  Alp Toker  <alp@atoker.com>
3104
3105         Fix builds that don't use AllInOneFile.cpp following breakage
3106         introduced in r28973.
3107
3108         * kjs/grammar.y:
3109
3110 2007-12-24  Maciej Stachowiak  <mjs@apple.com>
3111
3112         Reviewed by Eric.
3113
3114         - Optimize variable declarations
3115         http://bugs.webkit.org/show_bug.cgi?id=16585
3116         
3117         3.5% speedup on SunSpider.
3118
3119         var statements now result in either assignments or empty statements.
3120         
3121         This allows a couple of optimization opportunities:
3122         - No need to branch at runtime to check if there is an initializer
3123         - EmptyStatementNodes can be removed entirely (also done in this patch)
3124         - Assignment expressions get properly optimized for local variables
3125         
3126         This patch also includes some code cleanup:
3127         - Most of the old VarStatement/VarDecl logic is now only used for const declarations, 
3128           thus it is renamed appropriately
3129         - AssignExprNode is gone
3130         
3131         * JavaScriptCore.exp:
3132         * kjs/NodeInfo.h:
3133         * kjs/grammar.y:
3134         * kjs/nodes.cpp:
3135         (KJS::SourceElements::append):
3136         (KJS::ConstDeclNode::ConstDeclNode):
3137         (KJS::ConstDeclNode::optimizeVariableAccess):
3138         (KJS::ConstDeclNode::handleSlowCase):
3139         (KJS::ConstDeclNode::evaluateSingle):
3140         (KJS::ConstDeclNode::evaluate):
3141         (KJS::ConstStatementNode::optimizeVariableAccess):
3142         (KJS::ConstStatementNode::execute):
3143         (KJS::VarStatementNode::optimizeVariableAccess):
3144         (KJS::VarStatementNode::execute):
3145         (KJS::ForInNode::ForInNode):
3146         (KJS::ForInNode::optimizeVariableAccess):
3147         (KJS::ForInNode::execute):
3148         (KJS::FunctionBodyNode::initializeSymbolTable):
3149         (KJS::ProgramNode::initializeSymbolTable):
3150         (KJS::FunctionBodyNode::processDeclarations):
3151         (KJS::ProgramNode::processDeclarations):
3152         (KJS::EvalNode::processDeclarations):
3153         * kjs/nodes.h:
3154         (KJS::DeclarationStacks::):
3155         (KJS::StatementNode::):
3156         (KJS::ConstDeclNode::):
3157         (KJS::ConstStatementNode::):
3158         (KJS::EmptyStatementNode::):
3159         (KJS::VarStatementNode::):
3160         (KJS::ForNode::):
3161         * kjs/nodes2string.cpp:
3162         (KJS::ConstDeclNode::streamTo):
3163         (KJS::ConstStatementNode::streamTo):
3164         (KJS::ScopeNode::streamTo):
3165         (KJS::VarStatementNode::streamTo):
3166         (KJS::ForNode::streamTo):
3167         (KJS::ForInNode::streamTo):
3168
3169 2007-12-21  Mark Rowe  <mrowe@apple.com>
3170
3171         Reviewed by Oliver Hunt.
3172
3173         * JavaScriptCore.exp: Remove unused symbol to prevent a weak external symbol
3174         being generated in JavaScriptCore.framework.
3175
3176 2007-12-21  Darin Adler  <darin@apple.com>
3177
3178         Requested by Maciej.
3179
3180         * kjs/nodes.h: Use the new NEVER_INLINE here and eliminate the old
3181         KJS_NO_INLINE. We don't want to have two, and we figured it was better
3182         to keep the one that's in WTF.
3183
3184 2007-12-21  Darin Adler  <darin@apple.com>
3185
3186         Reviewed by Eric.
3187
3188         - http://bugs.webkit.org/show_bug.cgi?id=16561
3189           remove debugger overhead from non-debugged JavaScript execution
3190
3191         1.022x as fast on SunSpider.
3192
3193         * JavaScriptCore.exp: Updated.
3194
3195         * kjs/NodeInfo.h: Renamed SourceElementsStub to SourceElements,
3196         since that more accurately describes the role of this object, which
3197         is a reference-counted wrapper for a Vector.
3198
3199         * kjs/Parser.cpp:
3200         (KJS::Parser::didFinishParsing): Changed parameter type to SourceElements,
3201         and use plain assignment instead of set.
3202         * kjs/Parser.h: Changed parameter type of didFinishParsing to a
3203         SourceElements. Also changed m_sourceElements; we now use a RefPtr instead
3204         of an OwnPtr as well.
3205
3206         * kjs/grammar.y: Got rid of all the calls to release() on SourceElements.
3207         That's now handed inside the constructors for various node types, since we now
3208         use vector swapping instead.
3209
3210         * kjs/nodes.cpp:
3211         (KJS::Node::rethrowException): Added NEVER_INLINE, because this was getting inlined
3212         and we want exception handling out of the normal code flow.
3213         (KJS::SourceElements::append): Moved here from the header. This now handles
3214         creating a BreakpointCheckStatement for each statement in the debugger case.
3215         That way we can get breakpoint handling without having it in every execute function.
3216         (KJS::BreakpointCheckStatement::BreakpointCheckStatement): Added.
3217         (KJS::BreakpointCheckStatement::execute): Added. Contains the code that was formerly
3218         in the StatementNode::hitStatement function and the KJS_BREAKPOINT macro.
3219         (KJS::BreakpointCheckStatement::streamTo): Added.
3220         (KJS::ArgumentListNode::evaluateList): Use KJS_CHECKEXCEPTIONVOID since the return
3221         type is void.
3222         (KJS::VarStatementNode::execute): Removed KJS_BREAKPOINT.
3223         (KJS::BlockNode::BlockNode): Changed parameter type to SourceElements.
3224         Changed code to use release since the class now contains a vector rather than
3225         a vector point.
3226         (KJS::BlockNode::optimizeVariableAccess): Updated since member is now a vector
3227         rather than a vector pointer.
3228         (KJS::BlockNode::execute): Ditto.
3229         (KJS::ExprStatementNode::execute): Removed KJS_BREAKPOINT.
3230         (KJS::IfNode::execute): Ditto.
3231         (KJS::IfElseNode::execute): Ditto.
3232         (KJS::DoWhileNode::execute): Ditto.
3233         (KJS::WhileNode::execute): Ditto.
3234         (KJS::ContinueNode::execute): Ditto.
3235         (KJS::BreakNode::execute): Ditto.
3236         (KJS::ReturnNode::execute): Ditto.
3237         (KJS::WithNode::execute): Ditto.
3238         (KJS::CaseClauseNode::optimizeVariableAccess): Updated since member is now a vector
3239         rather than a vector pointer.
3240         (KJS::CaseClauseNode::executeStatements): Ditto.
3241         (KJS::SwitchNode::execute): Removed KJS_BREAKPOINT.
3242         (KJS::ThrowNode::execute): Ditto.
3243         (KJS::TryNode::execute): Ditto.
3244         (KJS::ScopeNode::ScopeNode): Changed parameter type to SourceElements.
3245         (KJS::ProgramNode::ProgramNode): Ditto.
3246         (KJS::EvalNode::EvalNode): Ditto.
3247         (KJS::FunctionBodyNode::FunctionBodyNode): Ditto.
3248         (KJS::ScopeNode::optimizeVariableAccess): Updated since member is now a vector
3249         rather than a vector pointer.
3250
3251         * kjs/nodes.h: Removed hitStatement. Renamed SourceElements to StatementVector.
3252         Renamed SourceElementsStub to SourceElements and made it derive from
3253         ParserRefCounted rather than from Node, hold a vector rather than a pointer to
3254         a vector, and changed the release function to swap with another vector rather
3255         than the pointer idiom. Updated BlockNode and CaseClauseNode to hold actual
3256         vectors instead of pointers to vectors. Added BreakpointCheckStatement.
3257
3258         * kjs/nodes2string.cpp:
3259         (KJS::statementListStreamTo): Changed to work on a vector instead of a pointer
3260         to a vector.
3261         (KJS::BlockNode::streamTo): Ditto.
3262         (KJS::CaseClauseNode::streamTo):  Ditto.
3263
3264         * wtf/AlwaysInline.h: Added NEVER_INLINE.
3265         * wtf/PassRefPtr.h: Tweaked formatting. Added clear() function that matches the
3266         ones in OwnPtr and auto_ptr.
3267         * wtf/RefPtr.h: Ditto.
3268
3269 2007-12-21  Darin Adler  <darin@apple.com>
3270
3271         - fix broken regression tests
3272
3273         The broken tests were fast/js/do-while-expression-value.html and
3274         fast/js/while-expression-value.html.
3275
3276         * kjs/nodes.cpp: Check in the correct version of this file. I had accidentally landed
3277         an old version of my patch for bug 16471.
3278         (KJS::statementListExecute): The logic here was backwards. Have to set the value
3279         even for non-normal execution results.
3280
3281 2007-12-20  Alexey Proskuryakov  <ap@webkit.org>
3282
3283         Windows build fix
3284
3285         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Copy npruntime_internal.h
3286         to WebKitBuild.
3287
3288 2007-12-20  Eric Seidel  <eric@webkit.org>
3289
3290         Reviewed by mjs.
3291         
3292         Split IfNode into IfNode and IfElseNode for speedup.
3293         http://bugs.webkit.org/show_bug.cgi?id=16470
3294         
3295         SunSpider claims this is 1.003x as fast as before.
3296         (This required running with --runs 15 to get consistent enough results to tell!)
3297
3298         * kjs/grammar.y:
3299         * kjs/nodes.cpp:
3300         (KJS::IfNode::optimizeVariableAccess):
3301         (KJS::IfNode::execute):
3302         (KJS::IfNode::getDeclarations):
3303         (KJS::IfElseNode::optimizeVariableAccess):
3304         (KJS::IfElseNode::execute):
3305         (KJS::IfElseNode::getDeclarations):
3306         * kjs/nodes.h:
3307         (KJS::IfNode::):
3308         (KJS::IfElseNode::):
3309         * kjs/nodes2string.cpp:
3310         (KJS::IfNode::streamTo):
3311         (KJS::IfElseNode::streamTo):
3312
3313 2007-12-20  Darin Adler  <darin@apple.com>
3314
3315         Reviewed by Sam.
3316
3317         * wtf/OwnPtr.h:
3318         (WTF::operator==): Added.
3319         (WTF::operator!=): Added.
3320
3321 2007-12-20  Geoffrey Garen  <ggaren@apple.com>
3322
3323         Reviewed by Oliver Hunt.
3324         
3325         AST optimization: Avoid NULL-checking ForNode's child nodes.
3326         
3327         0.6% speedup on SunSpider.
3328         
3329         This is a proof of concept patch that demonstrates how to optimize
3330         grammar productions with optional components, like
3331         
3332             for (optional; optional; optional) {
3333                 ...
3334             }
3335             
3336         The parser emits NULL for an optional component that is not present.
3337
3338         Instead of checking for a NULL child at execution time, a node that
3339         expects an optional component to be present more often than not checks
3340         for a NULL child at construction time, and substitutes a viable
3341         alternative node in its place.
3342
3343         (We'd like the parser to start emitting NULL a lot more once we teach
3344         it to emit NULL for certain no-op productions like EmptyStatement and
3345         VariableStatement, so, as a foundation, it's important for nodes with
3346         NULL optional components to be fast.)
3347
3348         * kjs/Parser.cpp:
3349         (KJS::Parser::didFinishParsing): Check for NULL SourceElements. Also,
3350         moved didFinishParsing into the .cpp file because adding a branch while
3351         it was in the header file caused a substantial and inexplicable
3352         performance regression. (Did I mention that GCC is crazy?)
3353
3354         * kjs/grammar.y:
3355
3356         * kjs/nodes.cpp:
3357         (KJS::BlockNode::BlockNode): Check for NULL SourceElements.
3358         (KJS::ForNode::optimizeVariableAccess): No need to check for NULL here.
3359         (KJS::ForNode::execute): No need to check for NULL here.
3360         * kjs/nodes.h:
3361         (KJS::ForNode::): Check for NULL SourceElements. Substitute a TrueNode
3362         because it's semantically harmless, and it evaluates to boolean in an
3363         efficient manner.
3364
3365 2007-12-20  Oliver Hunt  <oliver@apple.com>
3366
3367         Reviewed by Geoff.
3368
3369         Slight logic reordering in JSImmediate::from(double)
3370
3371         This gives a 0.6% improvement in SunSpider.
3372
3373         * kjs/JSImmediate.h:
3374         (KJS::JSImmediate::from):
3375
3376 2007-12-20  Eric Seidel  <eric@webkit.org>
3377
3378         Reviewed by mjs.
3379
3380         Fix major Array regression introduced by 28899.
3381
3382         SunSpider claims this is at least 1.37x as fast as pre-regression. :)
3383
3384         * kjs/array_instance.cpp: make Arrays fast again!
3385
3386 2007-12-20  Eric Seidel  <eric@webkit.org>
3387
3388         Reviewed by Geoff, then re-rubber-stamped by Geoff after final search/replace and testing.
3389
3390         Small reworking of Date code for 4% speedup on Date tests (0.2% overall)
3391         http://bugs.webkit.org/show_bug.cgi?id=16537
3392
3393         Make msToYear human-readable
3394         Make msToDayInMonth slightly more readable and avoid recalculating msToYear
3395         Remove use of isInLeapYear to avoid calling msToYear
3396         Remove dayInYear call by changing msToDayInMonth to dayInMonthFromDayInYear
3397         Remove more duplicate calls to dayInYear and getUTCOffset for further speedup
3398
3399         * kjs/DateMath.cpp:
3400         (KJS::daysFrom1970ToYear):
3401         (KJS::msToYear):
3402         (KJS::monthFromDayInYear):
3403         (KJS::checkMonth):
3404         (KJS::dayInMonthFromDayInYear):
3405         (KJS::dateToDayInYear):
3406         (KJS::getDSTOffsetSimple):
3407         (KJS::getDSTOffset):
3408         (KJS::gregorianDateTimeToMS):
3409         (KJS::msToGregorianDateTime):
3410
3411 2007-12-20  Rodney Dawes  <dobey@wayofthemonkey.com>
3412
3413         Reviewed by Darin Adler.
3414
3415         Proxy includes of npruntime.h or npapi.h through npruntime_internal.h
3416         Include stdio.h in npapi.h for the use of FILE with XP_UNIX defined
3417         This is for building with X11, as some type and enum names conflict
3418         with #define names in X11 headers.
3419         http://bugs.webkit.org/show_bug.cgi?id=15669
3420
3421         * JavaScriptCore.xcodeproj/project.pbxproj:
3422         * bindings/NP_jsobject.h:
3423         * bindings/npapi.h:
3424         * bindings/npruntime.cpp:
3425         * bindings/npruntime_impl.h:
3426         * bindings/npruntime_priv.h:
3427         * bindings/npruntime_internal.h:
3428         * bindings/testbindings.cpp:
3429         * bindings/c/c_class.h:
3430         * bindings/c/c_runtime.h:
3431         * bindings/c/c_utility.h:
3432
3433 2007-12-20  Darin Adler  <darin@apple.com>
3434
3435         - re-fix http://bugs.webkit.org/show_bug.cgi?id=16471
3436           Completions need to be smaller (or not exist at all)
3437
3438         Same patch as last time with the test failures problem fixed.
3439
3440         * kjs/function.cpp:
3441         (KJS::GlobalFuncImp::callAsFunction): Make sure to check the completion
3442         type from newExec to see if the execute raised an exception.
3443
3444 2007-12-20  Darin Adler  <darin@apple.com>
3445
3446         - roll out that last change -- it was causing test failures;
3447           I'll check it back in after fixing them
3448
3449 2007-12-20  Darin Adler  <darin@apple.com>
3450
3451         Reviewed by Eric.
3452
3453         - http://bugs.webkit.org/show_bug.cgi?id=16471
3454           Completions need to be smaller (or not exist at all)
3455
3456         SuSpider shows 2.4% speedup.
3457
3458         Stop using completions in the execution engine.
3459         Instead, the completion type and label target are both
3460         stored in the ExecState.
3461
3462         * API/JSContextRef.cpp: Removed unneeded include of "completion.h".
3463         * bindings/runtime_method.cpp: Removed unused execute function.
3464         * bindings/runtime_method.h: Ditto.
3465
3466         * kjs/ExecState.h: Added completionType, breakOrContinueTarget,
3467         setCompletionType, setNormalCompletion, setBreakCompletion,
3468         setContinueCompletion, setReturnValueCompletion, setThrowCompletion,
3469         setInterruptedCompletion, m_completionType, and m_breakOrContinueTarget.
3470
3471         * kjs/completion.h: Removed constructor and getter for target
3472         for break and continue from Completion. This class is now only
3473         used for the public API to Interpreter and such.
3474
3475         * kjs/date_object.h: Removed unused execute function.
3476
3477         * kjs/function.cpp:
3478         (KJS::FunctionImp::callAsFunction): Removed some unneeded
3479         exception processing. Updated to call the new execute function
3480         and to get the completion type from the ExecState. Merged in
3481         the execute function, which repeated some of the same logic and
3482         was called only from here.
3483         (KJS::GlobalFuncImp::callAsFunction): More of the same for eval.
3484         * kjs/function.h: Removed execute.
3485
3486         * kjs/interpreter.cpp:
3487         (KJS::Interpreter::evaluate): Added code to convert the result of
3488         execut into a Completion.
3489
3490         * kjs/nodes.cpp:
3491         (KJS::Node::setErrorCompletion): Renamed from createErrorCompletion.
3492         Now sets the completion type in the ExecState.
3493         (KJS::Node::rethrowException): Now sets the completion type in the
3494         ExecState.
3495         (KJS::StatementNode::hitStatement): Now sets the completion type in
3496         the ExecState.
3497         (KJS::VarStatementNode::execute): Updated to put completion type in
3498         the ExecState instead of a Completion object.
3499         (KJS::statementListExecute): Ditto. Also changed the for loop to use
3500         indices instead of iterators.
3501         (KJS::BlockNode::execute): Updated return type.
3502         (KJS::EmptyStatementNode::execute): Updated to put completion type in
3503         the ExecState instead of a Completion object.
3504         (KJS::ExprStatementNode::execute): Ditto.
3505         (KJS::IfNode::execute): Ditto.
3506         (KJS::DoWhileNode::execute): Ditto. Also streamlined the logic a little
3507         to make the normal case a little faster and moved the end outside the
3508         loop so that "break" can do a break.
3509         (KJS::WhileNode::execute): Ditto.
3510         (KJS::ForNode::execute): Ditto.
3511         (KJS::ForInNode::execute): Ditto.
3512         (KJS::ContinueNode::execute): Updated to put completion type in
3513         the ExecState instead of a Completion object.
3514         (KJS::BreakNode::execute): Ditto.
3515         (KJS::ReturnNode::execute): Ditto.
3516         (KJS::WithNode::execute): Ditto.
3517         (KJS::CaseClauseNode::executeStatements): Ditto. Also renamed to have
3518         execute in its name to reflect the fact that it's a member of the same
3519         family of functions.
3520         (KJS::CaseBlockNode::executeBlock): Ditto.
3521         (KJS::SwitchNode::execute): Ditto.
3522         (KJS::LabelNode::execute): Ditto.
3523         (KJS::ThrowNode::execute): Ditto.
3524         (KJS::TryNode::execute): Ditto.
3525         (KJS::ProgramNode::execute): Ditto.
3526         (KJS::EvalNode::execute): Ditto.
3527         (KJS::FunctionBodyNode::execute): Ditto.
3528         (KJS::FuncDeclNode::execute): Ditto.
3529
3530         * kjs/nodes.h: Renamed setErrorCompletion to createErrorCompletion, made
3531         hitStatement protected, changed return value of execute to a JSValue,
3532         renamed evalStatements to executeStatements, and evalBlock to executeBlock.
3533
3534         * kjs/number_object.h: Removed unused execute function.
3535
3536 2007-12-20  Geoffrey Garen  <ggaren@apple.com>
3537
3538         Added Radar number.
3539
3540         * kjs/nodes.cpp:
3541         (KJS::ProgramNode::processDeclarations):
3542
3543 2007-12-20  Geoffrey Garen  <ggaren@apple.com>
3544
3545         Linux build fix: config.h has to come first.
3546
3547         * kjs/error_object.cpp:
3548
3549 2007-12-19  Geoffrey Garen  <ggaren@apple.com>
3550
3551         Reviewed by Oliver Hunt.
3552         
3553         Optimized global access to global variables, using a symbol table.
3554         
3555         SunSpider reports a 1.5% overall speedup, a 6.2% speedup on 3d-morph,
3556         and a whopping 33.1% speedup on bitops-bitwise-and.
3557
3558         * API/JSCallbackObjectFunctions.h: Replaced calls to JSObject:: with
3559         calls to Base::, since JSObject is not always our base class. This
3560         was always a bug, but the bug is even more apparent after some of my
3561         changes.
3562
3563         (KJS::::staticFunctionGetter): Replaced use of getDirect with call to
3564         getOwnPropertySlot. Global declarations are no longer stored in the
3565         property map, so a call to getDirect is insufficient for finding
3566         override properties.
3567
3568         * API/testapi.c: 
3569         * API/testapi.js: Added test for the getDirect change mentioned above.
3570
3571         * kjs/ExecState.cpp: 
3572         * kjs/ExecState.h: Dialed back the optimization to store a direct
3573         pointer to the localStorage buffer. One ExecState can grow the global
3574         object's localStorage without another ExecState's knowledge, so
3575         ExecState can't store a direct pointer to the localStorage buffer
3576         unless/until we invent a way to update all the relevant ExecStates.
3577
3578         * kjs/JSGlobalObject.cpp: Inserted the symbol table into get and put
3579         operations.
3580         (KJS::JSGlobalObject::reset): Reset the symbol table and local storage,
3581         too. Also, clear the property map here, removing the need for a
3582         separate call.
3583
3584         * kjs/JSVariableObject.cpp:
3585         * kjs/JSVariableObject.h: Added support for saving localStorage and the
3586         symbol table to the back/forward cache, and restoring them.
3587
3588         * kjs/function.cpp:
3589         (KJS::GlobalFuncImp::callAsFunction): Renamed progNode to evalNode
3590         because it's an EvalNode, not a ProgramNode.
3591
3592         * kjs/lookup.h:
3593         (KJS::cacheGlobalObject): Replaced put with faster putDirect, since
3594         that's how the rest of lookup.h works. putDirect is safe here because
3595         cacheGlobalObject is only used for objects whose names are not valid
3596         identifiers.
3597
3598         * kjs/nodes.cpp: The good stuff!
3599
3600         (KJS::EvalNode::processDeclarations): Replaced hasProperty with
3601         the new hasOwnProperty, which is slightly faster.
3602
3603         * kjs/object.h: Nixed clearProperties because clear() does this job now.
3604
3605         * kjs/property_map.cpp:
3606         * kjs/property_map.h: More back/forward cache support.
3607         
3608         * wtf/Vector.h:
3609         (WTF::::grow): Added fast non-branching grow function. I used it in
3610         an earlier version of this patch, even though it's not used anymore.
3611
3612 2007-12-09  Mark Rowe  <mrowe@apple.com>
3613
3614         Reviewed by Oliver Hunt.
3615
3616         Build fix for non-Mac platforms.  Move NodeInfo into its own header so that the YYTYPE
3617         declaration in grammar.h is able to declare members of that type.
3618
3619         * kjs/NodeInfo.h: Added.
3620         (KJS::createNodeInfo):
3621         (KJS::mergeDeclarationLists):
3622         (KJS::appendToVarDeclarationList):
3623         * kjs/grammar.y:
3624         * kjs/lexer.cpp:
3625
3626 2007-12-19  Oliver Hunt  <oliver@apple.com>
3627
3628         Make appendToVarDeclarationList static
3629
3630         RS=Weinig.
3631
3632         * kjs/grammar.y:
3633
3634 2007-12-18  Oliver Hunt  <oliver@apple.com>
3635
3636         Remove dead code due to removal of post-parse declaration discovery.
3637
3638         RS=Geoff.
3639
3640         Due to the removal of the declaration discovery pass after parsing we
3641         no longer need any of the logic used for that discovery.
3642
3643         * kjs/nodes.cpp:
3644         (KJS::Node::Node):
3645         (KJS::VarDeclNode::VarDeclNode):
3646         (KJS::BlockNode::BlockNode):
3647         (KJS::ForInNode::ForInNode):
3648         (KJS::CaseBlockNode::CaseBlockNode):
3649         * kjs/nodes.h:
3650         (KJS::VarStatementNode::):
3651         (KJS::IfNode::):
3652         (KJS::DoWhileNode::):
3653         (KJS::WhileNode::):
3654         (KJS::WithNode::):
3655         (KJS::LabelNode::):
3656         (KJS::TryNode::):
3657         (KJS::FuncDeclNode::):
3658         (KJS::CaseClauseNode::):
3659         (KJS::ClauseListNode::):
3660         (KJS::SwitchNode::):
3661
3662 2007-12-18  Oliver Hunt  <oliver@apple.com>
3663
3664         Replace post-parse pass to find declarations with logic in the parser itself
3665
3666         Reviewed by Geoff.
3667
3668         Instead of finding declarations in a pass following the initial parsing of
3669         a program, we incorporate the logic directly into the parser.  This lays
3670         the groundwork for further optimisations (such as improving performance in
3671         declaration expressions -- var x = y; -- to match that of standard assignment)
3672         in addition to providing a 0.4% performance improvement in SunSpider.
3673
3674         * JavaScriptCore.exp:
3675         * kjs/Parser.cpp:
3676         (KJS::Parser::parse):
3677         * kjs/Parser.h:
3678         (KJS::Parser::didFinishParsing):
3679         (KJS::Parser::parse):
3680         * kjs/grammar.y:
3681         * kjs/nodes.cpp:
3682         (KJS::ParserTracked::ParserTracked):
3683         (KJS::ParserTracked::~ParserTracked):
3684         (KJS::ParserTracked::ref):
3685         (KJS::ParserTracked::deref):
3686         (KJS::ParserTracked::refcount):
3687         (KJS::ParserTracked::clearNewTrackedObjects):
3688         (KJS::Node::Node):
3689         (KJS::ScopeNode::ScopeNode):
3690         (KJS::ProgramNode::ProgramNode):
3691         (KJS::EvalNode::EvalNode):
3692         (KJS::FunctionBodyNode::FunctionBodyNode):
3693         (KJS::FunctionBodyNode::initializeSymbolTable):
3694         (KJS::FunctionBodyNode::processDeclarations):
3695         * kjs/nodes.h:
3696         (KJS::ParserTracked::):
3697         (KJS::Node::):
3698         (KJS::ScopeNode::):
3699
3700 2007-12-18  Xan Lopez  <xan@gnome.org>
3701
3702         Reviewed by Geoff.
3703
3704         Fix http://bugs.webkit.org/show_bug.cgi?id=14521
3705         Bug 14521: JavaScriptCore fails to build on Linux/PPC gcc 4.1.2
3706         
3707         * wtf/TCSpinLock.h:
3708         (TCMalloc_SpinLock::Unlock):
3709
3710         Use less strict memory operand constraint on inline asm generation.
3711         PLATFORM(DARWIN) left unpatched due to Apple's GCC bug.
3712
3713         Patch by David Kilzer <ddkilzer@webkit.org>
3714
3715 2007-12-18  Mark Rowe  <mrowe@apple.com>
3716
3717         Rubber-stamped by Maciej Stachowiak.
3718
3719         Remove outdated and non-functioning project files for the Apollo port.
3720
3721         * JavaScriptCore.apolloproj: Removed.
3722
3723 2007-12-18  Darin Adler  <darin@apple.com>
3724
3725         - fix Windows build
3726
3727         * pcre/pcre_exec.cpp:
3728         (jsRegExpExecute): Change back from false/true to 0/1 -- I probably should not have
3729         deleted MATCH_MATCH and MATCH_NOMATCH, but I'm going to leave them out.
3730
3731 2007-12-18  Darin Adler  <darin@apple.com>
3732
3733         Reviewed by Geoff.
3734
3735         - fix http://bugs.webkit.org/show_bug.cgi?id=16458
3736           REGRESSION (r28164): regular expressions can now hang due to lack of a match limit
3737           <rdar://problem/5636067>
3738
3739         Test: fast/regex/slow.html
3740
3741         Slows down SunSpider a bit (about 1.01x); filed a bug to follow up on that:
3742         http://bugs.webkit.org/show_bug.cgi?id=16503
3743
3744         * pcre/pcre.h: Changed name of error code to not specifically mention "recursion".
3745         * pcre/pcre_exec.cpp:
3746         (match): Replaced the depth limit, MATCH_RECURSION_LIMIT, with a total match looping
3747         limit, matchLimit. Also eliminated the constants for MATCH_MATCH and MATCH_NOMATCH,
3748         since they are just true and false (1 and 0).
3749         (jsRegExpExecute): More of the MATCH_MATCH change.
3750
3751 2007-12-17  Darin Adler  <darin@apple.com>
3752
3753         - speculative build fix for non-gcc platforms
3754
3755         * pcre/pcre_exec.cpp: (match): Remove unused cases from return switch.
3756
3757 2007-12-16  Mark Rowe  <mrowe@apple.com>
3758
3759         Speculative build fix for non-Mac platforms.
3760
3761         * pcre/pcre_compile.cpp: Include string.h for memset, memmove, etc.
3762
3763 2007-12-16  Darin Adler  <darin@apple.com>
3764
3765         Reviewed by Maciej.
3766
3767         - http://bugs.webkit.org/show_bug.cgi?id=16438
3768         - removed some more unused code
3769         - changed quite a few more names to WebKit-style
3770         - moved more things out of pcre_internal.h
3771         - changed some indentation to WebKit-style
3772         - improved design of the functions for reading and writing
3773           2-byte values from the opcode stream (in pcre_internal.h)
3774
3775         * pcre/dftables.cpp:
3776         (main): Added the kjs prefix a normal way in lieu of using macros.
3777
3778         * pcre/pcre_compile.cpp: Moved some definitions here from pcre_internal.h.
3779         (errorText): Name changes, fewer typedefs.
3780         (checkEscape): Ditto. Changed uppercase conversion to use toASCIIUpper.
3781         (isCountedRepeat): Name change.
3782         (readRepeatCounts): Name change.
3783         (firstSignificantOpcode): Got rid of the use of OP_lengths, which is
3784         very lightly used here. Hard-coded the length of OP_BRANUMBER.
3785         (firstSignificantOpcodeSkippingAssertions): Ditto. Also changed to
3786         use the advanceToEndOfBracket function.
3787         (getOthercaseRange): Name changes.
3788         (encodeUTF8): Ditto.
3789         (compileBranch): Name changes. Removed unused after_manual_callout and
3790         the code to handle it. Removed code to handle OP_ONCE since we never
3791         emit this opcode. Changed to use advanceToEndOfBracket in more places.
3792         (compileBracket): Name changes.
3793         (branchIsAnchored): Removed code to handle OP_ONCE since we never emit
3794         this opcode.
3795         (bracketIsAnchored): Name changes.
3796         (branchNeedsLineStart): More fo the same.
3797         (bracketNeedsLineStart): Ditto.
3798         (branchFindFirstAssertedCharacter): Removed OP_ONCE code.
3799         (bracketFindFirstAssertedCharacter): More of the same.
3800         (calculateCompiledPatternLengthAndFlags): Ditto.
3801         (returnError): Name changes.
3802         (jsRegExpCompile): Ditto.
3803
3804         * pcre/pcre_exec.cpp: Moved some definitions here from pcre_internal.h.
3805         (matchRef): Updated names.
3806         Improved macros to use the do { } while(0) idiom so they expand to single
3807         statements rather than to blocks or multiple statements. And refeactored
3808         the recursive match macros.
3809         (MatchStack::pushNewFrame): Name changes.
3810         (getUTF8CharAndIncrementLength): Name changes.
3811         (match): Name changes. Removed the ONCE opcode.
3812         (jsRegExpExecute): Name changes.
3813
3814         * pcre/pcre_internal.h: Removed quite a few unneeded includes. Rewrote
3815         quite a few comments. Removed the macros that add kjs prefixes to the
3816         functions with external linkage; instead renamed the functions. Removed
3817         the unneeded typedefs pcre_uint16, pcre_uint32, and uschar. Removed the
3818         dead and not-all-working code for LINK_SIZE values other than 2, although
3819         we aim to keep the abstraction working. Removed the OP_LENGTHS macro.
3820         (put2ByteValue): Replaces put2ByteOpcodeValueAtOffset.
3821         (get2ByteValue): Replaces get2ByteOpcodeValueAtOffset.
3822         (put2ByteValueAndAdvance): Replaces put2ByteOpcodeValueAtOffsetAndAdvance.
3823         (putLinkValueAllowZero): Replaces putOpcodeValueAtOffset; doesn't do the
3824         addition, since a comma is really no better than a plus sign. Added an
3825         assertion to catch out of range values and changed the parameter type to
3826         int rather than unsigned.
3827         (getLinkValueAllowZero): Replaces getOpcodeValueAtOffset.
3828         (putLinkValue): New function that most former callers of the
3829         putOpcodeValueAtOffset function can use; asserts the value that is
3830         being stored is non-zero and then calls putLinkValueAllowZero.
3831         (getLinkValue): Ditto.
3832         (putLinkValueAndAdvance): Replaces putOpcodeValueAtOffsetAndAdvance. No
3833         caller was using an offset, which makes sense given the advancing behavior.
3834         (putLinkValueAllowZeroAndAdvance): Ditto.
3835         (isBracketOpcode): Added. For use in an assertion.
3836         (advanceToEndOfBracket): Renamed from moveOpcodePtrPastAnyAlternateBranches,
3837         and removed comments about how it's not well designed. This function takes
3838         a pointer to the beginning of a bracket and advances to the end of the
3839         bracket.
3840
3841         * pcre/pcre_tables.cpp: Updated names.
3842         * pcre/pcre_ucp_searchfuncs.cpp:
3843         (kjs_pcre_ucp_othercase): Ditto.
3844         * pcre/pcre_xclass.cpp:
3845         (getUTF8CharAndAdvancePointer): Ditto.
3846         (kjs_pcre_xclass): Ditto.
3847         * pcre/ucpinternal.h: Ditto.
3848
3849         * wtf/ASCIICType.h:
3850         (WTF::isASCIIAlpha): Added an int overload, like the one we already have for
3851         isASCIIDigit.
3852         (WTF::isASCIIAlphanumeric): Ditto.
3853         (WTF::isASCIIHexDigit): Ditto.
3854         (WTF::isASCIILower): Ditto.
3855         (WTF::isASCIISpace): Ditto.
3856         (WTF::toASCIILower): Ditto.
3857         (WTF::toASCIIUpper): Ditto.
3858
3859 2007-12-16  Darin Adler  <darin@apple.com>
3860
3861         Reviewed by Maciej.
3862
3863         - fix http://bugs.webkit.org/show_bug.cgi?id=16459
3864           REGRESSION: assertion failure with regexp with \B in a case-ignoring character range
3865           <rdar://problem/5646361>
3866
3867         The problem was that \B was not handled properly in character classes.
3868
3869         Test: fast/js/regexp-overflow.html
3870
3871         * pcre/pcre_compile.cpp:
3872         (check_escape): Added handling of ESC_b and ESC_B in character classes here.
3873         Allows us to get rid of the handling of \b in character classes from all the
3874         call sites that handle it separately and to handle \B properly as well.
3875         (compileBranch): Remove the ESC_b handling, since it's not needed any more.
3876         (calculateCompiledPatternLengthAndFlags): Ditto.
3877
3878 2007-12-16  Mark Rowe  <mrowe@apple.com>
3879
3880         Reviewed by Maciej Stachowiak.
3881
3882         Fix http://bugs.webkit.org/show_bug.cgi?id=16448
3883         Bug 16448: [GTK] Celtic Kane JavaScript performance on Array test is slow relative to Mac
3884
3885         * kjs/array_instance.cpp:
3886         (KJS::compareByStringPairForQSort):
3887         (KJS::ArrayInstance::sort): Convert JSValue's to strings once up front and then sort the
3888         results.  This avoids calling toString twice per comparison, but requires a temporary buffer
3889         so we only use this approach in cases where the array being sorted is not too large.
3890
3891 2007-12-16  Geoffrey Garen  <ggaren@apple.com>
3892
3893         Reviewed by Darin Adler and Maciej Stachowiak.
3894         
3895         More refactoring to support global variable optimization.
3896         
3897         Changed SymbolTable to use RefPtr<UString::Rep> as its key instead of
3898         UString::Rep*. With globals, the symbol table can outlast the
3899         declaration node for any given symbol, so the symbol table needs to ref
3900         its symbol names.
3901         
3902         In support, specialized HashMaps with RefPtr keys to allow lookup
3903         via raw pointer, avoiding refcount churn.
3904         
3905         SunSpider reports a .6% speedup (prolly just noise).
3906
3907         * JavaScriptCore.vcproj/WTF/WTF.vcproj: Added new file: wtf/RefPtrHashMap.h
3908         * JavaScriptCore.xcodeproj/project.pbxproj: ditto
3909
3910         * kjs/JSVariableObject.cpp:
3911         (KJS::JSVariableObject::getPropertyNames): Symbol table keys are RefPtrs now.
3912
3913         * kjs/SymbolTable.h: Modified key traits to match RefPtr. Added a
3914         static Rep* for null, which helps compute the deletedValue() trait.
3915
3916         * wtf/HashMap.h: #include the RefPtr specialization so everyone can use it.
3917
3918         * wtf/RefPtrHashMap.h: Copied from wtf/HashMap.h. Added overloaded versions
3919         of find(), contains(), get(), set(), add(), remove(), and take() that take
3920         raw pointers as keys.
3921
3922 2007-12-16  Alexey Proskuryakov  <ap@webkit.org>
3923
3924         Reviewed by Darin.
3925
3926         http://bugs.webkit.org/show_bug.cgi?id=16162
3927         Problems with float parsing on Linux (locale-dependent parsing was used).
3928
3929         * kjs/dtoa.cpp: Removed USE_LOCALE to reduce future confusion.
3930         * kjs/lexer.cpp: (KJS::Lexer::lex): Parse with kjs_strtod, not the system one.
3931
3932 2007-12-14  Alp Toker  <alp@atoker.com>
3933
3934         Reviewed by Mark Rowe.
3935
3936         Enable the AllInOneFile.cpp optimization for the GTK+ port.
3937
3938         * JavaScriptCore.pri:
3939
3940 2007-12-14  Mark Rowe  <mrowe@apple.com>
3941
3942         Unreviewed.  Remove commented out fprintf's that were for debugging purposes only.
3943
3944         * wtf/FastMalloc.cpp:
3945         (WTF::TCMalloc_PageHeap::IncrementalScavenge):
3946
3947 2007-12-14  Mark Rowe  <mrowe@apple.com>
3948
3949         Reviewed by Maciej Stachowiak.
3950
3951         Don't use the MADV_DONTNEED code path for now as it has no effect on Mac OS X and is
3952         currently untested on other platforms.
3953
3954         * wtf/TCSystemAlloc.cpp:
3955         (TCMalloc_SystemRelease): Return after releasing memory rather than potentially falling
3956         through into another mechanism if multiple are supported.
3957
3958 2007-12-14  Alp Toker  <alp@atoker.com>
3959
3960         Build fix for GTK+/Qt and ports that don't use AllInOneFile.cpp.
3961
3962         Include UnusedParam.h.
3963
3964         * wtf/TCSystemAlloc.cpp:
3965
3966 2007-12-14  Oliver Hunt  <oliver@apple.com>
3967
3968         Reviewed by Stephanie.
3969
3970         Fix build on windows
3971
3972         * wtf/FastMalloc.cpp:
3973         (WTF::TCMalloc_PageHeap::IncrementalScavenge):
3974
3975 2007-12-14  Dan Bernstein  <mitz@apple.com>
3976
3977         - try again to fix the Windows build
3978
3979         * wtf/TCSystemAlloc.cpp:
3980         (TCMalloc_SystemRelease):
3981
3982 2007-12-14  Dan Bernstein  <mitz@apple.com>
3983
3984         - try to fix the Windows build
3985
3986         * wtf/TCSystemAlloc.cpp:
3987         (TCMalloc_SystemRelease):
3988
3989 2007-12-14  Mark Rowe <mrowe@apple.com>
3990
3991         Reviewed by Maciej and Oliver.
3992
3993         Add final changes to make TCMalloc release memory to the system.
3994         This results in a 0.4% regression against ToT, but this is offset
3995         against the gains made by the original TCMalloc r38 merge - in fact
3996         we retain around 0.3-0.4% progression overall.
3997
3998         * wtf/FastMalloc.cpp:
3999         (WTF::InitSizeClasses):
4000         (WTF::TCMalloc_PageHeap::IncrementalScavenge):
4001         * wtf/TCSystemAlloc.cpp:
4002         (TCMalloc_SystemRelease):
4003
4004 2007-12-14  Darin Adler  <darin@apple.com>
4005
4006         Reviewed by Sam.
4007
4008         - removed unnecessary includes of "Vector.h"
4009
4010         * wtf/HashMap.h:
4011         (WTF::copyKeysToVector): Make the type of the vector be a template parameter.
4012         This allows copying keys into a vector of a base class or one with an inline capacity.
4013         (WTF::copyValuesToVector): Ditto.
4014         * wtf/HashSet.h:
4015         (WTF::copyToVector): Ditto.
4016
4017 2007-12-14  Anders Carlsson  <andersca@apple.com>
4018
4019         Reviewed by Darin and Geoff.
4020
4021         <rdar://problem/5619295> 
4022         REGRESSION: 303-304: Embedded YouTube video fails to render- JS errors (16150) (Flash 9)
4023         
4024         Get rid of unnecessary and incorrect security checks for plug-ins accessing JavaScript objects. 
4025         
4026         The way this used to work was that each NPObject that wrapped a JSObject would have a root object
4027         corresponding to the frame object (used for managing the lifecycle) and an origin root object (used for
4028         doing security checks). 
4029         
4030         This would prevent a plug-in from accessing a frame's window object if it's security origin was different
4031         (some parts of the window, such as the location object, can be accessed from frames with different security 
4032         origins, and those checks are being done in WebCore).
4033         
4034         Also, if a plug-in were to access a window object of a frame that later went away, it could lead to that
4035         Window JSObject being garbage collected and the NPObject pointing to freed memory.
4036         
4037         How this works now is that there is no origin root object anymore, and all NPObject wrappers that are created
4038         for a plug-in will have the root object of the containing frame of that plug-in.
4039         
4040         * bindings/NP_jsobject.cpp:
4041         (jsDeallocate):
4042         Don't free the origin root object.
4043         
4044         (_NPN_CreateScriptObject):
4045         Remove the origin root object parameter.
4046         
4047         (_NPN_InvokeDefault):
4048         (_NPN_Invoke):
4049         (_NPN_Evaluate):
4050         (_NPN_GetProperty):
4051         (_NPN_SetProperty):
4052         (_NPN_RemoveProperty):
4053         (_NPN_HasProperty):
4054         (_NPN_HasMethod):
4055         (_NPN_Enumerate):
4056         Get rid of all security checks.
4057         
4058         * bindings/NP_jsobject.h:
4059         Remove originRootObject from the JavaScriptObject struct.
4060         
4061         * bindings/c/c_utility.cpp:
4062         (KJS::Bindings::convertValueToNPVariant):
4063         Always use the root object from the ExecState.
4064         
4065 2007-12-13  Steve Falkenburg  <sfalken@apple.com>
4066
4067         Move source file generation into its own vcproj to fix build dependencies.
4068
4069         Reviewed by Adam.
4070
4071         * JavaScriptCore.vcproj/JavaScriptCore.sln:
4072         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
4073         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.make: Added.
4074         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.vcproj: Added.
4075         * JavaScriptCore.vcproj/JavaScriptCoreSubmit.sln:
4076
4077 2007-12-13  Alp Toker  <alp@atoker.com>
4078
4079         http://bugs.webkit.org/show_bug.cgi?id=16406
4080         [Gtk] JavaScriptCore needs -lpthread
4081
4082         Build fix for Debian and any other platforms that don't implicitly
4083         link to pthread.
4084
4085         Link to pthread on non-Windows platforms until this dependency is
4086         removed from JSC.
4087
4088 2007-12-11  Geoffrey Garen  <ggaren@apple.com>
4089
4090         Reviewed by Sam Weinig.
4091         
4092         Build fix: Note some variables that are used only for ASSERTs.
4093
4094         * API/testapi.c:
4095         (Base_finalize):
4096         (globalObject_initialize):
4097         (testInitializeFinalize):
4098
4099 2007-12-11  Geoffrey Garen  <ggaren@apple.com>
4100
4101         Reviewed by Darin Adler.
4102         
4103         Fixed: All JS tests crash on Windows.
4104
4105         NDEBUG wasn't defined when compiling testkjs in release builds, so the
4106         HashTable definition in HashTable.h included an extra data member.
4107
4108         The solution was to add NDEBUG to the release testkjs configuration on
4109         Windows and Mac.
4110         
4111         For giggles, I also added other missing #defines to testkjs on Windows.
4112
4113         * Configurations/Base.xcconfig:
4114         * Configurations/JavaScriptCore.xcconfig:
4115         * JavaScriptCore.vcproj/testkjs/testkjs.vcproj:
4116         * JavaScriptCore.xcodeproj/project.pbxproj:
4117         * kjs/testkjs.cpp:
4118         (main):
4119
4120 2007-12-11  Geoffrey Garen  <ggaren@apple.com>
4121
4122         Reviewed by Darin Adler.
4123         
4124         Removed bogus ASSERT.