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