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