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