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