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