JavaScriptCore:
[WebKit-https.git] / JavaScriptCore / ChangeLog
1 2005-07-21  Geoffrey Garen  <ggaren@apple.com>
2
3         Reviewed by NOBODY (OOPS!).
4
5         * JavaScriptCore.xcodeproj/.cvsignore: Added.
6
7 2005-07-21  Geoffrey Garen  <ggaren@apple.com>
8
9         Reviewed by NOBODY (OOPS!).
10
11         * JavaScriptCore.pbproj/project.pbxproj: Removed.
12         * JavaScriptCore.xcodeproj/ggaren.pbxuser: Added.
13         * JavaScriptCore.xcodeproj/ggaren.perspective: Added.
14         * JavaScriptCore.xcodeproj/project.pbxproj: Added.
15         * Makefile.am:
16
17 2005-07-20  Maciej Stachowiak  <mjs@apple.com>
18
19         Patch from Trey Matteson <trey@usa.net>, reviewed by me.
20
21         - fixed http://bugzilla.opendarwin.org/show_bug.cgi?id=3956
22         some of WebKit builds with symbols, some doesn't
23         
24         * JavaScriptCore.pbproj/project.pbxproj: Generate symbols even for
25         Deployment.
26
27 2005-07-19  Geoffrey Garen  <ggaren@apple.com>
28
29         -fixed http://bugzilla.opendarwin.org/show_bug.cgi?id=3991
30         JSC doesn't implement Array.prototype.toLocaleString()
31
32         -test failure: ecma_3/Array/15.4.4.3-1.js
33
34         Reviewed by mjs.
35
36         * kjs/array_object.cpp:
37         (ArrayProtoFuncImp::call): now searches for toString and
38         toLocaleString overrides in the array's elements
39
40         * tests/mozilla/expected.html: failures are under 100! woohoo!
41
42 2005-07-19  Darin Adler  <darin@apple.com>
43
44         - fixed the build
45
46         * kjs/lookup.h: (KJS::lookupPut): Remove bogus const; was preventing WebCore from
47         compiling (not sure why this didn't affect my other build machine).
48
49         - one other tiny tweak (so sue me)
50
51         * bindings/runtime_root.cpp: Remove unneeded declaration.
52
53 2005-07-19  Darin Adler  <darin@apple.com>
54
55         Reviewed by Geoff Garen.
56
57         - eliminated try wrappers for get/put/call since we don't use C++ exceptions any more
58
59         * kjs/lookup.h: Changed tryCall in IMPLEMENT_PROTOFUNC here to call. It doesn't make
60         sense for this macro to use the name tryCall anyway, since that's specific to how
61         WebCore used this, so this is good anyway. On the other hand, it might be a problem
62         for KDOM or KSVG, in which case we'll need another macro for them, since JavaScriptCore
63         should presumably not have the C++ exception support.
64
65 2005-07-18  Geoffrey Garen  <ggaren@apple.com>
66
67         -fixed http://bugzilla.opendarwin.org/show_bug.cgi?id=4008
68         Error objects report incorrect length
69         
70         Reviewed by darin.
71
72         * kjs/error_object.cpp: Error objects now include a length property
73         (ErrorObjectImp::ErrorObjectImp):
74
75         * tests/mozilla/expected.html: updated expected results to reflect fix
76         * tests/mozilla/js1_5/Exceptions/regress-123002.js: test now expects 
77         ecma compliant results
78
79 2005-07-15  Geoffrey Garen  <ggaren@apple.com>
80
81         -rolled in KDE fixes for http://bugzilla.opendarwin.org/show_bug.cgi?id=3601
82         Error instance type info
83         
84         Reviewed by mjs.
85
86         * kjs/error_object.cpp:
87         - Created ErrorInstanceImp class for Error() objects. 
88         - Changed parent object for Native Errors to "Function" (matches
89         ECMA spec).
90         (ErrorInstanceImp::ErrorInstanceImp):
91         (ErrorProtoFuncImp::call):
92         (ErrorObjectImp::construct):
93         (NativeErrorImp::construct):
94
95         * kjs/error_object.h:
96         (KJS::ErrorInstanceImp::classInfo):
97         * kjs/object.h: made comment more informative about ClassInfo
98
99         * tests/mozilla/expected.html:
100
101 2005-07-14  Geoffrey Garen  <ggaren@apple.com>
102
103         - fixed: JS test suite expects an out of memory error
104         that our memory efficiency avoids
105         
106         Reviewed by mjs.
107
108         * tests/mozilla/js1_5/Array/regress-157652.js:
109         test now expects normal execution
110         
111         * tests/mozilla/expected.html:
112
113 2005-07-14  Geoffrey Garen  <ggaren@apple.com>
114         - fixed http://bugzilla.opendarwin.org/show_bug.cgi?id=4006
115         testkjs doesn't implement gc()
116         
117         - test failure:
118         ecma_3/Function/regress-104584.js
119         
120         Reviewed by mjs.
121
122         * kjs/interpreter.cpp:
123         (Interpreter::finalCheck): removed misleading while && comment
124
125         * kjs/testkjs.cpp: added "gc" function to global object
126         (TestFunctionImp::):
127         (TestFunctionImp::call):
128         (main):
129
130         * tests/mozilla/expected.html:
131
132 2005-07-14  Geoffrey Garen  <ggaren@apple.com>
133
134         -rolled in patches for http://bugzilla.opendarwin.org/show_bug.cgi?id=3945
135         [PATCH] Safe merges of comments and other trivialities from KDE's kjs
136         
137         -patch by Martijn Klingens <klingens@kde.org>
138         
139         * kjs/array_instance.h:
140         * kjs/array_object.cpp:
141         * kjs/array_object.h:
142         * kjs/bool_object.cpp:
143         * kjs/bool_object.h:
144         * kjs/collector.cpp:
145         * kjs/collector.h:
146         * kjs/completion.h:
147         * kjs/context.h:
148         * kjs/date_object.cpp:
149         * kjs/date_object.h:
150         * kjs/debugger.cpp:
151         * kjs/debugger.h:
152         * kjs/dtoa.h:
153         * kjs/error_object.cpp:
154         * kjs/error_object.h:
155         * kjs/function.cpp:
156         * kjs/function.h:
157         * kjs/function_object.cpp:
158         * kjs/function_object.h:
159         * kjs/grammar.y:
160         * kjs/identifier.cpp:
161         * kjs/identifier.h:
162         * kjs/internal.cpp:
163         * kjs/internal.h:
164         * kjs/interpreter.cpp:
165         * kjs/interpreter.h:
166         * kjs/interpreter_map.cpp:
167         * kjs/interpreter_map.h:
168         * kjs/lexer.cpp:
169         * kjs/lexer.h:
170         * kjs/list.cpp:
171         * kjs/list.h:
172         * kjs/lookup.cpp:
173         * kjs/lookup.h:
174         * kjs/math_object.cpp:
175         * kjs/math_object.h:
176         * kjs/nodes.cpp:
177         * kjs/nodes.h:
178         * kjs/nodes2string.cpp:
179         * kjs/number_object.cpp:
180         * kjs/number_object.h:
181         * kjs/object.cpp:
182         * kjs/object.h:
183         * kjs/object_object.cpp:
184         * kjs/object_object.h:
185         * kjs/operations.cpp:
186         * kjs/operations.h:
187         * kjs/property_map.cpp:
188         * kjs/property_map.h:
189         * kjs/reference.cpp:
190         * kjs/reference.h:
191         * kjs/reference_list.cpp:
192         * kjs/reference_list.h:
193         * kjs/regexp.cpp:
194         * kjs/regexp.h:
195         * kjs/regexp_object.cpp:
196         * kjs/regexp_object.h:
197         * kjs/scope_chain.cpp:
198         * kjs/scope_chain.h:
199         * kjs/simple_number.h:
200         * kjs/string_object.cpp:
201         * kjs/string_object.h:
202         * kjs/testkjs.cpp:
203         * kjs/types.h:
204         * kjs/ustring.cpp:
205         * kjs/ustring.h:
206         * kjs/value.cpp:
207         * kjs/value.h:
208
209 2005-07-14  Geoffrey Garen  <ggaren@apple.com>
210
211         -fixed http://bugzilla.opendarwin.org/show_bug.cgi?id=3970
212         throw statements fail inside eval statements
213         
214         Reviewed by mjs.
215
216         * kjs/function.cpp:
217         (KJS::GlobalFuncImp::call):
218         Big change since I fixed the tabbing. The important part is:
219         if (c.complType() == Throw)
220           exec->setException(c.value());
221
222         * kjs/nodes.cpp:
223         (ThrowNode::execute): removed duplicate KJS_CHECKEXCEPTION
224         (TryNode::execute): 
225         try now clears the exception state before the finally block executes,
226         and checks the state after the block executes, so that exceptions in
227         finally code get caught.
228
229         * tests/mozilla/expected.html:
230
231 2005-07-14  Geoffrey Garen  <ggaren@apple.com>
232         
233         -landed fix for http://bugzilla.opendarwin.org/show_bug.cgi?id=3412
234         Object.prototype is missing toLocaleString
235
236         - patch by Mark Rowe (bdash) <opendarwin.org@bdash.net.nz>
237         
238         -layout test info in webcore changelog
239
240         Reviewed by mjs.
241
242         * kjs/object_object.cpp:
243         (ObjectPrototypeImp::ObjectPrototypeImp):
244         (ObjectProtoFuncImp::call):
245         * kjs/object_object.h:
246         (KJS::ObjectProtoFuncImp::):
247
248 2005-07-12  Geoffrey Garen  <ggaren@apple.com>
249
250         Reviewed by mjs.
251
252         * kjs/function.cpp:
253         (KJS::IndexToNameMap::operator[]): fixed infinite recursion
254         bug in last checkin
255
256 2005-07-12  Geoffrey Garen  <ggaren@apple.com>
257
258         -fixed http://bugzilla.opendarwin.org/show_bug.cgi?id=3881
259         arguments object should share values with function parameters
260
261         Reviewed by mjs.
262
263         ArgumentsImp now uses a simple hash lookup to share values
264         with the activation object.
265
266         * kjs/function.cpp:
267         (KJS::FunctionImp::getParameterName):
268         (KJS::IndexToNameMap::IndexToNameMap):
269         (KJS::IndexToNameMap::~IndexToNameMap):
270         (KJS::IndexToNameMap::isMapped):
271         (KJS::IndexToNameMap::unMap):
272         (KJS::IndexToNameMap::operator[]):
273         (KJS::ArgumentsImp::ArgumentsImp):
274         (KJS::ArgumentsImp::mark):
275         (KJS::ArgumentsImp::get):
276         (KJS::ArgumentsImp::put):
277         (KJS::ArgumentsImp::deleteProperty):
278         (KJS::ArgumentsImp::hasOwnProperty):
279         (KJS::ActivationImp::createArgumentsObject):
280         * kjs/function.h:
281         * tests/mozilla/expected.html: updated results
282
283 2005-07-09  Maciej Stachowiak  <mjs@apple.com>
284
285         - backing out my earlier collector change, it causes a performance regression in TOT
286
287         * kjs/collector.cpp:
288         (KJS::Collector::allocate):
289
290 2005-07-08  Eric Seidel  <eseidel@apple.com>
291
292         Reviewed by mjs/hyatt (only in concept).
293
294         * JavaScriptCore.pbproj/project.pbxproj: Added JavaScriptCore+SVG
295         Turns on RTTI support for JavaScriptCore.framework when
296         building the JavaScriptCore+SVG target.  This is needed as
297         kdom (part of WebCore+SVG) requires RTTI for the time being.
298
299 2005-07-08  Maciej Stachowiak  <mjs@apple.com>
300
301         Reviewed by hyatt.
302
303         - When there are many live objects, GC less often, to try to make
304         GC cost proportional to garbage, not proportional to total memory used.
305
306         * kjs/collector.cpp:
307         (KJS::Collector::allocate):
308
309 2005-07-08  Vicki Murley  <vicki@apple.com>
310
311         Fix from Carsten Guenther, reviewed by Maciej
312
313         - fixed http://bugzilla.opendarwin.org/show_bug.cgi?id=3644 (Error string representation)
314
315         Switch from "-" to ":" in error strings.
316
317         * kjs/error_object.cpp:
318         (ErrorProtoFuncImp::call):
319         * tests/mozilla/expected.html:
320
321 2005-07-08  Geoffrey Garen  <ggaren@apple.com>
322
323         -rolled in patch for http://bugzilla.opendarwin.org/show_bug.cgi?id=3878
324         arguments object should be an object not an array
325
326         Reviewed by mjs.
327
328         * kjs/function.cpp:
329         (KJS::ArgumentsImp::ArgumentsImp): now manually handles initialization
330         we used to get for free by inheriting from ArrayInstanceImp
331         * kjs/function.h: ArgumentsImp now inherits from ObjectImp
332         * tests/mozilla/expected.html: updated expected test results
333
334 2005-07-07  Eric Seidel  <eseidel@apple.com>
335
336         Reviewed by mjs.
337
338         * kjs/grammar.y: removed #define YYMAXDEPTH 0 for bison 2.0
339         http://bugzilla.opendarwin.org/show_bug.cgi?id=3882
340
341 2005-07-03  Maciej Stachowiak  <mjs@apple.com>
342
343         Original patch from Mark Rowe <opendarwin.org@bdash.net.nz>, reviewed by me.
344         Fixes to patch by me, reviewed by John Sullivan.
345
346         - fixed http://bugzilla.opendarwin.org/show_bug.cgi?id=3293
347
348         Test cases added:
349         * tests/mozilla/expected.html: Two tests newly pass.
350
351         * bindings/objc/objc_runtime.h:
352         * bindings/objc/objc_runtime.mm:
353         (ObjcFallbackObjectImp::hasOwnProperty):
354         * bindings/runtime_array.cpp:
355         (RuntimeArrayImp::hasOwnProperty):
356         * bindings/runtime_array.h:
357         * bindings/runtime_object.cpp:
358         (RuntimeObjectImp::hasOwnProperty):
359         * bindings/runtime_object.h:
360         * kjs/array_instance.h:
361         * kjs/array_object.cpp:
362         (ArrayInstanceImp::hasOwnProperty):
363         * kjs/function.cpp:
364         (KJS::FunctionImp::hasOwnProperty):
365         (KJS::ActivationImp::hasOwnProperty):
366         * kjs/function.h:
367         * kjs/lookup.h:
368         * kjs/object.cpp:
369         (KJS::ObjectImp::hasProperty):
370         (KJS::ObjectImp::hasOwnProperty):
371         * kjs/object.h:
372         (KJS::Object::hasOwnProperty):
373         * kjs/object_object.cpp:
374         (ObjectPrototypeImp::ObjectPrototypeImp):
375         (ObjectProtoFuncImp::call):
376         * kjs/object_object.h:
377         (KJS::ObjectProtoFuncImp::):
378         * kjs/string_object.cpp:
379         (StringInstanceImp::hasOwnProperty):
380         * kjs/string_object.h:
381
382 2005-07-01  Geoffrey Garen  <ggaren@apple.com>
383
384         -landed patch by Eric Seidel <macdome@opendarwin.org>
385         
386         -for http://bugzilla.opendarwin.org/show_bug.cgi?id=3657
387         GroundWork:  Moving some functions from khtml->jsc following kjs TOT
388         
389         - no layout test necessary yet - only groundwork
390
391         Reviewed by darin.
392
393         * kjs/lookup.h:
394         (KJS::cacheGlobalObject):
395
396 2005-07-01  Geoffrey Garen  <ggaren@apple.com>
397
398         -landed patch by Carsten Guenther <cguenther@gmail.com>
399
400         -fixes http://bugzilla.opendarwin.org/show_bug.cgi?id=3477
401         some US-centric date formats not parsed by JavaScript (clock at news8austin.com)
402
403         -relevant tests:
404                mozilla/ecma_3/Date/15.9.5.5.js 
405                layout-tests/fast/js/date-parse-test.html
406
407         Reviewed by darin.
408
409         * kjs/date_object.cpp:
410         (formatLocaleDate):
411         (day):
412         (dayFromYear):
413         (daysInYear):
414         (timeFromYear):
415         (yearFromTime):
416         (weekDay):
417         (timeZoneOffset):
418         (DateProtoFuncImp::call):
419         (DateObjectImp::construct):
420         (KJS::parseDate):
421         (ymdhms_to_seconds):
422         (KJS::makeTime):
423         (findMonth):
424         (KJS::KRFCDate_parseDate):
425         * kjs/date_object.h:
426         * tests/mozilla/expected.html: updated expected results to reflect fix
427
428 2005-07-01  Geoffrey Garen  <ggaren@apple.com>
429
430         -fixed <rdar://problem/4168186> JavaScript fails to throw exceptions 
431         for invalid return statements
432         
433         relevant tests:
434             ecma/Statements/12.9-1-n.js
435             ecma_2/Exceptions/lexical-052.js
436             ecma_2/Exceptions/statement-009.js
437
438         Reviewed by sullivan.
439
440         * kjs/nodes.cpp:
441         (ReturnNode::execute): now throws exception if return is not inside
442         a function.
443
444         * tests/mozilla/expected.html: updated to reflect fix
445
446 2005-07-01  Geoffrey Garen  <ggaren@apple.com>
447
448         Reviewed by sullivan.
449
450         * tests/mozilla/expected.html: Updated test results for last fix.
451
452 2005-07-01  Geoffrey Garen  <ggaren@apple.com>
453
454         -fixed <rdar://problem/4168161> JavaScript fails to throw an exception 
455         for invalid function calls
456         
457         Reviewed by sullivan.
458
459         Relevant mozilla test: ecma_3/Exceptions/regress-95101.js 
460
461         * kjs/nodes.cpp:
462         (FunctionCallNode::evaluate): evaluate now checks for an exception
463         after resolving a function name (in case the function is undefined)
464
465 2005-07-01  Eric Seidel  <eseidel@apple.com>
466
467         Reviewed by darin.
468
469         * kjs/interpreter.h:
470         (KJS::Context::curStmtFirstLine): stub for compatibility with KDE
471         * kjs/value.h:
472         (KJS::Value::isValid): compatibility with KDE
473         http://bugzilla.opendarwin.org/show_bug.cgi?id=3687
474
475 2005-07-01  Eric Seidel  <eseidel@apple.com>
476
477         Reviewed by darin.
478
479         * kjs/create_hash_table: rolled in changes from KDE, including
480         -n <namespace> support from KDOM and support for newer comments
481         http://bugzilla.opendarwin.org/show_bug.cgi?id=3771
482
483 2005-06-30  Geoffrey Garen  <ggaren@apple.com>
484
485         -rolled in KDE fix to <rdar://problem/4167660> JavaScript fails to 
486         throw exceptions for invalid break/continue statements
487
488         No layout tests because it's already covered by the Mozilla suite
489
490         Reviewed by mjs.
491
492         * kjs/internal.h: LabelStack now tracks where you are relative to
493         switch and iteration (loop) statements
494         
495         (KJS::LabelStack::LabelStack):
496         (KJS::LabelStack::pushIteration):
497         (KJS::LabelStack::popIteration):
498         (KJS::LabelStack::inIteration):
499         (KJS::LabelStack::pushSwitch):
500         (KJS::LabelStack::popSwitch):
501         (KJS::LabelStack::inSwitch):
502
503         * kjs/nodes.cpp: 
504         These files were updated to use the new LabelStack:
505         (DoWhileNode::execute): 
506         (WhileNode::execute):
507         (ForNode::execute):
508         (ForInNode::execute):
509         (SwitchNode::execute):
510         
511         These files were updated to throw exceptions for invalid
512         break/continue statements:
513         (BreakNode::execute): 
514         (ContinueNode::execute):
515
516         * tests/mozilla/expected.html: Updated expected results to reflect fix
517
518 2005-06-30  Kevin Decker  <kdecker@apple.com>
519
520         Reviewed by rjw.
521
522         fixed: <rdar://problem/4166838> failed assertion in`Interpreter::lockCount() > 0
523
524         no layout test added; this is in the bindings code.
525
526         * bindings/objc/WebScriptObject.mm:
527         (+[WebScriptObject _convertValueToObjcValue:KJS::originExecutionContext:Bindings::executionContext:Bindings::]): make sure to lock and unlock the interpreter around allocations. 
528
529 2005-06-29  Geoffrey Garen  <ggaren@apple.com>
530
531         Patch by Francisco Tolmasky <tolmasky@gmail.com>
532
533         - fixes http://bugzilla.opendarwin.org/show_bug.cgi?id=3667
534         Core JavaScript 1.5 Reference:Objects:Array:forEach
535
536         See WebCore Changelog for layout tests added.
537
538         Reviewed by darin.
539
540         * kjs/array_object.cpp:
541         (ArrayProtoFuncImp::call):
542         * kjs/array_object.h:
543         (KJS::ArrayProtoFuncImp::):
544
545 2005-06-29  Geoffrey Garen  <ggaren@apple.com>
546
547         Patch contributed by Oliver Hunt <ojh16@student.canterbury.ac.nz>
548
549         -fixed http://bugzilla.opendarwin.org/show_bug.cgi?id=3743
550         Incorrect error message given for certain calls
551
552         See WebCore Changelog for layout test added.
553
554         Reviewed by mjs.
555
556         * kjs/object.cpp:
557         (KJS::ObjectImp::defaultValue):
558
559 2005-06-29  Geoffrey Garen  <ggaren@apple.com>
560
561         Rolling out date patch from 6-28-05 because it breaks 
562         fast/js/date-parse-test
563
564         Reviewed by NOBODY.
565
566         * kjs/date_object.cpp:
567         (formatLocaleDate):
568         (DateProtoFuncImp::call):
569         (DateObjectImp::construct):
570         (KJS::parseDate):
571         (ymdhms_to_seconds):
572         (isSpaceOrTab):
573         (KJS::KRFCDate_parseDate):
574         * kjs/date_object.h:
575         * tests/mozilla/expected.html:
576
577 2005-06-29  Geoffrey Garen  <ggaren@apple.com>
578
579         Reviewed by Darin.
580
581         -fixes http://bugzilla.opendarwin.org/show_bug.cgi?id=3750
582         build fails with KJS_VERBOSE set
583
584         * kjs/nodes.cpp: changed debug print statement to use UString
585         (VarDeclNode::evaluate):
586         * kjs/reference.cpp: ditto
587         (KJS::Reference::putValue):
588
589 2005-06-28  Geoffrey Garen  <ggaren@apple.com>
590
591         Patch contributed by Carsten Guenther <cguenther@gmail.com>.
592
593         -fixes http://bugzilla.opendarwin.org/show_bug.cgi?id=3477
594         some US-centric date formats not parsed by JavaScript (clock at news8austin.com)
595
596         Reviewed by darin.
597
598         * kjs/date_object.cpp:
599         (formatLocaleDate):
600         (day):
601         (dayFromYear):
602         (daysInYear):
603         (timeFromYear):
604         (yearFromTime):
605         (weekDay):
606         (timeZoneOffset):
607         (DateProtoFuncImp::call):
608         (DateObjectImp::construct):
609         (KJS::parseDate):
610         (ymdhms_to_seconds):
611         (KJS::makeTime):
612         (findMonth):
613         (KJS::KRFCDate_parseDate):
614         * kjs/date_object.h:
615         * tests/mozilla/expected.html: updated expected test results to reflect fix
616
617 2005-06-26  Maciej Stachowiak  <mjs@apple.com>
618
619         Reviewed by Darin.
620
621         - replace hash functions  with better ones
622
623         * JavaScriptCore.pbproj/project.pbxproj: Add new file to build.
624         * kjs/interpreter_map.cpp:
625         (KJS::InterpreterMap::computeHash): Use shared pointer hash.
626         * kjs/pointer_hash.h: Added.
627         (KJS::pointerHash): Pointer hash based on 32-bit mix and 64-bit mix hashes.
628         * kjs/protected_values.cpp:
629         (KJS::ProtectedValues::computeHash): Use shared pointer hash.
630         * kjs/ustring.cpp:
631         (KJS::UString::Rep::computeHash): Use SuperFastHash algorithm.
632
633 2005-06-22  Darin Adler  <darin@apple.com>
634
635         Change by Anders Carlsson.
636         Reviewed by me.
637
638         - fixed <http://bugzilla.opendarwin.org/show_bug.cgi?id=3294>
639           String.prototype.replace() fails with function as second param
640
641         * kjs/string_object.cpp: (replace): Added code to handle functions.
642
643         * tests/mozilla/expected.html: Updated since ecma_3/RegExp/regress-209067.js is fixed now.
644
645         * tests/mozilla/run-mozilla-tests: Fix a minor coding style issue that leads to a warning each
646         time we run the tests.
647
648 2005-06-21  Adele Peterson  <adele@apple.com>
649
650         rolling out fix for http://bugzilla.opendarwin.org/show_bug.cgi?id=3293, since it caused layout test failures.
651         fast/forms/element-by-name
652         fast/loader/loadInProgress
653
654         * ChangeLog:
655         * bindings/objc/objc_runtime.h:
656         * bindings/objc/objc_runtime.mm:
657         (ObjcFallbackObjectImp::hasProperty):
658         * bindings/runtime_array.cpp:
659         (RuntimeArrayImp::hasProperty):
660         * bindings/runtime_array.h:
661         * bindings/runtime_object.cpp:
662         (RuntimeObjectImp::hasProperty):
663         * bindings/runtime_object.h:
664         * kjs/array_instance.h:
665         * kjs/array_object.cpp:
666         (ArrayInstanceImp::hasProperty):
667         * kjs/function.cpp:
668         (KJS::FunctionImp::hasProperty):
669         (KJS::ActivationImp::hasProperty):
670         * kjs/function.h:
671         * kjs/object.cpp:
672         (KJS::ObjectImp::hasProperty):
673         * kjs/object.h:
674         * kjs/object_object.cpp:
675         (ObjectPrototypeImp::ObjectPrototypeImp):
676         (ObjectProtoFuncImp::call):
677         * kjs/object_object.h:
678         (KJS::ObjectProtoFuncImp::):
679         * kjs/string_object.cpp:
680         (StringInstanceImp::hasProperty):
681         * kjs/string_object.h:
682         * tests/mozilla/expected.html:
683
684 2005-06-21  Darin Adler  <darin@apple.com>
685
686         * JavaScriptCore.pbproj/project.pbxproj: Switched to a build rule rather than a build phase for
687         .y files -- this gets rid of the problem where modifying the .y file would not cause sufficient
688         compilation.
689
690         * kjs/grammar_wrapper.cpp: Removed.
691
692 2005-06-21  Adele Peterson  <adele@apple.com>
693
694         Patch from Anders Carlsson <andersca@mac.com>, reviewed by Darin.
695
696         Fixed: <http://bugzilla.opendarwin.org/show_bug.cgi?id=3450>
697         <rdar://problem/3881901> String.replace() method not working when regex pattern contains {n, m}
698
699         * pcre/pcre.c: (pcre_compile): Remember the last char length so it can be subtracted correctly if needed.
700
701 2005-06-21  Geoffrey Garen  <ggaren@apple.com>
702
703         - fixed <rdar://problem/4155532> 'delete' succeeds on functions
704         - fixed <rdar://problem/4155049> javascript function named as "opener" doesn't get called because of window.opener property
705         
706         Reviewed by cblu.
707
708         * kjs/nodes.cpp:
709         (FuncDeclNode::processFuncDecl): Functions now have DontDelete and Internal attributes set when appropriate.
710
711         Test cases:
712         * tests/mozilla/expected.html: Updated for one new success.
713         - see also test case added in WebCore.
714
715 2005-06-20  Maciej Stachowiak  <mjs@apple.com>
716
717         Reviewed by Darin(first pass) and Hyatt.
718
719         - fixed http://bugzilla.opendarwin.org/show_bug.cgi?id=3576
720         (roll in support for "const" keyword from KDE tree)
721         - make processVarDecls handle deletability of variables declared
722         in an eval block the same as evaluate would
723         - make eval() call processVarDecls - needed to match mozilla and
724         to make the second change testable
725
726         I started with the KDE implementation of const but I ended up changing it a bit
727         to avoid the use of a global variable. Now instead of the global variable it distinguishes
728         const and var at the grammar level so the appropriate node can know the right kind of
729         declaration.
730
731         Test cases:
732         * tests/mozilla/expected.html: Updated for one new test that is
733         failing - we used to bail on it entirely because it checks for
734         const support before starting.
735         - see also test cases added in WebCore
736
737         * kjs/grammar.y: Add rules for const declarations.
738         * kjs/keywords.table: Add const keyword.
739         * kjs/nodes.cpp:
740         (VarDeclNode::VarDeclNode): Add parameter.
741         (VarDeclNode::evaluate): Add const support.
742         (VarDeclNode::processVarDecls): Add const support.
743         (VarStatementNode::execute): Irrelevant change.
744         (ForInNode::ForInNode): Tell our variable node that it's a variable.
745         * kjs/nodes.h:
746         (KJS::VarDeclNode::): Add declaration of type enum, extra constructor parameter.
747         (KJS::VarStatementNode::VarStatementNode): Irrelevant change.
748         * kjs/function.cpp:
749         (KJS::GlobalFuncImp::call): Process var decls before evaluating.
750
751 2005-06-20  Maciej Stachowiak  <mjs@apple.com>
752
753         Patch from Mark Rowe <opendarwin.org@bdash.net.nz>, reviewed by me.
754
755         - fixed http://bugzilla.opendarwin.org/show_bug.cgi?id=3293
756         
757         Test cases added: 
758         * tests/mozilla/expected.html: Updated for two fixed tests.
759         - also added a layout test
760
761         * bindings/objc/objc_runtime.h:
762         * bindings/objc/objc_runtime.mm:
763         (ObjcFallbackObjectImp::hasOwnProperty):
764         * bindings/runtime_array.cpp:
765         (RuntimeArrayImp::hasOwnProperty):
766         * bindings/runtime_array.h:
767         * bindings/runtime_object.cpp:
768         (RuntimeObjectImp::hasOwnProperty):
769         * bindings/runtime_object.h:
770         * kjs/array_instance.h:
771         * kjs/array_object.cpp:
772         (ArrayInstanceImp::hasOwnProperty):
773         * kjs/function.cpp:
774         (KJS::FunctionImp::hasOwnProperty):
775         (KJS::ActivationImp::hasOwnProperty):
776         * kjs/function.h:
777         * kjs/object.cpp:
778         (KJS::ObjectImp::hasProperty):
779         (KJS::ObjectImp::hasOwnProperty):
780         * kjs/object.h:
781         (KJS::Object::hasOwnProperty):
782         * kjs/object_object.cpp:
783         (ObjectPrototypeImp::ObjectPrototypeImp):
784         (ObjectProtoFuncImp::call):
785         * kjs/object_object.h:
786         (KJS::ObjectProtoFuncImp::):
787         * kjs/string_object.cpp:
788         (StringInstanceImp::hasOwnProperty):
789         * kjs/string_object.h:
790
791 2005-06-18  Darin Adler  <darin@apple.com>
792
793         Reviewed by Eric Seidel.
794
795         * pcre/get.c: (pcre_get_substring): Fix some computations so this works for UTF-16.
796         This is unused in the current JavaScriptCore, but still good to fix.
797
798 2005-06-18  Darin Adler  <darin@apple.com>
799
800         Change by Finlay Dobbie.
801         Reviewed by me.
802
803         - fixed <http://bugzilla.opendarwin.org/show_bug.cgi?id=3331>
804           10.3.9 Build Failure: NSString may not respond to `+stringWithCString:encoding:'
805
806         * bindings/objc/WebScriptObject.mm: (-[WebScriptObject stringRepresentation]):
807         Undo change we did a while back to work around the gcc 3.3 compiler error.
808         It no longer seems to happen, and the workaround code was 10.4-specific.
809
810 2005-06-16  Geoffrey Garen  <ggaren@apple.com>
811
812         Fixed: <rdar://problem/4151759> 'delete' fails on variables declared inside 'eval' statements.
813
814         Reviewed by cblu.
815
816         * kjs/context.h:
817         (KJS::ContextImp::codeType): Added code type accessor for execution context objects.
818         * kjs/internal.cpp:
819         (ContextImp::ContextImp): Reflects change to ContextImp::codeType.
820         * kjs/nodes.cpp:
821         (VarDeclNode::evaluate): Added separate code path for variable declarations inside 'eval' statements.
822         * tests/mozilla/expected.html: Updated expected test results to reflect fix.
823
824 2005-06-14  Geoffrey Garen  <ggaren@apple.com>
825
826         Updated expected.html to reflect fix to <rdar://problem/4147745>.
827
828         Reviewed by cblu.
829
830         * tests/mozilla/expected.html:
831
832 2005-06-14  Geoffrey Garen  <ggaren@apple.com>
833
834         Fixed: <rdar://problem/4147745> JavaScript discards locally defined "arguments" property
835
836         No layout tests added because this change fixes existing tests:
837         ecma/ExecutionContexts/10.1.6.js
838         ecma_3/Function/regress-94506.js
839         js1_4/Functions/function-001.js
840
841         Reviewed by cblu.
842
843         * kjs/function.cpp:
844         (KJS::ActivationImp::get): get now checks for an "arguments" property defined in the local variable object
845         before trying to return the built-in arguments array.
846         
847         * kjs/function.h: ActivationImp::put no longer overrides ObjectImp::put
848
849 2005-06-10  Darin Adler  <darin@apple.com>
850
851         Change by Mark Rowe <opendarwin.org@bdash.net.nz>.
852         Reviewed by me.
853
854         - further improvements to exception file/line number fix
855
856         * kjs/nodes.h: Added setExceptionDetailsIfNeeded function.
857         * kjs/nodes.cpp: Updated macros to call the new setExceptionDetailsIfNeeded function.
858         (Node::setExceptionDetailsIfNeeded): Added.
859
860 2005-06-09  Darin Adler  <darin@apple.com>
861
862         Change by Mark Rowe <opendarwin.org@bdash.net.nz>
863         Reviewed by me.
864
865         * kjs/nodes.cpp: Get rid of unneeded this->.
866
867 2005-06-08  Maciej Stachowiak  <mjs@apple.com>
868
869         Change by Mark Rowe <opendarwin.org@bdash.net.nz>
870         Reviewed by me.
871
872         - fixed http://bugzilla.opendarwin.org/show_bug.cgi?id=3327
873         (Exception When Setting Style to Invalid Value Lacks Line/File Information)
874
875         * kjs/nodes.cpp: Include source file and line number when making exception in
876         KJS_CHECKEXCEPTIONVALUE.
877
878 2005-06-07  Darin Adler  <darin@apple.com>
879
880         Change by Toby Peterson <toby@opendarwin.org>.
881         Reviewed by me.
882
883         * JavaScriptCore.pbproj/project.pbxproj: Allow bison 2.0, which generates the file
884         with a different name.
885
886 2005-06-07  Darin Adler  <darin@apple.com>
887
888         Change by Toby Peterson <toby@opendarwin.org>.
889         Reviewed by me.
890
891         * kjs/grammar.y: Remove bogus extra line from grammar.y. Toby got this change from KDE KJS.
892
893 2005-06-06  Darin Adler  <darin@apple.com>
894
895         * tests/mozilla/run-mozilla-tests: Wrote a perl version of this so we don't require
896         the "jst" tool to run the tests.
897
898 2005-06-04  Darin Adler  <darin@apple.com>
899
900         Reviewed by Maciej.
901
902         - add libicu headers
903
904         * JavaScriptCore.pbproj/project.pbxproj: Added icu directory to header search path.
905
906         * icu/README: Added.
907         * icu/unicode/platform.h: Added.
908         * icu/unicode/uchar.h: Added.
909         * icu/unicode/uconfig.h: Added.
910         * icu/unicode/umachine.h: Added.
911         * icu/unicode/urename.h: Added.
912         * icu/unicode/utf.h: Added.
913         * icu/unicode/utf16.h: Added.
914         * icu/unicode/utf8.h: Added.
915         * icu/unicode/utf_old.h: Added.
916         * icu/unicode/utypes.h: Added.
917         * icu/unicode/uversion.h: Added.
918
919 2005-05-19  Darin Adler  <darin@apple.com>
920
921         Reviewed by Maciej.
922         
923         - turned off exceptions and RTTI; seems to cut JavaScriptCore code size by about 22%
924
925         * JavaScriptCore.pbproj/project.pbxproj: Turn off exceptions and RTTI for both
926         the framework and testkjs tool.
927
928 2005-05-18  Darin Adler  <darin@apple.com>
929
930         Reviewed by Maciej.
931
932         - got rid of code that depended on RTTI
933
934         * kjs/collector.cpp:
935         (KJS::className): Added. Gets class name in a KJS way, rather than a C++ RTTI way.
936         (KJS::Collector::rootObjectClasses): Use className instead of typeid names.
937
938 2005-05-18  Darin Adler  <darin@apple.com>
939
940         Reviewed by Maciej.
941
942         - fix a failure seen in the Mozilla JavaScript tests where a live object was garbage-collected
943           when the only reference to it was in an argList on the stack
944
945         * kjs/list.h: Moved the operator= function into the .cpp file since it's too big to be
946         a good choice to inline.
947         * kjs/list.cpp: (KJS::List::operator=): Moved this formerly-inline function into a separate
948         file and added missing code to update valueRefCount. It's the latter that fixes the bug.
949
950 2005-05-16  Darin Adler  <darin@apple.com>
951
952         Reviewed by Adele.
953
954         - fixed issues preventing us from compiling with newer versions of gcc 4.0
955
956         * kjs/ustring.cpp:
957         (KJS::operator==): Remove redundant and illegal KJS:: prefix on this function's definition.
958         (KJS::operator<): Ditto.
959         (KJS::compare): Ditto.
960
961 2005-05-09  Darin Adler  <darin@apple.com>
962
963         Reviewed by John.
964
965         - turn on conservative GC unconditionally and start on SPI changes to
966           eliminate the now-unneeded smart pointers since we don't ref count any more
967
968         * kjs/value.h: Removed macros to turn conservative GC on and off.
969         Removed ref and deref functions.
970         (KJS::ValueImp::ValueImp): Removed non-conservative-GC code path.
971         (KJS::ValueImp::isUndefined): Added. New SPI to make it easier to deal with ValueImp directly.
972         (KJS::ValueImp::isNull): Ditto.
973         (KJS::ValueImp::isBoolean): Ditto.
974         (KJS::ValueImp::isNumber): Ditto.
975         (KJS::ValueImp::isString): Ditto.
976         (KJS::ValueImp::isObject): Ditto.
977         (KJS::Value::Value): Removed non-conservative-GC code path and made constructor no
978         longer explicit so we can quietly create Value wrappers from ValueImp *; inexpensive with
979         conservative GC and eases the transition.
980         (KJS::Value::operator ValueImp *): Added. Quietly creates ValueImp * from Value.
981         (KJS::ValueImp::marked): Removed non-conservative-GC code path.
982
983         * kjs/value.cpp:
984         (KJS::ValueImp::mark): Removed non-conservative-GC code path.
985         (KJS::ValueImp::isUndefinedOrNull): Added. New SPI to make it easier to deal with ValueImp directly.
986         (KJS::ValueImp::isBoolean): Ditto.
987         (KJS::ValueImp::isNumber): Ditto.
988         (KJS::ValueImp::isString): Ditto.
989         (KJS::ValueImp::asString): Ditto.
990         (KJS::ValueImp::isObject): Ditto.
991         (KJS::undefined): Ditto.
992         (KJS::null): Ditto.
993         (KJS::boolean): Ditto.
994         (KJS::string): Ditto.
995         (KJS::zero): Ditto.
996         (KJS::one): Ditto.
997         (KJS::two): Ditto.
998         (KJS::number): Ditto.
999
1000         * kjs/object.h: Made constructor no longer explicit so we can quietly create Object
1001         wrappers from ObjectImp *; inexpensive with conservative GC and eases the transition.
1002         (KJS::Object::operator ObjectImp *): Added. Quietly creates ObjectImp * from Object.
1003         (KJS::ValueImp::isObject): Added. Implementation of new object-related ValueImp function.
1004         (KJS::ValueImp::asObject): Ditto.
1005
1006         * kjs/object.cpp:
1007         (KJS::ObjectImp::setInternalValue): Remove non-conservative-GC code path.
1008         (KJS::ObjectImp::putDirect): Ditto.
1009         (KJS::error): Added. Function in the new SPI style to create an error object.
1010
1011         * kjs/internal.h: Added the new number-constructing functions as friends of NumberImp.
1012         There may be a more elegant way to do this later; what's important now is the new SPI.
1013
1014         * kjs/collector.h:  Remove non-conservative-GC code path and also take out some
1015         unneeded APPLE_CHANGES.
1016
1017         * bindings/runtime_root.cpp:
1018         (KJS::Bindings::addNativeReference): Remove non-conservative-GC code path.
1019         (KJS::Bindings::removeNativeReference): Ditto.
1020         (RootObject::removeAllNativeReferences): Ditto.
1021         * bindings/runtime_root.h:
1022         (KJS::Bindings::RootObject::~RootObject): Ditto.
1023         (KJS::Bindings::RootObject::setRootObjectImp): Ditto.
1024         * kjs/collector.cpp:
1025         (KJS::Collector::allocate): Ditto.
1026         (KJS::Collector::collect): Ditto.
1027         (KJS::Collector::numGCNotAllowedObjects): Ditto.
1028         (KJS::Collector::numReferencedObjects): Ditto.
1029         (KJS::Collector::rootObjectClasses): Ditto.
1030         * kjs/internal.cpp:
1031         (NumberImp::create): Ditto.
1032         (InterpreterImp::globalInit): Ditto.
1033         (InterpreterImp::globalClear): Ditto.
1034         * kjs/list.cpp:
1035         (KJS::List::markProtectedLists): Ditto.
1036         (KJS::List::clear): Ditto.
1037         (KJS::List::append): Ditto.
1038         * kjs/list.h:
1039         (KJS::List::List): Ditto.
1040         (KJS::List::deref): Ditto.
1041         (KJS::List::operator=): Ditto.
1042         * kjs/protect.h:
1043         (KJS::gcProtect): Ditto.
1044         (KJS::gcUnprotect): Ditto.
1045
1046 2005-05-09  Chris Blumenberg  <cblu@apple.com>
1047
1048         Workaround gcc 3.3 internal compiler errors.
1049
1050         Reviewed by darin.
1051
1052         * bindings/objc/WebScriptObject.mm:
1053         (-[WebScriptObject stringRepresentation]): call [NSString stringWithCString:encoding] rather than using @""
1054
1055 2005-05-09  Darin Adler  <darin@apple.com>
1056
1057         * Makefile.am: Don't set up PBXIntermediatesDirectory explicitly;
1058         Not needed to make builds work, spews undesirable error messages too.
1059
1060 2005-05-06  Darin Adler  <darin@apple.com>
1061
1062         Reviewed by Maciej.
1063
1064         - make building multiple trees with make work better
1065
1066         * Makefile.am: Set up Xcode build directory before invoking xcodebuild.
1067
1068 2005-05-04  Maciej Stachowiak  <mjs@apple.com>
1069
1070         Reviewed by Darin.
1071
1072         <rdar://problem/4086570> Crash in JavaScriptCore with RSS Visualizer
1073         
1074         * kjs/internal.cpp:
1075         (InterpreterImp::mark): mark staticNaN, it is usually protected by the Number
1076         prototype but there is a small window where it can get collected.
1077
1078 2005-05-04  Darin Adler  <darin@apple.com>
1079
1080         Reviewed by Dave Hyatt.
1081
1082         - another gcc-4.0-related fix
1083
1084         * bindings/runtime_root.h: Take off extra namespace prefixes that apparently cause problems
1085         compiling with gcc 4.0, although I have not observed the problems.
1086
1087 2005-05-04  Darin Adler  <darin@apple.com>
1088
1089         Reviewed by Dave Hyatt.
1090
1091         - fixed build rules to match other projects
1092
1093         * JavaScriptCore.pbproj/project.pbxproj: Set deployment target to 10.3 in the build styles.
1094         When built without a build style (by Apple B&I) we want to get the target from the
1095         environment. But when built with a build style (by Safari engineers and others), we want
1096         to use 10.3.
1097
1098         * Makefile.am: Took out extra parameters that make command-line building different from
1099         Xcode building. Now that this is fixed, you should not get a full rebuild if you switch
1100         from command line to Xcode or back.
1101
1102 2005-05-04  Maciej Stachowiak  <mjs@apple.com>
1103
1104         - revert presumably accidental change to mozilla JS test expected results, this
1105         was making the tests fail.
1106
1107         * tests/mozilla/expected.html:
1108
1109 2005-05-03  Richard Williamson   <rjw@apple.com>
1110
1111         Fixed <rdar://problem/4102644> Crash in LiveConnect below KJS::Bindings::JavaInstance::stringValue() const
1112
1113         Correctly handle accessing nil objects from a Java object array.
1114
1115         Reviewed by John.
1116
1117         * bindings/jni/jni_runtime.cpp:
1118         (JavaArray::valueAt):
1119
1120 2005-05-01  Darin Adler  <darin@apple.com>
1121
1122         - move to Xcode native targets and stop checking in generated files
1123
1124         * JavaScriptCore.pbproj/project.pbxproj: Updated to use native targets and generate all the generated
1125         files, so we don't have to check them in any more.
1126         * Info.plist: Added. Native targets use a separate file for this.
1127
1128         * Makefile.am: Removed pcre and kjs SUBDIRS. Also removed code that deleted the embedded copy of this
1129         framework, since we haven't been embedding it for some time.
1130
1131         * kjs/grammar_wrapper.cpp: Added. Shell used to compile grammar.cpp since we can't add a generated file
1132         easily to the list of files to be compiled.
1133
1134         * kjs/.cvsignore: Removed.
1135         * kjs/Makefile.am: Removed.
1136         * kjs/array_object.lut.h: Removed.
1137         * kjs/date_object.lut.h: Removed.
1138         * kjs/grammar.cpp: Removed.
1139         * kjs/grammar.cpp.h: Removed.
1140         * kjs/grammar.h: Removed.
1141         * kjs/lexer.lut.h: Removed.
1142         * kjs/math_object.lut.h: Removed.
1143         * kjs/number_object.lut.h: Removed.
1144         * kjs/string_object.lut.h: Removed.
1145         * pcre/.cvsignore: Removed.
1146         * pcre/Makefile.am: Removed.
1147         * pcre/chartables.c: Removed.
1148
1149 2005-04-28  Darin Adler  <darin@apple.com>
1150
1151         Reviewed by Dave Harrison.
1152
1153         - fixed problems preventing us from compiling with gcc 4.0
1154
1155         * JavaScriptCore.pbproj/project.pbxproj: Removed -Wmissing-prototypes from
1156         WARNING_CPLUSPLUSFLAGS since it's now a C-only warning.
1157
1158         * bindings/jni/jni_jsobject.cpp:
1159         (JSObject::getSlot): Changed some %d to %ld where the parameters where long ints.
1160         (JSObject::setSlot): Ditto.
1161         * bindings/jni/jni_utility.cpp:
1162         (KJS::Bindings::getJavaVM): Ditto.
1163         (KJS::Bindings::getJNIEnv): Ditto.
1164         * bindings/objc/objc_utility.mm: Fixed include of <JavascriptCore/internal.h> that needed the
1165         letter "S" capitalized.
1166         * kjs/bool_object.cpp: (BooleanProtoFuncImp::call): Rearranged how this function returns to
1167         avoid incorrect gcc 4.0 warning.
1168         * kjs/collector.cpp: (KJS::Collector::markStackObjectsConservatively): Changed code to check
1169         the alignment of the passed-in pointers to only require pointer-level alignment, not 8-byte alignment.
1170         Prevents a crash on garbage collect when compiled with gcc 4.0.
1171         * kjs/nodes.cpp:
1172         (WhileNode::execute): Added a redundant return after an infinite loop to work around incorrect gcc 4.0 warning.
1173         (ForNode::execute): Ditto.
1174         (SwitchNode::execute):Rearranged how this function returns to avoid incorrect gcc 4.0 warning.
1175         (LabelNode::execute): Ditto.
1176         * kjs/string_object.cpp: (replace): Ditto.
1177
1178 2005-04-26  Richard Williamson   <rjw@apple.com>
1179
1180         Fixed <rdar://problem/4098713> Scripting API is incompatible with Mozilla
1181         
1182         We were incompatible with Mozilla's implementation of the scripting APIs in
1183         two ways:
1184
1185         Their NPN_SetException has the following signature:
1186
1187             void NPN_SetException(NPObject *npobj, const NPUTF8 *message);
1188
1189         ours has:
1190
1191             void NPN_SetException (NPObject * npobj, const NPString *message);
1192
1193         Also, they expect the string returned from NPN_UTF8FromIdentifier() to be freed by caller.
1194         We do not.
1195
1196         I changed both behaviors to match Mozilla.
1197
1198         Reviewed by Chris.
1199
1200         * bindings/NP_jsobject.cpp:
1201         (_NPN_SetException):
1202         * bindings/npruntime.cpp:
1203         (_NPN_UTF8FromIdentifier):
1204         (_NPN_IntFromIdentifier):
1205         (_NPN_SetExceptionWithUTF8):
1206         * bindings/npruntime.h:
1207         * bindings/npruntime_impl.h:
1208
1209 2005-04-26  Maciej Stachowiak  <mjs@apple.com>
1210
1211         Reviewed by Chris.
1212
1213         <rdar://problem/4092136> reproducible crash in KJS::kjs_fast_realloc loading maps.google.com
1214         
1215         * kjs/string_object.cpp:
1216         (StringObjectFuncImp::call): Allocate adopted ustring buffer properly.
1217
1218 2005-04-22  Darin Adler  <darin@apple.com>
1219
1220         Reviewed by Maciej.
1221
1222         * kjs/ustring.cpp: (KJS::UString::UTF8String): Fix off-by-one error in surrogate pair logic.
1223
1224 2005-04-22  Darin Adler  <darin@apple.com>
1225
1226         Reviewed by John.
1227
1228         - fixed <rdar://problem/4090046> JavaScript throw statement causes parse error when no semicolon is present
1229
1230         * kjs/grammar.y: Added an additional rule for throw like the ones we have for all the other semicolon rules.
1231         Not sure why we missed this one earlier.
1232
1233         * kjs/grammar.cpp: Regenerated.
1234
1235 === JavaScriptCore-412.1 ===
1236
1237 2005-04-20  Darin Adler  <darin@apple.com>
1238
1239         Reviewed by Maciej.
1240
1241         - speedups, total 12% on JavaScript iBench
1242
1243         I ran the benchmark under Shark and followed its advice a lot, mainly.
1244
1245         * kjs/collector.cpp:
1246         (KJS::Collector::allocate): Take out special case for 0; costing speed but unexercised.
1247         Use numLiveObjectsAtLastCollect instead of numAllocationsSinceLastCollect so we don't
1248         have to bump it each time we call allocate. Put numLiveObjects into a local variable to
1249         cut down on global variable accesses. Make "next" cell pointer be a byte offset rather
1250         than a pointer so we don't need a special case for NULL. Allow freeList to point to some
1251         bogus item when the entire block is full rather than going out of our way to make it
1252         point to NULL.
1253         (KJS::Collector::markProtectedObjects): Get table size and pointer into locals outside
1254         the loop to avoid re-loading them over and over again.
1255         (KJS::Collector::collect): Put numLiveObjects into a local variable to cut down on global
1256         variable accesses. Make "next" cell pointer be a byte offset as above. Put numLiveObjects
1257         into a local variable to cut down on global variable accesses. Set numLiveObjectsAtLastCollect
1258         rather than numAllocationsSinceLastCollect.
1259         (KJS::Collector::numReferencedObjects): Get table size and pointer into locals outside
1260         the loop to avoid re-loading them over and over again.
1261         (KJS::Collector::rootObjectClasses): Ditto.
1262
1263         * kjs/internal.h: Make Value be a friend of NumberImp so it can construct number objects
1264         directly, avoiding the conversion from Number to Value.
1265
1266         * kjs/internal.cpp: (StringImp::toObject): Don't use Object::dynamicCast, because we know
1267         the thing is an object and we don't want to do all the extra work; just cast directly.
1268
1269         * kjs/list.cpp: (KJS::List::List): Construct valueRefCount in a way that avoids the need for
1270         a branch -- in the hot case this just meant avoiding checking a variable we just set to false.
1271
1272         * kjs/lookup.cpp: (keysMatch): Marked this inline.
1273
1274         * kjs/nodes.cpp: Disabled KJS_BREAKPOINT, to avoid calling hitStatement all the time.
1275         (BooleanNode::evaluate): Make a Value directly, rather than making a Boolean which is converted
1276         into a Value.
1277         (NumberNode::evaluate): Ditto.
1278         (StringNode::evaluate): Ditto.
1279         (ArrayNode::evaluate): Ditto.
1280         (FunctionCallNode::evaluate): Use new inline baseIfMutable to avoid unnecessary getBase function.
1281         Also just use a pointer for func, rather than an Object.
1282         (PostfixNode::evaluate): Change code so that it doesn't make an excess Number, and so that it
1283         passes a "known to be integer" boolean in, often avoiding a conversion from floating point to
1284         integer and back.
1285         (DeleteNode::evaluate): Make a Value directly.
1286         (TypeOfNode::evaluate): Use new inline baseIfMutable and make Value directly.
1287         (PrefixNode::evaluate): Change code so that it doesn't make an excess Number, and so that it
1288         passes a "known to be integer" boolean in, often avoiding a conversion from floating point to
1289         integer and back.
1290         (UnaryPlusNode::evaluate): Make a Value directly.
1291         (NegateNode::evaluate): Change code so that it doesn't make an excess Number, and so that it
1292         passes a "known to be integer" boolean in, often avoiding a conversion from floating point to
1293         integer and back.
1294         (BitwiseNotNode::evaluate): Make a Value directly.
1295         (LogicalNotNode::evaluate): Ditto.
1296         (ShiftNode::evaluate): Don't convert to a double before making a Value.
1297         (RelationalNode::evaluate): Make a Value directly.
1298         (EqualNode::evaluate): Ditto.
1299         (BitOperNode::evaluate): Ditto.
1300         (AssignNode::evaluate): Make a Value directly. Change code so that it passes a "known to be integer"
1301         boolean in, often avoiding a conversion from floating point to integer and back.
1302         (VarDeclNode::evaluate): Make a Value directly.
1303         (ForNode::execute): Remove unused local variable.
1304
1305         * kjs/operations.h:
1306         (KJS::isNaN): Inlined.
1307         (KJS::isInf): Ditto.
1308         (KJS::isPosInf): Ditto.
1309         (KJS::isNegInf): Ditto.
1310
1311         * kjs/operations.cpp: Change isNaN, isInf, isPosInf, and isNegInf to be inlines.
1312         (KJS::equal): Rewrite to avoid creating values and recursing back into the function.
1313         (KJS::relation): Rearranged code so that we don't need explicit isNaN checks.
1314         (KJS::add): Changed code to make Value directly, and so that it passes a "known to be integer"
1315         boolean in, often avoiding a conversion from floating point to integer and back.
1316         (KJS::mult): Ditto.
1317
1318         * kjs/property_map.cpp:
1319         (KJS::PropertyMap::~PropertyMap): Get size and entries pointer outside loop to avoid
1320         re-getting them inside the loop.
1321         (KJS::PropertyMap::clear): Ditto. Clear value pointer in addition to key, so we can just
1322         look at the value pointer in the mark function.
1323         (KJS::PropertyMap::get): Get sizeMask and entries pointer outside loop to avoid
1324         re-getting them inside the loop.
1325         (KJS::PropertyMap::put): Ditto.
1326         (KJS::PropertyMap::insert): Ditto.
1327         (KJS::PropertyMap::remove): Ditto.
1328         (KJS::PropertyMap::mark): Get size and entries pointer outside loop to avoid
1329         re-getting them inside the loop. Don't bother checking key for 0, since we already have
1330         to check value for 0. (Also had to change clear() to set value to 0.)
1331         (KJS::PropertyMap::addEnumerablesToReferenceList): Get size and entries pointer outside
1332         loop to avoid re-getting them inside the loop.
1333         (KJS::PropertyMap::addSparseArrayPropertiesToReferenceList): Ditto.
1334         (KJS::PropertyMap::save): Ditto.
1335
1336         - other changes
1337
1338         * kjs/protected_values.h: Remove unneeded class name qualifiers.
1339
1340         * kjs/reference.h:
1341         (KJS::Reference::baseIfMutable): New inline function: replaces isMutable().
1342         (KJS::Reference::Reference): Inlined.
1343         * kjs/reference.cpp:
1344         (KJS::Reference::getValue): Rewrite to not use getBase.
1345         (KJS::Reference::putValue): Ditto.
1346         (KJS::Reference::deleteValue): Dittol
1347
1348         * kjs/simple_number.h:
1349         (KJS::SimpleNumber::integerFits): Added. For use when the parameter is known to be integral.
1350
1351         * kjs/string_object.cpp: (StringProtoFuncImp::call): Create the number without first converting
1352         to double in various cases that involve integers.
1353
1354         * kjs/ustring.h:
1355         (KJS::UString::attach): Inlined.
1356         (KJS::UString::release): Inlined.
1357         * kjs/ustring.cpp:
1358         (KJS::UString::find): Get first character outside the loop instead of re-fetching it each time.
1359
1360         * kjs/value.cpp:
1361         (Value::Value): Added overloads for all the various specific types of values, so you don't have
1362         to convert from, say, Number to Value, just to create one.
1363         (Number::Number): Added an overload that takes a boolean to indicate the number is already
1364         known to be an integer.
1365
1366         * kjs/value.h: Added more Value constructors, added a version of toNumber that returns
1367         a boolean to indicate if the number is known to be an integer (because it was a "simple number").
1368         (KJS::ValueImp::marked): Inlined.
1369         (KJS::ValueImp::dispatchType): Inlined.
1370         (KJS::ValueImp::dispatchToPrimitive): Inlined.
1371         (KJS::ValueImp::dispatchToBoolean): Inlined.
1372         (KJS::ValueImp::dispatchToNumber): Inlined.
1373         (KJS::ValueImp::dispatchToString): Inlined.
1374         (KJS::ValueImp::dispatchToUInt32): Inlined.
1375
1376 2005-04-14  Maciej Stachowiak  <mjs@apple.com>
1377
1378         - make fast_malloc.h a private header, not project
1379
1380         * JavaScriptCore.pbproj/project.pbxproj:
1381
1382 2005-04-12  Maciej Stachowiak  <mjs@apple.com>
1383
1384         Reviewed by Richard.
1385
1386         <rdar://problem/4089734> JavaScript iBench can be sped up ~10% with custom allocator
1387
1388         - use custom single-threaded malloc for all non-GC JavaScriptCore
1389         allocations, for a 9.1% speedup on JavaScript iBench
1390         
1391         * JavaScriptCore.pbproj/project.pbxproj:
1392         * kjs/collector.cpp:
1393         (KJS::Collector::allocate): Use dlmalloc to allocate the collector blocks.
1394         (KJS::Collector::collect): And dlfree to free it.
1395         * kjs/fast_malloc.cpp: Added, just the standard dlmalloc here.
1396         * kjs/fast_malloc.h: Added. Declarations for the functions. Also added a handy
1397         macro to give a class custom operator new/delete
1398         * kjs/identifier.cpp:
1399         (KJS::Identifier::add): Use dlmalloc/dlfree.
1400         * kjs/nodes.h: make nodes KJS_FAST_ALLOCATED.
1401         * kjs/property_map.cpp:
1402         (KJS::PropertyMap::~PropertyMap): Use dlmalloc/dlfree.
1403         (KJS::PropertyMap::rehash): ditto
1404         * kjs/scope_chain.h:
1405         * kjs/ustring.cpp:
1406         (KJS::UString::Rep::createCopying): New named constructor that copies a passed-in
1407         buffer, to hide allocation details from webcore.
1408         (KJS::UString::UString): use createCopying when appropriate.
1409         (KJS::UString::Rep::destroy): Use dlmalloc/dlfree.
1410         (KJS::UString::expandedSize): likewise
1411         (KJS::UString::expandCapacity): likewise
1412         (KJS::UString::expandPreCapacity): likewise
1413         (KJS::UString::spliceSubstringsWithSeparators): likewise
1414         (KJS::UString::append): likewise
1415         (KJS::UString::operator=): likewise
1416         (KJS::UString::detach): likewise
1417         * kjs/ustring.h: make UString and UString::Rep KJS_FAST_ALLOCATED.
1418
1419 2005-04-11  Maciej Stachowiak  <mjs@apple.com>
1420
1421         Reviewed by John.
1422
1423         <rdar://problem/4086819> Avoid using protect count hash table so much for 5.6% JS iBench speedup
1424
1425         - Avoid using protected values hash for the two most common cases
1426         - Bump up ListImp high water mark, new testing shows 508 ListImps are
1427         created during JS iBench.
1428
1429         Net result is a 5.6% speedup on JavaScript iBench
1430         
1431         * kjs/collector.cpp:
1432         (KJS::Collector::collect): mark protected lists as appropriate.
1433         * kjs/context.h:
1434         * kjs/list.cpp:
1435         (KJS::ListImp::markValues): Moved implementation from List::markValues
1436         (KJS::List::markProtectedLists): Implemented - scan pool and overflow
1437         list.
1438         (KJS::allocateListImp): link lists outside the pool into a separate
1439         doubly linked list to be able to mark protected lists
1440         (KJS::deallocateListImp): do the corresponding delinking
1441         (KJS::List::derefValues): do nothing in conservative GC mode
1442         (KJS::List::refValues): do nothing in conservative GC mode
1443         (KJS::List::markValues): call ListImp version
1444         (KJS::List::append):
1445         * kjs/list.h:
1446
1447 === Safari-412 ===
1448
1449 === Safari-411 ===
1450
1451 === Safari-410 ===
1452
1453 === Safari-409 ===
1454
1455 === Safari-408 ===
1456
1457 === Safari-407 ===
1458
1459 2005-03-16  Jens Alfke  <jens@apple.com>
1460
1461         Reviewed by Kevin.
1462
1463         Fix for <rdar://problem/4025212> "REGRESSION (163-164): search not performed correctly; united.com"
1464         JavaScript unescape("") was returning a messed-up String object that appeared identical to an empty string, but would in some cases act as 'null' when passed to native functions, in this case the Option() constructor.
1465         In the implementation of unescape, the UString holding the result was not initialized to "", so it started out as a null string. If nothing was appended to it, it remained null, resulting in a JavaScript String object with some bad behaviors (namely, converting it to a DOMStringImpl results in a NULL pointer.)
1466         Darin says this regression occurred when we replaced our own implementation of unescape() with code from KJS.
1467
1468         * kjs/function.cpp:
1469         (KJS::GlobalFuncImp::call):
1470
1471 2005-03-15  Richard Williamson   <rjw@apple.com>
1472
1473         Fixed <rdar://problem/4053276> WebScripting protocol in WebKit cannot convert Boolean in Javascript to BOOL in Objective-C
1474
1475         Added JavaScript boolean to type that can be converted to
1476         ObjC scalar parameters.
1477
1478         Reviewed by Ken Kocienda.
1479
1480         * bindings/objc/objc_utility.mm:
1481         (KJS::Bindings::convertValueToObjcValue):
1482
1483 === Safari-406 ===
1484
1485 === Safari-405 ===
1486
1487 === Safari-403 ===
1488
1489 === Safari-402 ===
1490
1491 === Safari-401 ===
1492
1493 === Safari-400 ===
1494
1495 === Safari-188 ===
1496
1497 2005-02-21  Darin Adler  <darin@apple.com>
1498
1499         * kjs/date_object.cpp: (timetUsingCF): Fixed indenting.
1500
1501 2005-02-17  Richard Williamson   <rjw@apple.com>
1502
1503         Fixed <rdar://problem/4003251> Safari crashed at www.icelandair.com in LiveConnect code converting a Java object to a string
1504
1505         Added nil check.
1506
1507         Reviewed by John Sullivan.
1508
1509         * bindings/jni/jni_runtime.cpp:
1510         (JavaField::valueFromInstance):
1511
1512 === Safari-187 ===
1513
1514 2005-02-11  Richard Williamson   <rjw@apple.com>
1515
1516         Fixed <rdar://problem/3985118> DOM objects not being marshaled on JS->native calls
1517
1518         Re-factored how 'native' wrappers for JS objects are created.  The interpreter now
1519         creates these wrappers.  The WebCore subclass of the interpreter now overrides
1520         createLanguageInstanceForValue() and creates a DOM ObjC wrapper for DOM objects.
1521
1522         Reviewed by Ken.
1523
1524         * bindings/c/c_utility.cpp:
1525         (convertValueToNPVariant):
1526         * bindings/jni/jni_instance.cpp:
1527         (JavaInstance::invokeMethod):
1528         * bindings/jni/jni_objc.mm:
1529         (KJS::Bindings::dispatchJNICall):
1530         * bindings/jni/jni_runtime.cpp:
1531         (JavaField::valueFromInstance):
1532         (JavaArray::valueAt):
1533         * bindings/objc/WebScriptObject.mm:
1534         (-[WebScriptObject _setExecutionContext:KJS::Bindings::]):
1535         (+[WebScriptObject _convertValueToObjcValue:KJS::originExecutionContext:Bindings::executionContext:Bindings::]):
1536         * bindings/objc/WebScriptObjectPrivate.h:
1537         * bindings/objc/objc_utility.h:
1538         * bindings/objc/objc_utility.mm:
1539         (KJS::Bindings::convertObjcValueToValue):
1540         (KJS::Bindings::createObjcInstanceForValue):
1541         * bindings/runtime.cpp:
1542         (Instance::createBindingForLanguageInstance):
1543         (Instance::createRuntimeObject):
1544         (Instance::createLanguageInstanceForValue):
1545         * bindings/runtime.h:
1546         * kjs/interpreter.cpp:
1547         (Interpreter::createLanguageInstanceForValue):
1548         * kjs/interpreter.h:
1549
1550 === Safari-186 ===
1551
1552 2005-02-10  Darin Adler  <darin@apple.com>
1553
1554         "Reviewed" by Richard (he told me the file was obsolete).
1555
1556         - got rid of an obsolete file
1557
1558         * bindings/npsap.h: Removed.
1559
1560 === Safari-185 ===
1561
1562 === Safari-183 ===
1563
1564 2005-02-03  Richard Williamson   <rjw@apple.com>
1565
1566         Fixed <rdar://problem/3972905> CrashTracer: ...36 crashes at com.apple.WebCore: khtml::CSSStyleSelector::applyDeclarations + 120
1567
1568         Revert to old (and correct) behavior of returning runtime object
1569         when passed as a parameter, rather than it's corresponding DOM
1570         object.
1571
1572         Reviewed by Chris.
1573
1574         * bindings/objc/WebScriptObject.mm:
1575         (+[WebScriptObject _convertValueToObjcValue:KJS::originExecutionContext:Bindings::executionContext:Bindings::]):
1576
1577 === Safari-182 ===
1578
1579 2005-01-28  Richard Williamson   <rjw@apple.com>
1580
1581         Fixed <rdar://problem/3980389> JavaScript bindings access incorrect runtime object
1582
1583         Only use special 'back door' property to get the runtime object if thisObj isn't
1584         already a runtime object.
1585
1586         <gratuitous> Cleaned up a couple of strcmp on ClassInfo name.  Used == on
1587         ClassInfo pointer instead.
1588
1589         Reviewed by Chris.
1590
1591         * bindings/c/c_utility.cpp:
1592         (convertValueToNPVariant):
1593         * bindings/objc/WebScriptObject.mm:
1594         (+[WebScriptObject _convertValueToObjcValue:KJS::originExecutionContext:Bindings::executionContext:Bindings::]):
1595         * bindings/runtime_method.cpp:
1596         (RuntimeMethodImp::call):
1597
1598 === Safari-181 ===
1599
1600 2005-01-26  Richard Williamson   <rjw@apple.com>
1601
1602         Fixed <rdar://problem/3972522> (179-180) 40% slowdown on iBench JavaScript test
1603
1604         I added a member variable to ObjectImp.  This changed it's size and consequently
1605         hampered the optimizations built into the garbage collector.  Objects no longer
1606         fit within the allocators cell size, and thus allocation fell back to a slower
1607         allocator.
1608
1609         As a result of this fix I also dramatically cleaned up how runtime objects are
1610         accessed.  The path mostly *removes* code.
1611         
1612         Reviewed by Chris.
1613
1614         * bindings/runtime_method.cpp:
1615         (RuntimeMethodImp::call):
1616         * bindings/runtime_object.cpp:
1617         (RuntimeObjectImp::get):
1618         (RuntimeObjectImp::put):
1619         (RuntimeObjectImp::canPut):
1620         (RuntimeObjectImp::hasProperty):
1621         (RuntimeObjectImp::defaultValue):
1622         * bindings/runtime_object.h:
1623         * kjs/object.cpp:
1624         (KJS::ObjectImp::ObjectImp):
1625         * kjs/object.h:
1626
1627 2005-01-20  Darin Adler  <darin@apple.com>
1628
1629         Reviewed by me, changes by Han Ming Ong.
1630
1631         - <rdar://problem/3964302> SWB: A few files need to be updated to be compilable under GCC 4.0
1632
1633         * bindings/objc/WebScriptObjectPrivate.h: Make members public.
1634         * kjs/lookup.h: Change "value.h" to "object.h" because we need KJS::Object to compile a template.
1635
1636 2005-01-20  Richard Williamson   <rjw@apple.com>
1637
1638         Fixed <rdar://problem/3964634> undefined property value from binding seems to evaluate to true in an if statement
1639
1640         The comprehensive fix for this problem requires new API, as described in 3965326.  However,
1641         given that we can't add new API at this point, the 'ObjcFallbackObjectImp' will behave
1642         like and Undefined object if  invokeUndefinedMethodFromWebScript:withArguments: isn't
1643         implemented on the bound object.
1644
1645         Reviewed by Chris.
1646
1647         * bindings/objc/objc_runtime.h:
1648         * bindings/objc/objc_runtime.mm:
1649         (ObjcFallbackObjectImp::type):
1650         (ObjcFallbackObjectImp::implementsCall):
1651         (ObjcFallbackObjectImp::toBoolean):
1652         * bindings/testbindings.mm:
1653         (+[MyFirstInterface isSelectorExcludedFromWebScript:]):
1654         (+[MyFirstInterface isKeyExcludedFromWebScript:]):
1655
1656 === Safari-180 ===
1657
1658 2005-01-19  Richard Williamson   <rjw@apple.com>
1659
1660         Fixed <rdar://problem/3853676> Browser Crash when accessing CCWeb Progress Page - KJS::Bindings::convertValueToJValue
1661
1662         Fixed the following problems with LiveConnect that are demonstrated by the application
1663         described in 3853676.
1664
1665         1.  If a nil object is passed in an array from Java to JavaScript we will crash.
1666         2.  We sometimes will incorrectly attempt to access a generic JavaScript as a Java runtime object wrapper.
1667         3.  We will sometimes fail to find the correct static method ID.
1668
1669         Reviewed by Maciej.
1670
1671         * bindings/jni/jni_jsobject.cpp:
1672         (JSObject::convertJObjectToValue):
1673         (JSObject::listFromJArray):
1674         * bindings/jni/jni_runtime.cpp:
1675         (JavaField::valueFromInstance):
1676         (JavaField::setValueToInstance):
1677         * bindings/jni/jni_utility.cpp:
1678         (KJS::Bindings::getMethodID):
1679         (KJS::Bindings::convertValueToJValue):
1680         * bindings/runtime_array.h:
1681
1682 2005-01-18  Richard Williamson   <rjw@apple.com>
1683
1684         Fixed several issues all arising from analysis of plugin detection code at ifilm.com:
1685
1686         Fixed <rdar://problem/3958592> can't script plug-ins if plug-in is invoked with <object> element instead of <embed>
1687         Fixed <rdar://problem/3958597> <object> elements with IDs do not show up as named properties of the document
1688         Fixed <rdar://problem/3960973> DOM objects for plugin elements are not accessible
1689         Fixed <rdar://problem/3958601> need an additional class ID in WebCore for the Real plug-in
1690
1691         We now support accessing scriptable plugin objects that are specified with <applet>, <embed>, or <object>
1692         tags.  Also, if any of these elements are named they can be accessed from the document or window objects.
1693         Finally, DOM methods are properties will be forwarded appropriately for the plugin's root scriptable object.
1694
1695         Reviewed by Chris.
1696
1697         * bindings/objc/objc_instance.h:
1698         * bindings/objc/objc_instance.mm:
1699         (ObjcInstance::supportsSetValueOfUndefinedField):
1700         * bindings/runtime.h:
1701         (KJS::Bindings::Instance::supportsSetValueOfUndefinedField):
1702         * bindings/runtime_object.cpp:
1703         (RuntimeObjectImp::RuntimeObjectImp):
1704         (RuntimeObjectImp::get):
1705         (RuntimeObjectImp::put):
1706         (RuntimeObjectImp::canPut):
1707         (RuntimeObjectImp::hasProperty):
1708         (RuntimeObjectImp::defaultValue):
1709         * bindings/runtime_object.h:
1710         (KJS::RuntimeObjectImp::fallbackObject):
1711         * kjs/object.cpp:
1712         (KJS::ObjectImp::ObjectImp):
1713         * kjs/object.h:
1714         (KJS::ObjectImp::forwardingScriptMessage):
1715         (KJS::ObjectImp::setForwardingScriptMessage):
1716
1717 2005-01-18  Richard Williamson   <rjw@apple.com>
1718
1719         Back out a change that was incorrectly committed yesterday.
1720
1721         Reviewed by Chris.
1722
1723         * bindings/objc/objc_utility.mm:
1724         (KJS::Bindings::convertValueToObjcValue):
1725
1726 2005-01-17  Richard Williamson   <rjw@apple.com>
1727
1728         Fixed <rdar://problem/3753030> Need to ensure same origin for plugin binding invocations (origin security rules)
1729
1730         Keep track of originating execution context and target execution
1731         context for native JS object wrappers, and perform appropriate
1732         security checks.
1733
1734         Reviewed by David Harrison.
1735
1736         * bindings/NP_jsobject.cpp:
1737         (_isSafeScript):
1738         (_NPN_CreateScriptObject):
1739         (_NPN_Invoke):
1740         (_NPN_Evaluate):
1741         (_NPN_GetProperty):
1742         (_NPN_SetProperty):
1743         (_NPN_RemoveProperty):
1744         (_NPN_HasProperty):
1745         (_NPN_HasMethod):
1746         (_NPN_SetException):
1747         * bindings/NP_jsobject.h:
1748         * bindings/c/c_instance.cpp:
1749         (CInstance::CInstance):
1750         (CInstance::stringValue):
1751         * bindings/c/c_instance.h:
1752         * bindings/c/c_utility.cpp:
1753         (convertValueToNPVariant):
1754         * bindings/jni/jni_instance.cpp:
1755         (JavaInstance::JavaInstance):
1756         (JavaInstance::valueOf):
1757         * bindings/jni/jni_instance.h:
1758         * bindings/objc/WebScriptObject.mm:
1759         (-[WebScriptObject _initializeWithObjectImp:KJS::originExecutionContext:Bindings::executionContext:Bindings::]):
1760         (-[WebScriptObject _initWithObjectImp:KJS::originExecutionContext:Bindings::executionContext:Bindings::]):
1761         (-[WebScriptObject KJS::Bindings::]):
1762         (-[WebScriptObject _setOriginExecutionContext:KJS::Bindings::]):
1763         (-[WebScriptObject _isSafeScript]):
1764         (-[WebScriptObject callWebScriptMethod:withArguments:]):
1765         (-[WebScriptObject evaluateWebScript:]):
1766         (-[WebScriptObject setValue:forKey:]):
1767         (-[WebScriptObject valueForKey:]):
1768         (-[WebScriptObject removeWebScriptKey:]):
1769         (-[WebScriptObject stringRepresentation]):
1770         (-[WebScriptObject webScriptValueAtIndex:]):
1771         (-[WebScriptObject setWebScriptValueAtIndex:value:]):
1772         (+[WebScriptObject _convertValueToObjcValue:KJS::originExecutionContext:Bindings::executionContext:Bindings::]):
1773         * bindings/objc/WebScriptObjectPrivate.h:
1774         * bindings/objc/objc_instance.h:
1775         * bindings/objc/objc_runtime.mm:
1776         (convertValueToObjcObject):
1777         * bindings/objc/objc_utility.mm:
1778         (KJS::Bindings::convertValueToObjcValue):
1779         * bindings/runtime.cpp:
1780         (Instance::Instance):
1781         (Instance::operator=):
1782         * bindings/runtime.h:
1783         (KJS::Bindings::Instance::Instance):
1784         (KJS::Bindings::Instance::setExecutionContext):
1785         (KJS::Bindings::Instance::executionContext):
1786         * bindings/runtime_root.cpp:
1787         (RootObject::setInterpreter):
1788         * bindings/runtime_root.h:
1789         * kjs/interpreter.h:
1790         (KJS::Interpreter::isGlobalObject):
1791         (KJS::Interpreter::interpreterForGlobalObject):
1792         (KJS::Interpreter::isSafeScript):
1793
1794 === Safari-179 ===
1795
1796 2005-01-13  Vicki Murley <vicki@apple.com>
1797
1798         Reviewed by Adele.
1799
1800         - fix <rdar://problem/3946836> Safari about box lists 2004 instead of 2005
1801  
1802         * JavaScriptCore.pbproj/project.pbxproj: bump "2004" to "2005"
1803
1804 2005-01-12  Richard Williamson   <rjw@apple.com>
1805
1806         Avoid additional work on dealloc by adding early out to
1807         removeNativeReference().  (This will save time on dealloc
1808         for all ObjC DOM objects.)
1809
1810         Reviewed by Darin.
1811
1812         * bindings/runtime_root.cpp:
1813         (KJS::Bindings::removeNativeReference):
1814
1815 2005-01-12  Richard Williamson   <rjw@apple.com>
1816
1817         Fixed <rdar://problem/3923356> REGRESSION: Java/JavaScript security checks working incorrectly
1818
1819         We were always returning the first "root" object for all runtime
1820         objects.  Changed 0 in loop to i, the index.
1821
1822         Reviewed by David Harrison.
1823
1824         * bindings/runtime_root.cpp:
1825         (KJS::Bindings::rootForImp):
1826
1827 2005-01-11  Richard Williamson   <rjw@apple.com>
1828
1829         Fixed <rdar://problem/3887930> Must use new Java plug-in API to get/set fields so exception handling works (fixes many LiveConnect crashes)
1830
1831         Use the new dispatching API to invoke JNI, rather than calling JNI
1832         directly.
1833
1834         Reviewed by David Harrison.
1835
1836         * bindings/jni/jni_instance.cpp:
1837         (JavaInstance::invokeMethod):
1838         * bindings/jni/jni_runtime.cpp:
1839         (JavaField::dispatchValueFromInstance):
1840         (JavaField::valueFromInstance):
1841         (JavaField::dispatchSetValueToInstance):
1842         (JavaField::setValueToInstance):
1843         * bindings/jni/jni_runtime.h:
1844         * bindings/jni/jni_utility.cpp:
1845         (KJS::Bindings::convertValueToJValue):
1846
1847 === Safari-178 ===
1848
1849 === Safari-177 ===
1850
1851 === Safari-176 ===
1852
1853 2004-12-17  Maciej Stachowiak  <mjs@apple.com>
1854
1855         Reviewed by Kevin.
1856
1857         <rdar://problem/3926869> Opening caches window after running PLT causes crash
1858         
1859         * kjs/protected_values.cpp:
1860         (KJS::ProtectedValues::getProtectCount): Don't include simple numbers in
1861         the protected value table.
1862         (KJS::ProtectedValues::increaseProtectCount): Ditto.
1863         (KJS::ProtectedValues::decreaseProtectCount): Ditto.
1864
1865 2004-12-16  Darin Adler  <darin@apple.com>
1866
1867         Reviewed by Maciej.
1868
1869         - fixed <rdar://problem/3920764> Unimplemented String methods toLocaleLowerCase and toLocaleUpperCase
1870
1871         * kjs/string_object.h: Added toLocaleLowerCase and toLocaleUpperCase.
1872         * kjs/string_object.cpp: (StringProtoFuncImp::call): Made locale versions be synonmyms for the
1873         non-locale-specific versions.
1874         * kjs/string_object.lut.h: Regenerated.
1875
1876 2004-12-14  Richard Williamson   <rjw@apple.com>
1877
1878         Pass URL of plugin view when call into JNI.
1879
1880         Reviewed by Chris.
1881
1882         * bindings/jni/jni_objc.mm:
1883         (KJS::Bindings::dispatchJNICall):
1884
1885 2004-12-13  Richard Williamson   <rjw@apple.com>
1886
1887         Fixed <rdar://problem/3827799> repro. crash with IBM Rational ClearCase Web under Safari (Java/LiveConnect-related)
1888
1889         Add support for calling static Java methods from JavaScript.
1890
1891         Reviewed by Maciej.
1892
1893         * bindings/jni/jni_instance.cpp:
1894         (JavaInstance::invokeMethod):
1895         * bindings/jni/jni_runtime.cpp:
1896         (JavaMethod::JavaMethod):
1897         * bindings/jni/jni_runtime.h:
1898         (KJS::Bindings::JavaMethod::isStatic):
1899         * bindings/jni/jni_utility.cpp:
1900         (callJNIStaticMethod):
1901         (KJS::Bindings::callJNIBooleanMethod):
1902         (KJS::Bindings::callJNIStaticBooleanMethod):
1903         * bindings/jni/jni_utility.h:
1904
1905 2004-12-13  Richard Williamson   <rjw@apple.com>
1906
1907         Fixed <rdar://problem/3887767> LiveConnect doesn't propagate Java exceptions back to JavaScript (prevents security suite from running)
1908
1909         Reviewed by John.
1910
1911         * bindings/jni/jni_instance.cpp:
1912         (JavaInstance::invokeMethod):
1913         * bindings/jni/jni_objc.mm:
1914         (KJS::Bindings::dispatchJNICall):
1915         * bindings/jni/jni_runtime.h:
1916         * bindings/jni/jni_utility.h:
1917
1918 === Safari-175 ===
1919
1920 2004-12-07  Maciej Stachowiak  <mjs@apple.com>
1921
1922         Reviewed by Darin.
1923
1924         <rdar://problem/3908017> REGRESSION (172-173): assertion in ObjectImp::construct trying to create JS error (24hourfitness.com)
1925
1926         The fix was to implement copy constructor and assignment operator,
1927         the ones that worked on the base class did not replace the
1928         defaults apparently!
1929         
1930         * kjs/protect.h:
1931         (KJS::ProtectedValue::ProtectedValue):
1932         (KJS::ProtectedValue::operator=):
1933         (KJS::ProtectedObject::ProtectedObject):
1934         (KJS::ProtectedObject::operator=):
1935         
1936         Also fixed a bug in the GC test mode that compares the results of
1937         the old collector and the new collector.
1938
1939         * kjs/value.cpp:
1940         (ValueImp::mark):
1941
1942 === Safari-173 ===
1943
1944 2004-11-23  Richard Williamson   <rjw@apple.com>
1945
1946         Fixed <rdar://problem/3890385> field and method cache incorrectly capped (c bindings)
1947
1948         Reviewed by Ken.
1949
1950         * bindings/c/c_class.cpp:
1951         (CClass::_commonInit):
1952
1953 2004-11-21  Maciej Stachowiak  <mjs@apple.com>
1954
1955         Reviewed by Ken.
1956
1957         <rdar://problem/3889696> Enable conservative garbage collection for JavaScript
1958         
1959         * kjs/collector.cpp:
1960         (KJS::Collector::Thread::Thread):
1961         (KJS::destroyRegisteredThread):
1962         (KJS::initializeRegisteredThreadKey):
1963         (KJS::Collector::registerThread):
1964         (KJS::Collector::markStackObjectsConservatively):
1965         (KJS::Collector::markCurrentThreadConservatively):
1966         (KJS::Collector::markOtherThreadConservatively):
1967         * kjs/collector.h:
1968         * kjs/internal.cpp:
1969         (lockInterpreter):
1970         * kjs/value.h:
1971
1972 === Safari-172 ===
1973
1974 2004-11-15  Richard Williamson   <rjw@apple.com>
1975
1976         Fixed <rdar://problem/3880561> Default string value of ObjC object in JS should be [obj description].
1977
1978         Reviewed by Hyatt.
1979
1980         * bindings/objc/objc_instance.mm:
1981         (ObjcInstance::stringValue):
1982         * bindings/objc/objc_utility.h:
1983         * bindings/objc/objc_utility.mm:
1984         (KJS::Bindings::convertNSStringToString):
1985         (KJS::Bindings::convertObjcValueToValue):
1986
1987 === Safari-171 ===
1988
1989 2004-11-09  Chris Blumenberg  <cblu@apple.com>
1990
1991         Fixed: <rdar://problem/3872724> soft link against JavaVM to save ~2MB RSHRD
1992
1993         Reviewed by rjw.
1994
1995         * ChangeLog:
1996         * JavaScriptCore.pbproj/project.pbxproj: don't link against JavaVM
1997         * bindings/softlinking.c: Added.
1998         (loadFramework): new
1999         (getFunctionPointer): new
2000         (JNI_GetCreatedJavaVMs): load JavaVM if not already loaded, get _JNI_GetCreatedJavaVMs symbol if we don't already have it, call JNI_GetCreatedJavaVMs
2001
2002 === Safari-170 ===
2003
2004 2004-11-04  Darin Adler  <darin@apple.com>
2005
2006         Reviewed by Ken.
2007
2008         - fixed <rdar://problem/3865365> since -[WebScriptObject dealloc] does not call [super dealloc], the build will fail due to a warning
2009         - fixed behavior so that [[WebScriptObject alloc] initWithCoder:] doesn't leak WebUndefined instances
2010           and incidentally so that [[WebScriptObject alloc] init] returns the single shared instance rather
2011           than allocating a new one
2012
2013         * bindings/objc/WebScriptObject.mm: Removed some stray semicolons.
2014         (+[WebUndefined allocWithZone:]): Made this the common bottleneck that returns the single instance
2015         of WebUndefined, since it's the single method that normally allocates new instances. Calls super to
2016         actually allocate only the very first time it's called.
2017         (-[WebUndefined initWithCoder:]): Simplified to just return self (no reason to re-lookup the single
2018         shared instance since there can be only one).
2019         (-[WebUndefined copyWithZone:]): Ditto.
2020         (-[WebUndefined retain]): Ditto.
2021         (-[WebUndefined retainCount]): Use UINT_MAX constant here (matches usage in NSObject.m for retain count
2022         of class).
2023         (-[WebUndefined autorelease]): Simplified to just return self (see above).
2024         (-[WebUndefined copy]): No need to override this since it just turns around and calls copyWithZone:.
2025         (-[WebUndefined dealloc]): Added an assertion since this method should never be called. Also added
2026         a call to [super dealloc] after return; to make the new -Wdealloc-check compiler happy (fixing the
2027         bug mentioned above).
2028         (+[WebUndefined undefined]): Reimplemented; calls allocWithZone:NULL to get to the shared instance.
2029         No need to call init, since that's a no-op for this class.
2030
2031 2004-11-03  David Harrison  <harrison@apple.com>
2032
2033         Reviewed by Darin.
2034         
2035         Eliminate the use of a marker file to determine how to build.
2036
2037         * .cvsignore:
2038         * Makefile.am:
2039
2040 2004-11-01  Richard Williamson   <rjw@apple.com>
2041
2042         Fixed <rdar://problem/3861469> Latest Real player crashes Safari on some sites.
2043
2044         Reviewed by Ken.
2045
2046         * bindings/c/c_instance.cpp:
2047         (CInstance::invokeMethod):
2048         (CInstance::invokeDefaultMethod):
2049         Initialize out parameters to void type.
2050
2051         * bindings/c/c_runtime.cpp:
2052         (CField::valueFromInstance):
2053         (CField::setValueToInstance):
2054         Initialize out parameters to void type.
2055         Also added additional checks to protect against classes that 
2056         don't implement all functions.
2057
2058 2004-11-01  Richard Williamson   <rjw@apple.com>
2059
2060         Fixed <rdar://problem/3861257> WebUndefined should be returned for undefined values
2061
2062         Reviewed by John.
2063
2064         * ChangeLog:
2065         * bindings/objc/WebScriptObject.mm:
2066         (+[WebScriptObject _convertValueToObjcValue:KJS::root:Bindings::]):
2067         Added additional conversion Undefined -> WebUndefined.
2068         * bindings/objc/objc_utility.mm:
2069         (KJS::Bindings::convertObjcValueToValue):
2070         Added additional conversion WebUndefined -> Undefined.
2071
2072 2004-11-01  Darin Adler  <darin@apple.com>
2073
2074         - fixed <rdar://problem/3855573> Remove reference to "WebScriptMethods" from WebScriptObject.h comments
2075
2076         * bindings/objc/WebScriptObject.h: Removed unneeded #ifdef protection for multiple includes (since
2077         this is an Objective-C header and we use #import for those). Fixed comments as requested in the bug
2078         report to match the contents of the file.
2079
2080 === Safari-169 ===
2081
2082 === Safari-168 ===
2083
2084 2004-10-22  Ken Kocienda  <kocienda@apple.com>
2085
2086         Reviewed by me
2087
2088         * JavaScriptCore.pbproj/project.pbxproj:  
2089         Add GCC_ENABLE_OBJC_GC and GCC_FAST_OBJC_DISPATCH flags.
2090
2091 === Safari-167 ===
2092
2093 2004-10-13  Richard Williamson   <rjw@apple.com>
2094
2095         Moved boolean checks prior to NSNumber checks.  booleans are
2096         NSNumbers.
2097
2098         Follow on to <rdar://problem/3821515> binding layer needs to convert NSNumber-bools to js type boolean not number.
2099
2100         Reviewed by John.
2101
2102         * bindings/objc/objc_utility.mm:
2103         (KJS::Bindings::convertObjcValueToValue):
2104
2105 2004-10-12  Richard Williamson   <rjw@apple.com>
2106
2107         Fixed access to DOM object via WebScriptObject API.
2108         The execution context for DOM objects wasn't being found.       
2109         <rdar://problem/3831372> The valueForKey method for @"offsetLeft" on a paragraph element causes a crash.
2110
2111         Reviewed by Chris.
2112
2113         * bindings/objc/WebScriptObject.mm:
2114         (_didExecute):
2115         (-[WebScriptObject KJS::Bindings::]):
2116         (-[WebScriptObject callWebScriptMethod:withArguments:]):
2117         (-[WebScriptObject evaluateWebScript:]):
2118         (-[WebScriptObject setValue:forKey:]):
2119         (-[WebScriptObject valueForKey:]):
2120         (-[WebScriptObject stringRepresentation]):
2121         * bindings/objc/WebScriptObjectPrivate.h:
2122
2123 2004-10-09  Darin Adler  <darin@apple.com>
2124
2125         Reviewed by Kevin.
2126
2127         - fixed <rdar://problem/3804661> REGRESSION: JavaScriptCore framework now has two init routines
2128
2129         * bindings/NP_jsobject.cpp: Fixed unnecessarily-complex globals set up that was
2130         creating an init routine.
2131
2132         * kjs/ustring.cpp: Changed around the UString::Rep::empty construction to not
2133         require a global constructor that creates an init routine.
2134
2135 2004-10-09  Darin Adler  <darin@apple.com>
2136
2137         Reviewed by Kevin.
2138
2139         - fixed <rdar://problem/3822618> REGRESSION (164-165): expedia.com's popup help doesn't work
2140
2141         * kjs/reference.cpp: (Reference::putValue): Change so that references not found in any object
2142         work with the window object of the page the function is in, not the page of the caller. This
2143         is what all other browsers do. This code was hidden before by the "everything is defined on
2144         window object" hack in WebCore.
2145
2146 2004-10-07  Richard Williamson   <rjw@apple.com>
2147
2148         Added simple JavaScript call tracing.  Very useful for
2149         debugging complex pages.
2150
2151         Tracing is only available in development builds and is
2152         enabled by:
2153
2154         (gdb) set traceJavaScript = 1
2155
2156         or programatically
2157
2158         setTraceJavaScript(true)
2159
2160         Function, args, and return values are printed to console.  Very
2161         verbose.
2162
2163         Reviewed by Ken.
2164
2165         * kjs/function_object.cpp:
2166         (FunctionProtoFuncImp::call):
2167         * kjs/object.cpp:
2168         (KJS::Object::call):
2169
2170 === Safari-166 ===
2171
2172 2004-10-05  Richard Williamson   <rjw@apple.com>
2173
2174         Fixed <rdar://problem/3819234> NPN_SetException (and throwException:) isn't implemented
2175
2176         Reviewed by Chris.
2177
2178         * bindings/NP_jsobject.cpp:
2179         (_NPN_SetException):
2180         * bindings/npruntime.cpp:
2181         (_NPN_SetExceptionWithUTF8):
2182         * bindings/objc/WebScriptObject.mm:
2183         (+[WebScriptObject throwException:]):
2184         * kjs/internal.h:
2185         (KJS::InterpreterImp::context):
2186
2187 2004-10-05  Richard Williamson   <rjw@apple.com>
2188
2189         Fixed <rdar://problem/3821515> binding layer needs to convert NSNumber-bools to js type boolean not number
2190
2191         Reviewed by Ken.
2192
2193         * bindings/objc/objc_utility.mm:
2194         (KJS::Bindings::convertObjcValueToValue):
2195
2196 2004-10-04  Darin Adler  <darin@apple.com>
2197
2198         Reviewed by Ken.
2199
2200         - rolled in a fix the KDE folks did for the operations that generate HTML fragments
2201
2202         * kjs/string_object.cpp: (StringProtoFuncImp::call): Added quote marks to generated HTML.
2203
2204         - rolled out an old workaround we don't need any more
2205
2206         * JavaScriptCore.pbproj/project.pbxproj: Remove -Wno-long-double because the <math.h> issue that
2207         required it is no longer there.
2208
2209 2004-09-30  Richard Williamson  <rjw@apple.com>
2210
2211         Fixed <rdar://problem/3821215> NPN hasMethod and hasProperty functions should take NPObjects, not NPClass
2212
2213         Reviewed by Chris.
2214
2215         * bindings/NP_jsobject.cpp:
2216         (_NPN_GetProperty):
2217         (_NPN_HasProperty):
2218         (_NPN_HasMethod):
2219         * bindings/c/c_class.cpp:
2220         (CClass::methodsNamed):
2221         (CClass::fieldNamed):
2222         * bindings/c/c_class.h:
2223         * bindings/c/c_instance.cpp:
2224         (CInstance::invokeMethod):
2225         * bindings/jni/jni_class.cpp:
2226         (JavaClass::methodsNamed):
2227         * bindings/jni/jni_class.h:
2228         * bindings/npruntime.h:
2229         * bindings/objc/objc_class.h:
2230         * bindings/objc/objc_class.mm:
2231         (ObjcClass::methodsNamed):
2232         * bindings/runtime.h:
2233         * bindings/runtime_object.cpp:
2234         (RuntimeObjectImp::get):
2235         (RuntimeObjectImp::hasProperty):
2236
2237 2004-09-29  Chris Blumenberg  <cblu@apple.com>
2238
2239         Prepended underscores to NPN methods so that when the QT plug-in loads these symbols, it uses the non-underscore versions in WebKit. Without this, the QT plug-in was failing to load when launching Safari from the command-line.
2240
2241         Reviewed by rjw.
2242
2243         * JavaScriptCore.pbproj/project.pbxproj:
2244         * bindings/NP_jsobject.cpp:
2245         (_NPN_CreateScriptObject):
2246         (_NPN_InvokeDefault):
2247         (_NPN_Invoke):
2248         (_NPN_Evaluate):
2249         (_NPN_GetProperty):
2250         (_NPN_SetProperty):
2251         (_NPN_RemoveProperty):
2252         (_NPN_HasProperty):
2253         (_NPN_HasMethod):
2254         * bindings/c/c_class.cpp:
2255         (CClass::methodsNamed):
2256         (CClass::fieldNamed):
2257         * bindings/c/c_instance.cpp:
2258         (CInstance::CInstance):
2259         (CInstance::~CInstance):
2260         (CInstance::operator=):
2261         (CInstance::invokeMethod):
2262         (CInstance::invokeDefaultMethod):
2263         * bindings/c/c_runtime.cpp:
2264         * bindings/c/c_runtime.h:
2265         (KJS::Bindings::CField::name):
2266         (KJS::Bindings::CMethod::name):
2267         * bindings/npruntime.cpp:
2268         (_NPN_GetStringIdentifier):
2269         (_NPN_GetStringIdentifiers):
2270         (_NPN_GetIntIdentifier):
2271         (_NPN_IdentifierIsString):
2272         (_NPN_UTF8FromIdentifier):
2273         (_NPN_IntFromIdentifier):
2274         (NPN_InitializeVariantWithObject):
2275         (_NPN_ReleaseVariantValue):
2276         (_NPN_CreateObject):
2277         (_NPN_RetainObject):
2278         (_NPN_ReleaseObject):
2279         (_NPN_SetExceptionWithUTF8):
2280         (_NPN_SetException):
2281
2282 2004-09-26  Darin Adler  <darin@apple.com>
2283
2284         * kjs/string_object.cpp: (StringProtoFuncImp::call): Remove strange use of high() and
2285         low() to get Unicode value of character, and just use unicode().
2286
2287 2004-09-26  Darin Adler  <darin@apple.com>
2288
2289         - refine charAt/charCodeAt fix slightly
2290
2291         * kjs/string_object.cpp: (StringProtoFuncImp::call): Treat undefined the same was as an
2292         omitted parameter, as we do everywhere else, and as other browsers do here.
2293
2294 2004-09-26  Darin Adler  <darin@apple.com>
2295
2296         Reviewed by Kevin.
2297
2298         - fixed <rdar://problem/3816097> REGRESSION: mailblocks, and presumably many other pages, failing because variable not found
2299
2300         * kjs/internal.cpp: (InterpreterImp::evaluate): Process variable declarations before executing
2301         the program. We were doing this properly for functions, but not entire programs.
2302
2303         - fixed <rdar://problem/3814706> REGRESSION: text fields in mailblocks wizards do not accept keystrokes due to use of charCodeAt()
2304
2305         * kjs/string_object.cpp: (StringProtoFuncImp::call): Changed the implementation of charAt
2306         and charCodeAt to treat a missing parameter as an index of 0, rather than an invalid index.
2307
2308         * tests/mozilla/expected.html: Update for two tests that now pass with these changes.
2309
2310 === Safari-165 ===
2311
2312 === Safari-164 ===
2313
2314 2004-09-14  Richard Williamson   <rjw@apple.com>
2315
2316         1.  Add class parameter to object allocation function.  This is somewhat redundant, given that
2317         the allocation function is in the class function vector, but people wanted to use the same
2318         allocation function for different classes.
2319         
2320         2.  Renamed NPN_Class to NPN_Invoke to match the name in the function vector.
2321         
2322         3.  Add support for a default function on an object.  This is a feature that ActiveX supports,
2323         and will allow JavaScript code to be written that will look exactly the same for both ActiveX
2324         plugins and Netscape or WebKit plugins.  There are implementations included for the 'C' and
2325         'Objective-C' bindings.
2326         
2327         There bugs are covered by
2328         
2329         <rdar://problem/3776343> Support for default functions in the JavaScript bindings
2330         <rdar://problem/3779186> NPN_Call needs to be renamed to NPN_Invoke
2331         <rdar://problem/3674754> Need to implement latest npruntime.h
2332
2333         Reviewed by John.
2334
2335         * bindings/NP_jsobject.cpp:
2336         (jsAllocate):
2337         (NPN_InvokeDefault):
2338         (NPN_Invoke):
2339         * bindings/c/c_class.cpp:
2340         * bindings/c/c_instance.cpp:
2341         (CInstance::CInstance):
2342         (CInstance::operator=):
2343         (CInstance::invokeMethod):
2344         (CInstance::invokeDefaultMethod):
2345         * bindings/c/c_instance.h:
2346         * bindings/c/c_runtime.cpp:
2347         * bindings/c/c_runtime.h:
2348         * bindings/jni/jni_instance.cpp:
2349         (JavaInstance::invokeDefaultMethod):
2350         * bindings/jni/jni_instance.h:
2351         * bindings/npruntime.cpp:
2352         (NPN_CreateObject):
2353         * bindings/npruntime.h:
2354         * bindings/objc/WebScriptObject.h:
2355         * bindings/objc/objc_class.mm:
2356         (ObjcClass::fallbackObject):
2357         * bindings/objc/objc_instance.h:
2358         * bindings/objc/objc_instance.mm:
2359         (ObjcInstance::invokeDefaultMethod):
2360         * bindings/objc/objc_runtime.h:
2361         * bindings/objc/objc_runtime.mm:
2362         (ObjcFallbackObjectImp::ObjcFallbackObjectImp):
2363         (ObjcFallbackObjectImp::get):
2364         (ObjcFallbackObjectImp::put):
2365         (ObjcFallbackObjectImp::canPut):
2366         (ObjcFallbackObjectImp::implementsCall):
2367         (ObjcFallbackObjectImp::call):
2368         (ObjcFallbackObjectImp::hasProperty):
2369         (ObjcFallbackObjectImp::deleteProperty):
2370         (ObjcFallbackObjectImp::defaultValue):
2371         * bindings/runtime.h:
2372         (KJS::Bindings::Class::fallbackObject):
2373         (KJS::Bindings::Instance::getValueOfUndefinedField):
2374         (KJS::Bindings::Instance::setValueOfUndefinedField):
2375         (KJS::Bindings::Instance::valueOf):
2376         * bindings/runtime_object.cpp:
2377         (RuntimeObjectImp::implementsCall):
2378         (RuntimeObjectImp::call):
2379         * bindings/runtime_object.h:
2380
2381 2004-09-13  Maciej Stachowiak  <mjs@apple.com>
2382
2383         Reviewed by Darin.
2384
2385         <rdar://problem/3794735> Gmail- sending a very long message with Safari is so slow it seems like a hang
2386         
2387         * kjs/string_object.cpp:
2388         (StringProtoFuncImp::call): Replaced implementation of replace()
2389         method with function below...
2390         (replace): In order to avoid excessive allocation and copying,
2391         figure out the ranges of the original string and replacement
2392         strings to be assembled, instead of constantly creating new
2393         strings at each substitution. The old behavior is basically O(N^2)
2394         for a global replace on a pattern that matches many places in the
2395         string.
2396         (regExpIsGlobal): Helper function for the above.
2397         (expandSourceRanges): ditto
2398         (pushSourceRange): ditto
2399         (expandReplacements): ditto
2400         (pushReplacement): ditto
2401         * kjs/ustring.cpp:
2402         (KJS::UString::spliceSubstringsWithSeparators): New method that
2403         pieces together substring ranges of this string together with
2404         specified separators, all at one go.
2405         * kjs/ustring.h:
2406         (KJS::UString::Range::Range): Added new helper class to represent
2407         substring choices.
2408
2409 2004-09-14  Maciej Stachowiak  <mjs@apple.com>
2410
2411         Reviewed by Darin.
2412
2413         - fixed <rdar://problem/3800315> encode-URI-test layout test is failing
2414         
2415         * kjs/function.cpp:
2416         (KJS::GlobalFuncImp::call): Make sure to escape null
2417         characters. This is a bug in the new code that made part of the
2418         test fail.
2419
2420 2004-09-13  Darin Adler  <darin@apple.com>
2421
2422         Reviewed by Kevin and Maciej.
2423
2424         - new function to support fix for DIG bug in WebCore
2425
2426         * kjs/scope_chain.h: Added new push function that pushes another entire scope chain.
2427         * kjs/scope_chain.cpp: (KJS::ScopeChain::push): Ditto.
2428
2429 2004-09-12  Darin Adler  <darin@apple.com>
2430
2431         * tests/mozilla/expected.html: Updated test results for 3 more tests that pass with the new version
2432         of escape and unescape.
2433
2434 2004-09-12  Darin Adler  <darin@apple.com>
2435
2436         Reviewed by Maciej.
2437
2438         - fixed <rdar://problem/3798209> any non-ASCII characters are garbled in the result of toLocaleString
2439
2440         * kjs/date_object.cpp:
2441         (formatLocaleDate): Replaced two old functions that used LongDateTime with this one new function that
2442         uses CFDateFormatter.
2443         (DateProtoFuncImp::call): Call the new formatLocaleDate instead of both formatLocaleDate and formatLocaleTime.
2444
2445 2004-09-09  Maciej Stachowiak  <mjs@apple.com>
2446
2447         Reviewed by Richard.
2448
2449         <rdar://problem/3493140> REGRESSION (85-100): cedille displays %-escaped in JavaScript message at hotmail.com
2450
2451         * kjs/function.cpp:
2452         (KJS::GlobalFuncImp::call): Replace our escape() and unescape() implementations with
2453         ones from KDE KJS, which have the proper latin-1 behavior to match Win IE.
2454         * kjs/lexer.cpp:
2455         (Lexer::isHexDigit): Made static and non-const.
2456         * kjs/lexer.h:
2457
2458 === Safari-163 ===
2459
2460 2004-09-06  Darin Adler  <darin@apple.com>
2461
2462         * JavaScriptCore.pbproj/project.pbxproj: Bump MACOSX_DEPLOYMENT_TARGET to 10.3.
2463
2464 === Safari-162 ===
2465
2466 2004-09-01  Richard Williamson   <rjw@apple.com>
2467
2468         Add pid to exception messages (to help debug dashboard clients).
2469
2470         Reviewed by Chris.
2471
2472         * kjs/interpreter.cpp:
2473         (Interpreter::evaluate):
2474
2475 === Safari-161 ===
2476
2477 2004-08-20  Richard Williamson   <rjw@apple.com>
2478
2479         Implemented new JNI abstraction.  We no longer invoke Java methods
2480         directly with JNI, rather we call into the plugin.  This allows the
2481         plugin to dispatch the call to the appropriate VM thread.  This
2482         change should (will?) fix a whole class of threading related problems with
2483         the Java VM.
2484
2485         Reviewed by Hyatt.
2486
2487         * JavaScriptCore.pbproj/project.pbxproj:
2488         * bindings/c/c_instance.h:
2489         (KJS::Bindings::CInstance::setExecutionContext):
2490         (KJS::Bindings::CInstance::executionContext):
2491         * bindings/jni/jni_instance.cpp:
2492         (JavaInstance::JavaInstance):
2493         (JavaInstance::invokeMethod):
2494         (JavaInstance::setExecutionContext):
2495         (JavaInstance::executionContext):
2496         * bindings/jni/jni_instance.h:
2497         * bindings/jni/jni_jsobject.cpp:
2498         (JSObject::convertJObjectToValue):
2499         * bindings/jni/jni_runtime.cpp:
2500         (JavaField::JavaField):
2501         (JavaArray::convertJObjectToArray):
2502         (JavaField::valueFromInstance):
2503         (JavaArray::JavaArray):
2504         (JavaArray::valueAt):
2505         * bindings/jni/jni_runtime.h:
2506         (KJS::Bindings::JavaArray::operator=):
2507         (KJS::Bindings::JavaArray::executionContext):
2508         * bindings/jni/jni_utility.h:
2509         * bindings/objc/objc_instance.h:
2510         (KJS::Bindings::ObjcInstance::setExecutionContext):
2511         (KJS::Bindings::ObjcInstance::executionContext):
2512         * bindings/runtime.cpp:
2513         (Instance::createBindingForLanguageInstance):
2514         * bindings/runtime.h:
2515         * bindings/runtime_root.h:
2516         (KJS::Bindings::RootObject::nativeHandle):
2517
2518 === Safari-158 ===
2519
2520 2004-08-19  Vicki Murley  <vicki@apple.com>
2521
2522         Reviewed by John.
2523
2524         * kjs/property_map.cpp:
2525         (KJS::PropertyMap::put): initialize deletedElementIndex to zero, to make the compiler happy
2526
2527 2004-08-17  Darin Adler  <darin@apple.com>
2528
2529         Reviewed by Adele.
2530
2531         - fixed <rdar://problem/3746676> SAP WebDynpro app hangs inside JavaScript property map hash table code (deleted sentinel problem)
2532
2533         * kjs/property_map.h: Added some private functions.
2534         * kjs/property_map.cpp:
2535         (KJS::PropertyMap::clear): Set sentinelCount to 0.
2536         (KJS::PropertyMap::put): Complete search for the element before choosing to use the deleted-element sentinel.
2537         Also keep sentinel count up to date when we destroy a sentinel by overwriting with a new added element.
2538         (KJS::PropertyMap::expand): Added. Calls rehash with a size 2x the old size, or 16.
2539         (KJS::PropertyMap::rehash): Added. Refactored the rehash code into a separate function.
2540         (KJS::PropertyMap::remove): Add one to sentinelCount, and rehash if 1/4 or more of the elements are
2541         deleted-element sentinels.
2542         (KJS::PropertyMap::checkConsistency): Check the sentinelCount.
2543
2544 2004-08-16  Maciej Stachowiak  <mjs@apple.com>
2545
2546         Code change by Eric Albert, reviewd by me.
2547
2548         <rdar://problem/3571960> washingtonpost.com claims I don't have cookies enabled and won't let me read articles
2549
2550         * kjs/date_object.cpp:
2551         (timetUsingCF): Clamp time to LONG_MAX (getting rid of time_t
2552         entirely would be even better, but is not required to fix this bug.
2553
2554 === Safari-157 ===
2555
2556 2004-08-16  Richard Williamson   <rjw@apple.com>
2557
2558         Fixed <rdar://problem/3581092> cash in KJS::Bindings::JSObject::eval at tcvetantcvetkov.com
2559
2560         Adds bullet proofing to protect against evaluation of bogus JS in all the flavors of bindings (Java, C, and ObjC).
2561
2562         Reviewed by Chris.
2563
2564         * bindings/NP_jsobject.cpp:
2565         (NPN_Evaluate):
2566         * bindings/jni/jni_jsobject.cpp:
2567         (JSObject::eval):
2568         * bindings/objc/WebScriptObject.mm:
2569         (-[WebScriptObject evaluateWebScript:]):
2570
2571 2004-08-15  Richard Williamson   <rjw@apple.com>
2572
2573         More updates to np headers.  Implemented new NPN functions.
2574
2575         Reviewed by Darin.
2576
2577         * bindings/NP_jsobject.cpp:
2578         (NPN_HasProperty):
2579         (NPN_HasMethod):
2580         * bindings/npapi.h:
2581         * bindings/npruntime.h:
2582
2583 2004-08-13  Darin Adler  <darin@apple.com>
2584
2585         - fix build so we can compile again
2586
2587         * bindings/npapi.h: Added. Richard forgot to check this in. The one I'm checking in here
2588         is good enough so that we can compile, but it's only a stopgap measure, because I think
2589         Richard has a newer one he wants to check in.
2590
2591 2004-08-12  Richard Williamson   <rjw@apple.com>
2592
2593         Bring npruntime.h and friends closer to compliance with
2594         latest spec.
2595
2596         Reviewed by Maciej.
2597
2598         * JavaScriptCore.pbproj/project.pbxproj:
2599         * bindings/NP_jsobject.cpp:
2600         (jsAllocate):
2601         (_NPN_CreateScriptObject):
2602         (NPN_Call):
2603         (NPN_Evaluate):
2604         (NPN_GetProperty):
2605         (NPN_SetProperty):
2606         (NPN_RemoveProperty):
2607         * bindings/NP_jsobject.h:
2608         * bindings/c/c_instance.cpp:
2609         (CInstance::invokeMethod):
2610         * bindings/c/c_utility.cpp:
2611         (convertNPVariantToValue):
2612         * bindings/npruntime.cpp:
2613         (NPN_IdentifierIsString):
2614         (NPN_VariantIsVoid):
2615         (NPN_VariantIsNull):
2616         (NPN_VariantIsUndefined):
2617         (NPN_VariantIsBool):
2618         (NPN_VariantIsInt32):
2619         (NPN_VariantIsDouble):
2620         (NPN_VariantIsString):
2621         (NPN_VariantIsObject):
2622         (NPN_VariantToBool):
2623         (NPN_VariantToString):
2624         (NPN_VariantToInt32):
2625         (NPN_VariantToDouble):
2626         (NPN_VariantToObject):
2627         (NPN_InitializeVariantAsVoid):
2628         (NPN_InitializeVariantAsNull):
2629         (NPN_InitializeVariantAsUndefined):
2630         (NPN_InitializeVariantWithBool):
2631         (NPN_InitializeVariantWithInt32):
2632         (NPN_InitializeVariantWithDouble):
2633         (NPN_InitializeVariantWithString):
2634         (NPN_InitializeVariantWithStringCopy):
2635         (NPN_InitializeVariantWithObject):
2636         (NPN_InitializeVariantWithVariant):
2637         (NPN_ReleaseVariantValue):
2638         (NPN_CreateObject):
2639         * bindings/npruntime.h:
2640         (_NPString::):
2641         (_NPString::_NPVariant::):
2642         * bindings/npruntime_priv.h: Added.
2643
2644 2004-08-12  Darin Adler  <darin@apple.com>
2645
2646         Reviewed by Adele.
2647
2648         - fixed 3 problems with parse functions that I just wrote, fixing 3 more Mozilla JavaScript tests
2649
2650         * kjs/function.cpp:
2651         (KJS::parseDigit): Fix typo, 'Z' instead of 'z', that prevented lowercase hex digits from working.
2652         (KJS::parseInt): Add octal support. Specification says it's optional, but I guess not.
2653         (KJS::parseFloat): Fix check for "0x" in parseFloat to return 0 rather than NaN. Also add code
2654         to skip leading "+" or "-".
2655
2656 === Safari-156 ===
2657
2658 2004-08-12  Darin Adler  <darin@apple.com>
2659
2660         Reviewed by Ken.
2661
2662         - fixed 43 Mozilla JavaScript tests
2663
2664         * kjs/date_object.h: Change parseDate and timeClip to take and return doubles.
2665         * kjs/date_object.cpp:
2666         (DateObjectImp::construct): Change to use a timeClip function that takes and returns a double rather
2667         than constructing a number object to pass to it.
2668         (DateObjectFuncImp::call): Change to use a parseDate function that returns a double.
2669         (KJS::parseDate): Change to return a double instead of creating the Number object here.
2670         (KJS::timeClip): Implement this as specified in the language standard.
2671
2672         * kjs/error_object.cpp: (NativeErrorImp::NativeErrorImp): Set the DontDelete, ReadOnly, and DontEnum
2673         flags on the prototype property.
2674
2675         * kjs/function.cpp:
2676         (KJS::FunctionImp::get): Return null rather than undefined for arguments when the function is not
2677         currently in scope.
2678         (KJS::isStrWhiteSpace): Added. Matches specification for StrWhiteSpace. Could move it to some utility
2679         file later.
2680         (KJS::parseDigit): Added. Helper function for parseInt.
2681         (KJS::parseInt): Added. Integer parser that puts result in a double so we're not limited to what
2682         strtoll can handle. Also matches standard more closely.
2683         (KJS::parseFloat): Added. Handles "0x" properly and passes flag to make empty string turn into NaN
2684         instead of 0.
2685         (KJS::GlobalFuncImp::call): Use the new parseInt and parseFloat.
2686
2687         * kjs/function_object.cpp: (FunctionPrototypeImp::FunctionPrototypeImp): Add a length property.
2688
2689         * kjs/lexer.h: Added error flag and sawError() function for detecting errors.
2690         * kjs/lexer.cpp:
2691         (Lexer::setCode): Clear error state.
2692         (Lexer::lex): Set error state if the lexer encounters an error
2693
2694         * kjs/internal.cpp:
2695         (NumberImp::toString): Roll in change from KDE version to special case 0 so we handle -0 correctly.
2696         (Parser::parse): Use new lexer error method so those errors are treated like parser errors.
2697
2698         * kjs/math_object.cpp: (MathFuncImp::call): Change min and max to treat -0 as less than +0.
2699         Change round to round values between -0.5 and -0 to -0 instead of +0.
2700
2701         * kjs/nodes.h: Add evaluateReference function to GroupNode.
2702         * kjs/nodes.cpp: (GroupNode::evaluateReference): Pass references through groups (parenthesized
2703         expressions) properly so that expressions like "delete (x.y)" work. Before, the parentheses
2704         would change x.y into a value that can't be deleted as a side effect.
2705
2706         * kjs/string_object.cpp: Change parameter count for indexOf and lastIndexOf from 2 to 1 to match
2707         the specification.
2708
2709         * kjs/testkjs.cpp: Rolled in changes from KDE to add a "quit" function to the test tool and
2710         get rid of the fixed size limit for code.
2711
2712         * kjs/ustring.cpp: (KJS::UString::substr): Added optimized case for substr(0, length) so it just
2713         returns the string without creating a new Rep, since I'm using substr in a place where it will
2714         often be passed a 0.
2715
2716         * tests/mozilla/ecma/String/15.5.4.11-1.js: Fixed one wrong entry in the Unicode table I added to
2717         the other day that was making a couple tests fail.
2718         * tests/mozilla/ecma/String/15.5.4.12-1.js: Ditto.
2719         * tests/mozilla/ecma/String/15.5.4.12-2.js: Ditto.
2720         * tests/mozilla/ecma/String/15.5.4.12-3.js: Ditto.
2721         * tests/mozilla/ecma/String/15.5.4.12-4.js: Ditto.
2722         * tests/mozilla/ecma/String/15.5.4.12-5.js: Ditto.
2723
2724         * kjs/string_object.lut.h: Regenerated.
2725
2726 2004-08-11  Darin Adler  <darin@apple.com>
2727
2728         - fixed a tiny problem with the UTF-16 PCRE check-in
2729
2730         * pcre/maketables.c: (pcre_maketables): Fix mistake in table-generating code that sometimes caused
2731         the ctype_meta flag to get set in items that should not have it.
2732
2733         * pcre/chartables.c: Regenerated.
2734
2735 2004-08-10  Richard Williamson   <rjw@apple.com>
2736
2737         Fixed <rdar://problem/3674747> Need to implement invokeUndefinedMethodFromWebScript:withArguments:
2738
2739         The following WebScripting methods are now supported on bound
2740         objects:
2741
2742         - (id)invokeUndefinedMethodFromWebScript:(NSString *)name withArguments:(NSArray *)args;
2743         - (void)setValue:(id)value forUndefinedKey:(NSString *)key
2744         - (id)valueForUndefinedKey:(NSString *)key
2745
2746         Reviewed by Chris.
2747
2748         * bindings/c/c_class.cpp:
2749         (CClass::fieldNamed):
2750         * bindings/c/c_class.h:
2751         * bindings/jni/jni_class.cpp:
2752         (JavaClass::fieldNamed):
2753         * bindings/jni/jni_class.h:
2754         * bindings/objc/objc_class.h:
2755         (KJS::Bindings::ObjcClass::isa):
2756         * bindings/objc/objc_class.mm:
2757         (ObjcClass::methodsNamed):
2758         (ObjcClass::fieldNamed):
2759         (ObjcClass::fallbackObject):
2760         * bindings/objc/objc_instance.h:
2761         * bindings/objc/objc_instance.mm:
2762         (ObjcInstance::invokeMethod):
2763         (ObjcInstance::setValueOfField):
2764         (ObjcInstance::setValueOfUndefinedField):
2765         (ObjcInstance::getValueOfField):
2766         (ObjcInstance::getValueOfUndefinedField):
2767         * bindings/objc/objc_runtime.h:
2768         (KJS::Bindings::ObjcField::~ObjcField):
2769         (KJS::Bindings::ObjcField::ObjcField):
2770         (KJS::Bindings::ObjcField::operator=):
2771         (KJS::Bindings::FallbackObjectImp::classInfo):
2772         * bindings/objc/objc_runtime.mm:
2773         (ObjcField::ObjcField):
2774         (ObjcField::name):
2775         (ObjcField::type):
2776         (ObjcField::valueFromInstance):
2777         (ObjcField::setValueToInstance):
2778         (FallbackObjectImp::FallbackObjectImp):
2779         (FallbackObjectImp::get):
2780         (FallbackObjectImp::put):
2781         (FallbackObjectImp::canPut):
2782         (FallbackObjectImp::implementsCall):
2783         (FallbackObjectImp::call):
2784         (FallbackObjectImp::hasProperty):
2785         (FallbackObjectImp::deleteProperty):
2786         (FallbackObjectImp::defaultValue):
2787         * bindings/runtime.h:
2788         (KJS::Bindings::Class::fallbackObject):
2789         (KJS::Bindings::Instance::getValueOfUndefinedField):
2790         (KJS::Bindings::Instance::setValueOfUndefinedField):
2791         * bindings/runtime_object.cpp:
2792         (RuntimeObjectImp::get):
2793         (RuntimeObjectImp::put):
2794         (RuntimeObjectImp::canPut):
2795         (RuntimeObjectImp::hasProperty):
2796         * bindings/testbindings.mm:
2797         (-[MyFirstInterface valueForUndefinedKey:]):
2798         (-[MyFirstInterface setValue:forUndefinedKey:]):
2799
2800 2004-08-10  Darin Adler  <darin@apple.com>
2801
2802         Reviewed by Dave.
2803
2804         - switch PCRE to do UTF-16 directly instead of converting to/from UTF-8 for speed
2805
2806         * pcre/pcre.h: Added PCRE_UTF16 switch, set to 1. Added pcre_char typedef, which is char
2807         or uint16_t depending on the mode, and used appropriate in the 7 public functions
2808         that need to use it.
2809         * pcre/pcre.c: Add UTF-16 support to all functions.
2810         * pcre/study.c: Ditto.
2811
2812         * pcre/internal.h: Added ichar typedef, which is unsigned char or uint16_t depending on
2813         the mode. Changed declarations to use symbolic constants and typedefs so we size
2814         things to ichar when needed.
2815
2816         * pcre/maketables.c: (pcre_maketables): Change code to make tables that are
2817         sized to 16-bit characters instead of 8-bit.
2818
2819         * pcre/get.c:
2820         (pcre_copy_substring): Use pcre_char instead of char.
2821         (pcre_get_substring_list): Ditto.
2822         (pcre_free_substring_list): Ditto.
2823         (pcre_get_substring): Ditto.
2824         (pcre_free_substring): Ditto.
2825
2826         * pcre/dftables.c: (main): Used a bit more const, and use ICHAR sizes instead
2827         of hard-coding 8-bit table sizes.
2828
2829         * pcre/chartables.c: Regenerated.
2830
2831         * kjs/ustring.h: Remove functions that convert UTF-16 to/from UTF-8 offsets.
2832         * kjs/ustring.cpp: Change the shared empty string to have a unicode pointer that
2833         is not null. The null string still has a null pointer. This prevents us from
2834         passing a null through to the regular expression engine (which results in a null
2835         error even when the string length is 0).
2836
2837         * kjs/regexp.cpp:
2838         (KJS::RegExp::RegExp): Null-terminate the pattern and pass it.
2839         (KJS::RegExp::match): Use the 16-bit string directly, no need to convert to UTF-8.
2840
2841 2004-08-09  Darin Adler  <darin@apple.com>
2842
2843         Reviewed by Maciej.
2844
2845         - fixed 28 Mozilla JavaScript tests
2846
2847         * kjs/array_object.cpp: (ArrayProtoFuncImp::call): Check for undefined rather than
2848         checking the number of arguments for the join method.
2849
2850         * kjs/lexer.cpp: (Lexer::lex): Parse hexadecimal and octal constants in doubles rather
2851         than integers, so we aren't limited to 32 bits.
2852
2853         * kjs/math_object.cpp: (MathFuncImp::call): Get rid of many unneeded special cases in
2854         the implementation of the pow operation. Also simplied a case that was handling positive
2855         and negative infinity separately.
2856
2857         * kjs/nodes.cpp: (ShiftNode::evaluate): Keep the result of shifts in a double instead of
2858         putting them in a long, so that unsigned shift will work properly.
2859
2860         * kjs/number_object.cpp: Add the DontDelete and ReadOnly flags to the numeric constants.
2861
2862         * kjs/operations.cpp:
2863         (KJS::isPosInf): Added an implementation inside APPLE_CHANGES that does not depend on the
2864         sign of isinf; our isinf function returns +1 even for negative infinity.
2865         (KJS::isNegInf): And again.
2866         (KJS::relation): Put in a nice simple implementation of comparison inside APPLE_CHANGES.
2867         Our floating point already handles the various infinity cases correctly.
2868
2869         * kjs/regexp_object.cpp:
2870         (RegExpProtoFuncImp::call): Add missing return before Null() in Exec method.
2871         (RegExpObjectImp::arrayOfMatches): Put undefined rather than an empty string into the
2872         array in cases where we did not match.
2873         (RegExpObjectImp::construct): Set the DontDelete, ReadOnly, and DontEnum flags for
2874         "global", "ignoreCase", "multiline", and "source".
2875
2876         * kjs/string_object.cpp: (StringProtoFuncImp::call): For the match method, turn a null
2877         string into undefined rather than an empty string. For the slice method, handle an
2878         undefined parameter for the limit properly as decribed in the specification, and add
2879         the limit to one case that didn't have the limit at all. For the methods that generate
2880         HTML strings, use lowercase tags instead of uppercase.
2881
2882         * kjs/ustring.cpp:
2883         (KJS::UChar::toLower): Use u_tolower from the ICU library.
2884         (KJS::UChar::toUpper): Use u_toupper from the ICU library.
2885         (KJS::UString::append): Fix some math that caused a buffer overflow.
2886         (KJS::convertUTF16OffsetsToUTF8Offsets): Ignore negative numbers (-1 is used as a special
2887         flag) rather than converting them all to 0.
2888         (KJS::convertUTF8OffsetsToUTF16Offsets): Ditto.
2889
2890         * tests/mozilla/jsDriver.pl: Fixed the relative links to point to our actual test files.
2891
2892         * tests/mozilla/ecma/String/15.5.4.11-1.js: Fixed the Unicode table in this test to match
2893         the Unicode specification in a few cases where it was wrong before.
2894         * tests/mozilla/ecma/String/15.5.4.11-2.js: Ditto.
2895         * tests/mozilla/ecma/String/15.5.4.11-3.js: Ditto.
2896         * tests/mozilla/ecma/String/15.5.4.11-5.js: Ditto.
2897         * tests/mozilla/ecma/String/15.5.4.11-6.js: Ditto.
2898         * tests/mozilla/ecma/String/15.5.4.12-1.js: Ditto.
2899         * tests/mozilla/ecma/String/15.5.4.12-2.js: Ditto.
2900         * tests/mozilla/ecma/String/15.5.4.12-3.js: Ditto.
2901         * tests/mozilla/ecma/String/15.5.4.12-4.js: Ditto.
2902         * tests/mozilla/ecma/String/15.5.4.12-5.js: Ditto.
2903
2904         * JavaScriptCore.pbproj/project.pbxproj: Link to libicu.
2905
2906         * kjs/number_object.lut.h: Regenerated.
2907
2908 2004-08-09  Darin Adler  <darin@apple.com>
2909
2910         Reviewed by Maciej.
2911
2912         - fixed <rdar://problem/3753467> REGRESSION (137-138): reproducible buffer overrun in UString manipulation code
2913
2914         * kjs/ustring.cpp: (KJS::UString::append): Fix incorrect size computation. Without it
2915         we get a buffer overflow.
2916
2917 === Safari-155 ===
2918
2919 2004-08-05  Richard Williamson   <rjw@apple.com>
2920
2921         Fixed part of 3674747.  The QT guys need this for feature freeze.
2922
2923         This patch implements support for the
2924
2925         - (id)invokeUndefinedMethodFromWebScript:(NSString *)name withArguments:(NSArray *)args
2926
2927         method of objects bound to JavaScript.
2928
2929         Reviewed by John.
2930
2931         * ChangeLog:
2932         * bindings/objc/objc_class.mm:
2933         (ObjcClass::methodsNamed):
2934         (ObjcClass::fieldNamed):
2935         * bindings/objc/objc_instance.mm:
2936         (ObjcInstance::invokeMethod):
2937         * bindings/objc/objc_runtime.h:
2938         (KJS::Bindings::ObjcMethod::~ObjcMethod):
2939         (KJS::Bindings::ObjcMethod::isFallbackMethod):
2940         (KJS::Bindings::ObjcMethod::javaScriptName):
2941         * bindings/objc/objc_runtime.mm:
2942         (ObjcMethod::ObjcMethod):
2943         (ObjcMethod::getMethodSignature):
2944         (ObjcMethod::setJavaScriptName):
2945         * bindings/testbindings.mm:
2946
2947 2004-08-04  Vicki Murley  <vicki@apple.com>
2948
2949         Reviewed by mjs.
2950  
2951         - fix <rdar://problem/3649789> SAP WebGUI has problems loading first page because of parse error        
2952
2953         * kjs/lexer.cpp:
2954         (Lexer::lex): if the current character is a '\' and the next character is a line terminator,
2955         go to the next line and continue parsing the string (instead of failing).  This matches 
2956         behavior in Mac IE and Mozilla.
2957
2958 2004-08-03  Kevin Decker  <kdecker@apple.com>
2959
2960         Reviewed by Darin.
2961
2962         Rolled in changes from the latest KJS sources that support additional 
2963         Number.prototype functions. 
2964
2965         Specifically this patch covers the follow parts of the ECMA 3 spec:
2966         15.7.4.5, 15.7.4.6, and 15.7.4.7 
2967         
2968         Fixes:
2969         <rdar://problem/3663716> missing Number.toFixed (and toPrecision, toExponential)
2970         <rdar://problem/3749492> missing Number.toPrecision prototype implementation
2971         <rdar://problem/3749591> missing Number.toExponential prototype implementation
2972
2973         * kjs/identifier.h: Added toFixed, toPrecision, and toExponential to the
2974         list of supported identifiers (a macro).
2975         * kjs/number_object.cpp: Implemented support for toFixed(), toPrecision(),
2976         and toExponential(). 
2977         (NumberPrototypeImp::NumberPrototypeImp):
2978         (NumberProtoFuncImp::call):
2979         * kjs/number_object.h: Added property names for toFixed, toPrecision,
2980         and toExponential. 
2981         (KJS::NumberProtoFuncImp::):
2982         * tests/mozilla/expected.html: Update results.
2983
2984 2004-08-03  Darin Adler  <darin@apple.com>
2985
2986         Reviewed by Ken.
2987
2988         - added support for copying RegExp objects so 7 more Mozilla regexp tests pass
2989
2990         * kjs/regexp_object.cpp: (RegExpObjectImp::construct): Check for case where
2991         we are supposed to just copy the regular expression object, and do so.
2992         Also tighten up arguments check to handle case where an actual "undefined"
2993         is passed rather than just omitting an argument.
2994
2995         * tests/mozilla/expected.html: Update results.
2996
2997 2004-08-02  Darin Adler  <darin@apple.com>
2998
2999         * tests/mozilla/.cvsignore: Added.
3000         * tests/mozilla/expected.html: Update results.
3001
3002 2004-08-02  Darin Adler  <darin@apple.com>
3003
3004         Reviewed by Ken.
3005
3006         - fixed RegExp.toString so 3 more Mozilla regexp tests pass
3007
3008         * kjs/regexp_object.cpp: (RegExpProtoFuncImp::call):
3009         Append the flags here so more tests paseed.
3010
3011 2004-08-02  Darin Adler  <darin@apple.com>
3012
3013         Reviewed by Ken.
3014
3015         - fixed a couple things making 5 Mozilla regexp tests pass
3016
3017         * kjs/regexp_object.cpp: (RegExpProtoFuncImp::call): Implement toString
3018         for the prototype.
3019         (RegExpObjectImp::construct): Fix bug where the string "undefined" would
3020         be used as the flags string when no parameter was passed.
3021
3022         * kjs/regexp_object.h: (KJS::RegExpPrototypeImp::classInfo):
3023         Added a class info object for RegExp prototype so it can return
3024         a string instead of raising an exception when converting to a string.
3025
3026         * tests/mozilla/expected.html: Update results.
3027
3028 2004-08-02  Darin Adler  <darin@apple.com>
3029
3030         Reviewed by Kevin.
3031
3032         - fix crashes in mozilla tests due to mishandling NaN
3033
3034         * kjs/array_object.cpp: (ArrayProtoFuncImp::call): Rerranged range checks after
3035         calls to toInteger so that NaN will get turned into something that fits in an integer.
3036         These were the ones John already fixed, but his fix used isnan and the new fix is
3037         more efficient.
3038
3039         * kjs/number_object.cpp: (NumberProtoFuncImp::call): Rearranged radix range checks
3040         after a call to toInteger to handle NaN properly. Also removed separate check
3041         for undefined that's not needed.
3042
3043         * kjs/string_object.cpp: (StringProtoFuncImp::call): More of the same kinds of changes
3044         as in the above two files, but for a lot more functions. Also changed one place with
3045         an explicit check for undefined to instead just check isNaN.
3046
3047         * tests/mozilla/run-mozilla-tests: Changed to invoke jst using $SYMROOTS for people
3048         like me who don't keep $SYMROOTS in their $PATH.
3049
3050 === Safari-154 ===
3051
3052 === Safari-153 ===
3053
3054 2004-07-26  Kevin Decker  <kdecker@apple.com>
3055
3056         Changes done by Darin, reviewed by Kevin.
3057
3058         - changed testkjs to build in Xcode rather than from Makefile
3059
3060         * .cvsignore: Removed obsolete files from this list.
3061         * Makefile.am: Removed code to build testkjs; we do this in Xcode now.
3062         Changed to build target "All" rather than default target. This makes us
3063         build the testkjs test tool.
3064         * dummy.cpp: Removed.
3065         * kjs/.cvsignore: Removed obsolete files from this list, including
3066         the testkjs tool, which is now built in the symroots directory.
3067         * kjs/testkjs.cpp: Added copyright notice that was missing, since we have
3068         changed this file. Also this has the nice side effect of causing the tool
3069         to be rebuilt in the new location even if there are no other changes in
3070         your tree when you check this out.
3071         * tests/mozilla/run-mozilla-tests: Invoke perl explicitly so this works
3072         without setting the execute bit on jsDriver.pl.
3073
3074 2004-07-22  Kevin Decker  <kdecker@apple.com>
3075
3076         Reviewed by Darin
3077         
3078         Fixed <rdar://problem/3682340> (error console does not include source urls or line numbers of event exceptions). 
3079
3080         * kjs/function_object.cpp:
3081         (FunctionObjectImp::construct):
3082         * kjs/function_object.h:
3083         * kjs/object.cpp:
3084         (KJS::ObjectImp::construct):
3085         * kjs/object.h:
3086         (KJS::Object::construct):
3087
3088 2004-07-21  Darin Adler  <darin@apple.com>
3089
3090         * bindings/npruntime.h: Fixed typo.
3091
3092 2004-07-19  John Sullivan  <sullivan@apple.com>
3093
3094         Reviewed by Maciej.
3095         
3096         - bulletproofed array.slice() against NAN arguments. Harri noticed this
3097         vulnerability in my patch for 3714644
3098
3099         * kjs/array_object.cpp:
3100         (ArrayProtoFuncImp::call):
3101         handle NAN parameters passed to slice() by clamping to 0 and length.
3102
3103 2004-07-19  Richard Williamson   <rjw@apple.com>
3104
3105         Fixed 3733349.  Prevent Java applet callbacks into JavaScript after applet
3106         has been destroyed.
3107
3108         Reviewed by John.
3109
3110         * bindings/jni/jni_jsobject.cpp:
3111         (JSObject::invoke):
3112         (JSObject::JSObject):
3113
3114 2004-07-16  John Sullivan  <sullivan@apple.com>
3115
3116         Reviewed by Maciej.
3117         
3118         - fixed <rdar://problem/3714644> REGRESSION (125.8-146): bugzilla submit link 
3119         hangs browser with javascript
3120
3121         * kjs/array_object.cpp:
3122         (ArrayProtoFuncImp::call):
3123         Check for undefined type for args[0] the same way we were already checking
3124         for args[1]. In this case, args was zero-length, but we were treating
3125         args[0] like an integer anyway. Resulted in some code looping from a NAN
3126         value to 4, taking approximately forever.
3127
3128         * JavaScriptCore.pbproj/project.pbxproj:
3129         version wars
3130         
3131 === Safari-152 ===
3132
3133 2004-07-14  Maciej Stachowiak  <mjs@apple.com>
3134
3135         Reviewed by John.
3136
3137         <rdar://problem/3711474>: (REGRESSION (125-146): JavaScript 'toString(16)' is broken)
3138         <rdar://problem/3644873>: (REGRESSION (125-140u): secondary list doesn't fill in at Southwest.com)
3139
3140         * kjs/number_object.cpp:
3141         (NumberProtoFuncImp::call): Initialize radix from dradix, not from itself!
3142
3143 2004-07-13  Kevin Decker  <kdecker@apple.com>
3144
3145         Reviewed by kocienda.
3146
3147         - made testkjs and JavaScriptCore a subtarget of 'All'
3148         - testkjs now builds in $SYMROOTS
3149
3150         * JavaScriptCore.pbproj/project.pbxproj:
3151
3152 === Safari-151 ===
3153
3154 2004-06-24  Chris Blumenberg  <cblu@apple.com>
3155
3156         Ignore .mode1 files in JavaScriptCore.pbproj
3157
3158         Reviewed by kocienda.
3159
3160         * JavaScriptCore.pbproj/.cvsignore:
3161
3162 2004-06-23  Richard Williamson   <rjw@apple.com>
3163
3164         Implemented changes for latest npruntime.h.
3165         
3166         Reviewed by Chris.
3167
3168         * JavaScriptCore.pbproj/project.pbxproj:
3169         * bindings/NP_jsobject.cpp:
3170         (listFromVariantArgs):
3171         (identiferFromNPIdentifier):
3172         (_NPN_CreateScriptObject):
3173         (NPN_Call):
3174         (NPN_Evaluate):
3175         (NPN_GetProperty):
3176         (NPN_SetProperty):
3177         (NPN_RemoveProperty):
3178         * bindings/NP_jsobject.h:
3179         * bindings/c/c_class.cpp:
3180         (CClass::methodsNamed):
3181         (CClass::fieldNamed):
3182         * bindings/c/c_instance.cpp:
3183         (CInstance::invokeMethod):
3184         * bindings/c/c_utility.cpp:
3185         (convertNPVariantToValue):
3186         * bindings/c/c_utility.h:
3187         * bindings/npruntime.cpp:
3188         (stringIdentifierEqual):
3189         (stringIdentifierHash):
3190         (getStringIdentifierDictionary):
3191         (intIdentifierEqual):
3192         (intIdentifierHash):
3193         (getIntIdentifierDictionary):
3194         (NPN_GetStringIdentifier):
3195         (NPN_GetStringIdentifiers):
3196         (NPN_GetIntIdentifier):
3197         (NPN_IdentifierIsString):
3198         (NPN_UTF8FromIdentifier):
3199         (NPN_VariantToInt32):
3200         (NPN_VariantToDouble):
3201         (NPN_SetException):
3202         * bindings/npruntime.h:
3203         * bindings/objc/WebScriptObject.mm:
3204         (+[WebScriptObject _convertValueToObjcValue:KJS::root:Bindings::]):
3205         * bindings/runtime_object.cpp:
3206         (RuntimeObjectImp::~RuntimeObjectImp):
3207         * bindings/runtime_root.cpp:
3208         (KJS::Bindings::rootForInterpreter):
3209         * bindings/testbindings.cpp:
3210         (initializeIdentifiers):
3211         (logMessage):
3212         (setDoubleValue):
3213         (setIntValue):
3214         (setBooleanValue):
3215
3216 === JavaScriptCore-146.1 ===
3217
3218 2004-06-16  Richard Williamson   <rjw@apple.com>
3219
3220         Fixed <rdar://problem/3702287> Crash returning nil from bound ObjC
3221
3222         This turned out to be a show stopper for Dashboard.  Accessing a nil
3223         ObjC property from JS caused a crash.  Similar to the problem
3224         3696112 fixed below.
3225         
3226         Reviewed by Trey.
3227
3228         * bindings/objc/objc_runtime.mm:
3229         (KJS::Bindings::ObjcField::valueFromInstance):
3230
3231 === Safari-146 ===
3232
3233 2004-06-16  Richard Williamson   <rjw@apple.com>
3234
3235         Fixed <rdar://problem/3696112>: nil from an Objective-C class seems to get wrapped as a JavaScript proxy that will not print.
3236
3237         This turned out to be a show stopper for Dashboard.  We now
3238         return Undefined() when nil is returned from a ObjC method
3239         that returns an object type.
3240         
3241         Reviewed by Maciej.
3242
3243         * bindings/objc/objc_utility.mm:
3244         (KJS::Bindings::convertObjcValueToValue):
3245
3246 === Safari-145 ===
3247
3248 2004-06-15  Richard Williamson   <rjw@apple.com>
3249
3250         Fixed <rdar://problem/3695875>: Objective-C instances that are exported to JavaScript are too promiscuous
3251
3252         No longer need to check respondsToSelector: for
3253         isSelectorExcludedFromWebScript: and isKeyExcludedFromWebScript:
3254         because these now have a default implementation on NSObject.
3255
3256         Reviewed by Trey.
3257
3258         * bindings/objc/objc_class.mm:
3259         (ObjcClass::methodsNamed):
3260         (ObjcClass::fieldNamed):
3261
3262 2004-06-14  Darin Adler  <darin@apple.com>
3263
3264         Reviewed by Maciej.
3265
3266         - fixed some things for GC that Patrick missed, or that happened after the branch
3267
3268         * bindings/objc/WebScriptObject.mm:
3269         (-[WebScriptObject dealloc]): Moved removeNativeReference call here from private object.
3270         (-[WebScriptObject finalize]): Added.
3271
3272         - added some missing nil checks
3273
3274         * bindings/objc/objc_instance.mm:
3275         (ObjcInstance::ObjcInstance): Check for nil.
3276         (ObjcInstance::~ObjcInstance): Check for nil.
3277         (ObjcInstance::operator=): Check for nil.
3278
3279 2004-06-14  Darin Adler  <darin@apple.com>
3280
3281         Reviewed by me, code changes by Patrick Beard.
3282
3283         - fixed <rdar://problem/3671507>: (WebKit should adopt GC changes and compile with GC enabled)
3284
3285         * bindings/objc/objc_instance.mm:
3286         (ObjcInstance::ObjcInstance): Use CFRetain instead of retain.
3287         (ObjcInstance::~ObjcInstance): Use CFRelease instead of release.
3288         (ObjcInstance::operator=): More of the same.
3289         (ObjcInstance::end): Use [pool drain] if compiling on Tiger.
3290
3291         * bindings/objc/objc_runtime.mm:
3292         (ObjcArray::ObjcArray): Use CFRetain instead of retain.
3293         (ObjcArray::~ObjcArray): Use CFRelease instead of release.
3294         (ObjcArray::operator=): More of the same.
3295
3296         * bindings/testbindings.mm: Fixed incorrect license.
3297         (main): Use [pool drain] if compiling on Tiger.
3298
3299 === Safari-144 ===
3300
3301 2004-06-10  Kevin Decker  <kdecker@apple.com>
3302
3303         Reviewed by John.
3304
3305         * kjs/lexer.cpp: 
3306         (Lexer::setCode):
3307             - fixed <rdar://problem/3682398>: (error console line numbers are offset by 1)
3308         * kjs/lexer.h:
3309         (KJS::Lexer::lineNo):
3310             - fixed <rdar://problem/3682398>: (error console line numbers are offset by 1)
3311
3312 === JavaScriptCore-143.2 ===
3313
3314 2004-06-07  Darin Adler  <darin@apple.com>
3315
3316         - fixed <rdar://problem/3682489>: (JavaScriptGlue no longer compiles because Interpreter::evaluate parameters changed)
3317
3318         * kjs/interpreter.h: Added an overload to make JavaScriptGlue compile.
3319         * kjs/interpreter.cpp: (KJS::Interpreter::evaluate): Implemented the overload.
3320
3321 === JavaScriptCore-143.1 ===
3322
3323 2004-06-04  Kevin Decker  <kdecker@apple.com>
3324
3325         Reviewed by Darin
3326         
3327         - fixed <rdar://problem/3680594>
3328
3329         * kjs/object.cpp:
3330         (KJS::Error::create):
3331
3332 === Safari-143 ===
3333
3334 2004-06-04  Darin Adler  <darin@apple.com>
3335
3336         * kjs/testkjs.cpp: (main): Fix build breakage by adding URL and line number parameters.
3337
3338 2004-06-04  Kevin Decker  <kdecker@apple.com>
3339
3340         Reviewed by Dave.
3341
3342         - ObjC bindings do not (yet) pass along sourceurl or line numbers
3343         - we don't have a way as of yet to accomidate line numbers and urls for dynamic javascript
3344         - changed the wording of an error message
3345         - the lexer, parser, and interpreter have been made "sourceURL aware"
3346         - stored the url into Error
3347          
3348         * bindings/NP_jsobject.cpp:
3349         (NPN_Evaluate):
3350         * bindings/jni/jni_jsobject.cpp:
3351         (JSObject::eval):
3352         * bindings/objc/WebScriptObject.mm:
3353         (-[WebScriptObject evaluateWebScript:]):
3354         * kjs/function.cpp:
3355         (GlobalFuncImp::call):
3356         * kjs/function_object.cpp:
3357         (FunctionObjectImp::construct):
3358         * kjs/internal.cpp:
3359         (Parser::parse):
3360         (InterpreterImp::checkSyntax):
3361         (InterpreterImp::evaluate):
3362         * kjs/internal.h:
3363         * kjs/interpreter.cpp:
3364         (Interpreter::evaluate):
3365         * kjs/interpreter.h:
3366         * kjs/lexer.cpp:
3367         (Lexer::setCode):
3368         * kjs/lexer.h:
3369         (KJS::Lexer::sourceURL):
3370         * kjs/nodes.cpp:
3371         (Node::Node):
3372         (Node::throwError):
3373         (FunctionCallNode::evaluate):
3374         * kjs/nodes.h:
3375         * kjs/object.cpp:
3376         (KJS::Error::create):
3377         * kjs/object.h:
3378
3379 2004-06-04  Richard Williamson   <rjw@apple.com>
3380
3381         Fixed crash when attempting to access properties on nil
3382         object.
3383         
3384         Reviewed by John.
3385
3386         * bindings/objc/objc_instance.mm:
3387         (ObjcInstance::getClass):
3388         * bindings/runtime_object.cpp:
3389         (RuntimeObjectImp::get):
3390         * bindings/testM.js:
3391         * bindings/testbindings.mm:
3392         (-[MyFirstInterface getString]):
3393
3394 2004-05-27  Kevin Decker  <kdecker@apple.com>
3395
3396         Reviewed by Ken.
3397
3398         -revised generated error message content
3399         
3400         * kjs/error_object.cpp:
3401         (ErrorProtoFuncImp::call):
3402         * kjs/internal.cpp:
3403         (Parser::parse):
3404         * kjs/object.cpp:
3405         (KJS::Error::create):
3406
3407 === Safari-142 ===
3408
3409 2004-05-27  Richard Williamson   <rjw@apple.com>
3410
3411         Renamed WebScriptMethods to WebScripting based on feedback from Nancy.
3412
3413         Reviewed by Chris.
3414
3415         * bindings/objc/WebScriptObject.h:
3416
3417 2004-05-27  Darin Adler  <darin@apple.com>
3418
3419         Reviewed by Maciej.
3420
3421         - moved to new symlink technique for embedding frameworks
3422
3423         * JavaScriptCore.pbproj/project.pbxproj: Get rid of embed-frameworks build step
3424         because we don't need it any more.
3425
3426 2004-05-24  Richard Williamson   <rjw@apple.com>
3427
3428         Changed RuntimeArrayImp to inherit from ArrayInstanceImp and
3429         fixed ClassInfo to correctly reflect inheritance.  This is required
3430         because of the runtime checks in JSC for arrays, i.e. in
3431         the Function objects apply method.
3432
3433         Reviewed by Ken.
3434
3435         * bindings/jni/jni_runtime.cpp:
3436         (JavaArray::convertJObjectToArray):
3437         * bindings/objc/objc_utility.mm:
3438         (KJS::Bindings::convertObjcValueToValue):
3439         * bindings/runtime_array.cpp:
3440         (RuntimeArrayImp::RuntimeArrayImp):
3441         * bindings/runtime_array.h:
3442         * bindings/testM.js: Added.
3443         * bindings/testbindings.mm:
3444         (+[MyFirstInterface webScriptNameForSelector:]):
3445         (-[MyFirstInterface logMessages:]):
3446         (-[MyFirstInterface logMessage:prefix:]):
3447         (-[MyFirstInterface callJSObject::]):
3448
3449 2004-05-22  Darin Adler  <darin@apple.com>
3450
3451         Reviewed by Maciej.
3452
3453         - fixed <rdar://problem/3664260>: (JS needs to listen to timezone change notifications)
3454
3455         * kjs/date_object.cpp: (CopyLocalTimeZone): As per Chris Kane and Jordan Hubbard, use <notify.h>
3456         with a hardcoded string of "com.apple.system.timezone", and do CFTimeZoneResetSystem since
3457         CoreFoundation doesn't do this itself. Turns out this affects the default time zone as long as
3458         it hasn't been set explicitly.
3459
3460 === Safari-141 ===
3461
3462 2004-05-20  Richard Williamson   <rjw@apple.com>
3463
3464         Implemented WebScriptObject/DOM wrapper voodoo.  DOM wrappers
3465         can now be referenced like any other WebScriptObject, meaning
3466         you can do JS operations on them.
3467
3468         All added implementation of finalizeForWebScript.
3469
3470         Reviewed by Ken.
3471
3472         * bindings/objc/WebScriptObject.h:
3473         * bindings/objc/WebScriptObject.mm:
3474         (-[WebScriptObject _initializeWithObjectImp:KJS::root:Bindings::]):
3475         (-[WebScriptObject _initWithObjectImp:KJS::root:Bindings::]):
3476         (-[WebScriptObject KJS::]):
3477         (-[WebScriptObject dealloc]):
3478         (-[WebScriptObject callWebScriptMethod:withArguments:]):
3479         (-[WebScriptObject evaluateWebScript:]):
3480         (-[WebScriptObject setValue:forKey:]):
3481         (-[WebScriptObject valueForKey:]):
3482         (-[WebScriptObject stringRepresentation]):
3483         * bindings/objc/WebScriptObjectPrivate.h:
3484         * bindings/objc/objc_instance.mm:
3485         (ObjcInstance::~ObjcInstance):
3486
3487 2004-05-19  Richard Williamson   <rjw@apple.com>
3488
3489         Removed extraneous tabs that were added (by XCode?).
3490
3491         * bindings/objc/WebScriptObject.h:
3492
3493 2004-05-19  Darin Adler  <darin@apple.com>
3494
3495         - fixed headers with licenses mangled by Xcode auto-indenting
3496
3497         * bindings/jni/jni_jsobject.cpp:
3498         * bindings/jni/jni_jsobject.h:
3499         * bindings/runtime_array.h:
3500         * bindings/runtime_root.cpp:
3501         * bindings/runtime_root.h:
3502
3503 2004-05-18  Richard Williamson   <rjw@apple.com>
3504
3505         Added exception logging.  Also check for exception and
3506         set results as appropriate.
3507
3508         Reviewed by Maciej (partially reviewed).
3509
3510         * bindings/objc/WebScriptObject.mm:
3511         (-[WebScriptObject callWebScriptMethod:withArguments:]):
3512         (-[WebScriptObject evaluateWebScript:]):
3513         (-[WebScriptObject setValue:forKey:]):
3514         (-[WebScriptObject valueForKey:]):
3515
3516 2004-05-18  Richard Williamson   <rjw@apple.com>
3517
3518         Finsished implementing support for windowScriptObject.
3519         Had to make WebScriptObjectPrivate.h accessible from
3520         WebCore.
3521
3522         Reviewed by Maciej.
3523
3524         * JavaScriptCore.pbproj/project.pbxproj:
3525         * bindings/objc/WebScriptObjectPrivate.h:
3526
3527 2004-05-18  Richard Williamson   <rjw@apple.com>
3528
3529         Use KVC to set/get values instead of directly accessing
3530         ivars.
3531
3532         Reviewed by Maciej.
3533
3534         * bindings/objc/WebScriptObject.mm:
3535         (-[WebScriptObject callWebScriptMethod:withArguments:]):
3536         (+[WebScriptObject _convertValueToObjcValue:KJS::root:Bindings::]):
3537         * bindings/objc/objc_runtime.mm:
3538         (ObjcField::valueFromInstance):
3539         (convertValueToObjcObject):
3540         (ObjcField::setValueToInstance):