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