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