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