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