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