48ebe1f9756b5ef17728e5e183e5453f21a489d6
[WebKit-https.git] / JavaScriptCore / ChangeLog
1 2006-07-29  Sam Weinig  <sam.weinig@gmail.com>
2
3         Reviewed by Darin.
4
5         - patch for http://bugzilla.opendarwin.org/show_bug.cgi?id=10080
6           Adopt pedantic changes from the Unity project to improve 
7           cross-compiler compatibility
8
9           Changes include:
10           * Removing trailing semicolon from namespace braces.
11           * Removing trailing comma from last enum declaration.
12           * Updating to match style guidelines.
13           * Adding missing newline to the end of the file.
14           * Turning on gcc warning for missing newline at the end of a source file
15             (GCC_WARN_ABOUT_MISSING_NEWLINE in Xcode, -Wnewline in gcc).
16           * Alphabetical sorting of Xcode source list files. 
17           * Replace use of non-portable variable-size array with Vector.
18           * Use C-style comments instead of C++ comments in files that might
19             be included by either C or C++ files.
20
21         * API/JSCallbackConstructor.cpp:
22         (KJS::JSCallbackConstructor::construct):
23         * API/JSCallbackFunction.cpp:
24         (KJS::JSCallbackFunction::callAsFunction):
25         * API/JSCallbackObject.cpp:
26         (KJS::JSCallbackObject::construct):
27         (KJS::JSCallbackObject::callAsFunction):
28         * JavaScriptCore.xcodeproj/project.pbxproj:
29         * JavaScriptCorePrefix.h:
30         * bindings/jni/jni_class.cpp:
31         (JavaClass::fieldNamed):
32         * bindings/jni/jni_class.h:
33         * bindings/jni/jni_instance.cpp:
34         (JavaInstance::JavaInstance):
35         (JavaInstance::valueOf):
36         * bindings/jni/jni_objc.mm:
37         (KJS::Bindings::dispatchJNICall):
38         * bindings/jni/jni_runtime.cpp:
39         (JavaParameter::JavaParameter):
40         (JavaArray::JavaArray):
41         * bindings/jni/jni_runtime.h:
42         * bindings/jni/jni_utility.h:
43         * bindings/objc/objc_instance.h:
44         * bindings/runtime_array.h:
45         * kjs/collector.h:
46         * kjs/config.h:
47         * kjs/ustring.cpp:
48         * wtf/Platform.h:
49
50 2006-07-29  Mike Emmel  <mike.emmel@gmail.com>
51
52         Reviewed by Darin.
53
54         - fixes for Linux build
55
56         * JavaScriptCoreSources.bkl: Added new files to build, kjs/PropertyNameArray.cpp
57         and kjs/testkjs.cpp, and removed old files.
58
59 2006-07-24  Dan Waylonis  <waylonis@google.com>
60
61         Reviewed and tweaked a bit by Darin.
62
63         - fix http://bugzilla.opendarwin.org/show_bug.cgi?id=9902
64           jsNull and NSNull not properly converted between JS and ObjC
65
66         * bindings/objc/objc_utility.mm: (KJS::Bindings::convertObjcValueToValue):
67         Added case for converting NSNull to jsNull.
68
69 2006-07-24  Rob Buis  <buis@kde.org>
70
71         Reviewed by Darin.
72
73         http://bugzilla.opendarwin.org/show_bug.cgi?id=4258
74         Date().toString() only includes GMT offset, not timezone string
75
76         Use the info in tm_zone to append timezone abbreviation
77         to Date().toString().
78
79         * kjs/date_object.cpp:
80         (KJS::formatTime):
81
82 2006-07-24  Rob Buis  <buis@kde.org>
83
84         Reviewed by Darin.
85
86         http://bugzilla.opendarwin.org/show_bug.cgi?id=5257
87         setYear() does not match FireFox/IE behavior
88
89         Make sure the right values end up in tm_year.
90
91         * kjs/date_object.cpp:
92         (KJS::formatTime):
93
94 2006-07-23  Mark Rowe  <opendarwin.org@bdash.net.nz>
95
96         Reviewed by Maciej.
97
98         Bug 9686: [Drosera] Need the ability to break into Drosera on Javascript exceptions
99         http://bugzilla.opendarwin.org/show_bug.cgi?id=9686
100
101         JavaScriptCore portion of the fix.
102
103         * JavaScriptCore.exp: Update symbol for change in argument type.
104         * kjs/debugger.cpp:
105         (Debugger::detach): Clear map of recent exceptions.
106         (Debugger::hasHandledException): Track the most recent exception
107         thrown by an interpreter.
108         (Debugger::exception): Change exception argument to a JSValue.
109         * kjs/debugger.h:
110         * kjs/nodes.cpp:
111         (Node::debugExceptionIfNeeded): Notify the debugger of an exception
112         if it hasn't seen it before.
113         (ThrowNode::execute): Notify the debugger that an exception is being thrown.
114         * kjs/nodes.h:
115
116     2006-07-23  Geoffrey Garen  <ggaren@apple.com>
117
118         Patch by Eric Albert, reviewed by Darin and me.
119         
120         - Fixed <rdar://problem/4645931> JavaScriptCore stack-scanning code 
121         crashes (Collector::markStackObjectsConservatively)
122         
123         * bindings/jni/jni_jsobject.cpp: On 64bit systems, jint is a long, not an
124         int.
125         (JavaJSObject::getSlot):
126         (JavaJSObject::setSlot):
127         * kjs/collector.cpp:
128         (KJS::Collector::markCurrentThreadConservatively): Use a pointer instead of
129         an int as 'dummy,' because on LP64 systems, an int is not pointer-aligned,
130         and we want to scan the stack for pointers.
131         * JavaScriptCore.xcodeproj/project.pbxproj: After a tense cease-fire, the 
132         XCode war has started up again!
133
134 === Safari-521.20 ===
135
136 2006-07-21  Geoffrey Garen  <ggaren@apple.com>
137
138         Reviewed by Darin.
139
140         <rdar://problem/4507265> REGRESSION: overlays don't work on HousingMaps.com (Google Maps-based site)
141
142         - Added support for strings that masquerade as undefined. Currently used
143         by WebCore to implement undetectable style.filter.
144         
145         The name is a little long, but it's only used in one line of code, so I
146         thought clarity should win over brevity.
147
148         * JavaScriptCore.exp:
149         * JavaScriptCore.xcodeproj/project.pbxproj:
150         * kjs/object.h:
151         * kjs/string_object.h:
152         (KJS::StringInstanceThatMasqueradesAsUndefined::StringInstanceThatMasqueradesAsUndefined):
153         (KJS::StringInstanceThatMasqueradesAsUndefined::masqueradeAsUndefined):
154         (KJS::StringInstanceThatMasqueradesAsUndefined::toBoolean):
155
156 === Safari-521.19 ===
157
158 2006-07-20  Steve Falkenburg  <sfalken@apple.com>
159
160         Fix the build
161
162         * kjs/function.cpp:
163         (KJS::escapeStringForPrettyPrinting):
164
165 2006-07-19  Anders Carlsson  <acarlsson@apple.com>
166
167         Reviewed by Darin.
168
169         <rdar://problem/4620655> REGRESSION(10.4.7-10.5): preview button for a blogger.com post doesn't work
170         
171         * kjs/nodes2string.cpp:
172         (StringNode::streamTo):
173         Return the escaped string.
174         
175         (RegExpNode::streamTo):
176         Use the correct syntax.
177         
178         * kjs/function.cpp:
179         (KJS::escapeStringForPrettyPrinting):
180         * kjs/function.h:
181         Add escape function which escapes a string for pretty-printing so it can be parsed again.
182         
183         * wtf/unicode/icu/UnicodeIcu.h:
184         (WTF::Unicode::isPrintableChar):
185         New function.
186
187 2006-07-18  Maciej Stachowiak  <mjs@apple.com>
188
189         Reviewed by Adele Peterson.
190         
191         <rdar://problem/4589530> REGRESSION: null character in JS string causes parse error (works in Tiger and in other browsers)
192
193         * kjs/lexer.cpp:
194         (Lexer::shift):
195         (Lexer::lex):
196         (Lexer::record16):
197         (Lexer::scanRegExp):
198         * kjs/lexer.h:
199
200 2006-07-18  Tim Omernick  <timo@apple.com>
201
202         Reviewed by Tim Hatcher.
203
204         Removed a misleading comment; we recently added support for the NPNVPluginElementNPObject
205         variable.
206
207         * bindings/npapi.h:
208
209 === Safari-521.18 ===
210
211 2006-07-18  Timothy Hatcher  <timothy@apple.com>
212
213         Made the following headers public:
214
215         * JavaScriptCore.h
216         * JSBase.h
217         * JSContextRef.h
218         * JSObjectRef.h
219         * JSStringRef.h
220         * JSValueRef.h
221
222         * JavaScriptCore.xcodeproj/project.pbxproj:
223
224 2006-07-17  Geoffrey Garen  <ggaren@apple.com>
225
226         Reviewed by Maciej.
227         
228         - Added automatic prototype creation for classes.
229         
230         A class stores a weak reference to a prototype, which is cleared when
231         the prototype is garbage collected, to avoid a reference cycle.
232         
233         We now have an attributes field in JSClassDefinition, that currently is
234         used only to override automatic prototype creation when you want to manage your
235         own prototypes, but can be extended in the future for other nefarious purposes.
236         
237         Similarly, we have JSObjectMake and JSObjectMakeWithPrototype, the latter
238         allowing you to manage your own prototypes.
239         
240         JSObjectMakeConstructor is more interesting now, able to make a constructor
241         on your behalf if you just give it a class.
242         
243         - Removed bogus old code from minidom.js.
244         
245         - Tweaked the headerdocs.
246         
247         - Added more GC testing, which caught some leaks, and tested more funny 
248         edge cases in lookup, which caught a lookup bug. Removed some testing 
249         we used to do with MyObject because it was redundant with the new, cool 
250         stuff.
251         
252         While fixing the lookup bug I retracted this change:
253         
254             "If a static setProperty callback returns 'false', to indicate that the
255             property was not set, we no longer forward the set request up the class
256             chain, because that's almost certainly not what the programmer expected."
257
258         Returning false when setting a static property is a little silly, but you can see
259         it being useful when shadowing a base class's static properties, and, regardless
260         of usefullness, this is the defined behavior of the setProperty callback.
261         
262         - Plus a little ASCII art, for the kids.
263
264 2006-07-17  Timothy Hatcher  <timothy@apple.com>
265
266         Reviewed by Maciej.
267
268         <rdar://problem/4634874> WebScriptObject and WebUndefined are no longer defined by WebKit
269
270         Moves WebScriptObject and WebUndefined up to WebCore.
271         This change does create an upwards-dependancy on WebScriptObject existing
272         in the loaded process, but this code path in JavaScriptCore does not get used
273         unless it is through WebKit/WebCore. Moving all of the binding code out of
274         JavaScriptCore might make sense in the future.
275
276         * JavaScriptCore.exp:
277         * JavaScriptCore.xcodeproj/project.pbxproj:
278         * bindings/objc/WebScriptObject.h: Replaced.
279         * bindings/objc/WebScriptObject.mm: Removed.
280         * bindings/objc/WebScriptObjectPrivate.h: Removed.
281         * bindings/objc/objc_class.h:
282         * bindings/objc/objc_instance.h:
283         * bindings/objc/objc_instance.mm:
284         (ObjcInstance::~ObjcInstance):
285         * bindings/objc/objc_runtime.h:
286         * bindings/objc/objc_runtime.mm:
287         (convertValueToObjcObject):
288         * bindings/objc/objc_utility.mm:
289         (KJS::Bindings::convertValueToObjcValue):
290         (KJS::Bindings::convertObjcValueToValue):
291         (KJS::Bindings::createObjcInstanceForValue):
292
293 2006-07-17  Darin Adler  <darin@apple.com>
294
295         * API/JSBase.h: Fix comment formatting where things used to be lined up but
296         are now ragged. Got rid of spaces that attempted to line things up.
297         * API/JSObjectRef.h: Ditto. Also add missing periods for a couple of comments.
298
299 2006-07-17  Geoffrey Garen  <ggaren@apple.com>
300
301         Reviewed by Maciej.
302         
303         - Removed the exception parameter from the initialize callback and, by extension,
304         JSObjectMake. We have never had a need for exceptions when iniitializing,
305         so the parameter seemed likely to "get in the way." 
306         
307         Also, an exception in JavaScript is thrown in response to input -- 
308         "invalid URL", "index not a number", etc., so it's the job of the 
309         constructor function, not the initialize method, to throw.
310         
311         If initialize *really* wants to throw, it can communicate the throw to
312         the constructor through the constructed object's private data (e.g., set
313         it to NULL, signaling to the consntructor that initialization failed.)
314         
315         - Added JSObjectMakeWithData, which enables a constructor to set private
316         data on an object *before* it has been initialized. That way, the initialize
317         methods can properly operate on the data. 
318
319         * API/JSNode.c: Moved ref into the initialize method, for better encapsulation,
320         now that it's possible.
321         * API/JSNodeList.c: ditto
322         * API/minidom.c:
323         (main): Do more aggressive garbage collection to test ref/deref and 
324         initialize/finalize.
325         * API/minidom.js: store childNodes in a temporary so it doesn't get re-created
326         like a thousand times. This makes debugging ref/deref easier
327
328 2006-07-17  Geoffrey Garen  <ggaren@apple.com>
329
330         Reviewed by Maciej.
331         
332         - Changed the initialize callback to run from least derived class (parent
333         class) to most derived class. This enables C++ style initialization,
334         and derived class overriding of member data.
335         
336         - Added excpetion propopgation to JSObjectMake, to support initialize
337         exceptions, and generally round out our policy of making function
338         signatures as long as possible.
339
340         * API/JSCallbackObject.h: Use ExecState instead of ContextRef, cuz we're
341         in C++ land now.
342
343 2006-07-17  Geoffrey Garen  <ggaren@apple.com>
344
345         Reviewed by Maciej.
346         
347         - Changed JSObjectMakeConstructor to JSObjectMakeConstructorWithCallback,
348         to match JSObjectMakeFunctionWithCallback.
349         
350         - Added prototype parameter, so the generated constructor
351         automatically works with hasInstance / instanceof
352         
353         - Moved hasInstance implementation from InternalFunctionImp to JSObject
354         so that subclasses can inherit it without inheriting function-related baggage.
355         More refactoring here would be good, but this seems like a good short-term
356         solution.
357
358         (KJS::JSCallbackFunction::implementsHasInstance): override and return false,
359         because callback functions aren't constructors.
360
361 2006-07-17  Maciej Stachowiak  <mjs@apple.com>
362
363         Reviewed by Geoff.
364         
365         - add a JSContextRef parameter to all JSValueRef, JSObjectRef, and JSContextRef operations;
366         except JSObject{Get,Set}PrivateData which can be assumed to be simple pure accessors.
367         
368         Also renamed the parameter "context" to "ctx" because it makes the code read better with this pervasive
369         but usually uninteresting parameter.
370
371         * API/JSBase.cpp:
372         (JSEvaluateScript):
373         (JSCheckScriptSyntax):
374         (JSGarbageCollect):
375         * API/JSBase.h:
376         * API/JSCallbackObject.cpp:
377         (KJS::JSCallbackObject::JSCallbackObject):
378         (KJS::JSCallbackObject::init):
379         (KJS::JSCallbackObject::getOwnPropertySlot):
380         (KJS::JSCallbackObject::put):
381         (KJS::JSCallbackObject::deleteProperty):
382         (KJS::JSCallbackObject::toNumber):
383         (KJS::JSCallbackObject::toString):
384         * API/JSContextRef.cpp:
385         (JSGlobalContextCreate):
386         (JSGlobalContextRetain):
387         (JSGlobalContextRelease):
388         (JSContextGetGlobalObject):
389         * API/JSContextRef.h:
390         * API/JSNode.c:
391         (JSNodePrototype_appendChild):
392         (JSNodePrototype_removeChild):
393         (JSNodePrototype_replaceChild):
394         (JSNode_getNodeType):
395         (JSNode_getFirstChild):
396         (JSNode_prototype):
397         * API/JSNodeList.c:
398         (JSNodeListPrototype_item):
399         (JSNodeList_length):
400         (JSNodeList_getProperty):
401         (JSNodeList_prototype):
402         * API/JSObjectRef.cpp:
403         (JSObjectMake):
404         (JSObjectMakeFunctionWithCallback):
405         (JSObjectMakeConstructor):
406         (JSObjectMakeFunction):
407         (JSObjectGetPrototype):
408         (JSObjectSetPrototype):
409         (JSObjectHasProperty):
410         (JSObjectGetProperty):
411         (JSObjectSetProperty):
412         (JSObjectGetPropertyAtIndex):
413         (JSObjectSetPropertyAtIndex):
414         (JSObjectDeleteProperty):
415         (JSObjectIsFunction):
416         (JSObjectCallAsFunction):
417         (JSObjectIsConstructor):
418         (JSObjectCallAsConstructor):
419         (JSObjectCopyPropertyNames):
420         * API/JSObjectRef.h:
421         * API/JSStringRef.cpp:
422         * API/JSValueRef.cpp:
423         (JSValueGetType):
424         (JSValueIsUndefined):
425         (JSValueIsNull):
426         (JSValueIsBoolean):
427         (JSValueIsNumber):
428         (JSValueIsString):
429         (JSValueIsObject):
430         (JSValueIsObjectOfClass):
431         (JSValueIsEqual):
432         (JSValueIsStrictEqual):
433         (JSValueIsInstanceOfConstructor):
434         (JSValueMakeUndefined):
435         (JSValueMakeNull):
436         (JSValueMakeBoolean):
437         (JSValueMakeNumber):
438         (JSValueMakeString):
439         (JSValueToBoolean):
440         (JSValueToNumber):
441         (JSValueToStringCopy):
442         (JSValueToObject):
443         (JSValueProtect):
444         (JSValueUnprotect):
445         * API/JSValueRef.h:
446         * API/minidom.c:
447         (print):
448         * API/testapi.c:
449         (MyObject_getProperty):
450         (MyObject_deleteProperty):
451         (MyObject_callAsFunction):
452         (MyObject_callAsConstructor):
453         (MyObject_convertToType):
454         (print_callAsFunction):
455         (main):
456
457 2006-07-16  Geoffrey Garen  <ggaren@apple.com>
458
459         Approved by Maciej, RS by Beth.
460         
461         JSObjectMakeFunction -> JSObjectMakeFunctionWithCallback
462         JSObjectMakeFunctionWithBody -> JSObjectMakeFunction
463         
464         because the latter is more common, and more fundamental, than the former.
465
466         * API/APICast.h:
467         (toJS):
468         * API/JSBase.h:
469         * API/JSCallbackObject.cpp:
470         (KJS::JSCallbackObject::getOwnPropertySlot):
471         (KJS::JSCallbackObject::put):
472         (KJS::JSCallbackObject::deleteProperty):
473         (KJS::JSCallbackObject::getPropertyNames):
474         (KJS::JSCallbackObject::staticValueGetter):
475         (KJS::JSCallbackObject::staticFunctionGetter):
476         * API/JSClassRef.cpp:
477         (OpaqueJSClass::OpaqueJSClass):
478         (OpaqueJSClass::~OpaqueJSClass):
479         * API/JSClassRef.h:
480         * API/JSObjectRef.cpp:
481         (JSClassCreate):
482         (JSObjectMakeFunctionWithCallback):
483         (JSObjectMakeFunction):
484         (OpaqueJSPropertyNameArray::OpaqueJSPropertyNameArray):
485         (JSObjectCopyPropertyNames):
486         * API/JSObjectRef.h:
487         * API/minidom.c:
488         (main):
489         * API/testapi.c:
490         (main):
491         * ChangeLog:
492         * JavaScriptCore.exp:
493
494 2006-07-16  Geoffrey Garen  <ggaren@apple.com>
495
496         Laughed at by Beth.
497         
498         Replace __JS with OpaqueJS because the former, while used by CF, is
499         a prefix that's triply-reserved by the compiler. (_* is reserved in global 
500         names, _[A-Z] is reserved in all names, and __ is reserved in all names 
501         in C++.)
502         
503         Opaque is an alternative used by other Mac OS X framewokrs.
504
505         * API/APICast.h:
506         (toJS):
507         * API/JSBase.h:
508         * API/JSCallbackObject.cpp:
509         (KJS::JSCallbackObject::getOwnPropertySlot):
510         (KJS::JSCallbackObject::put):
511         (KJS::JSCallbackObject::deleteProperty):
512         (KJS::JSCallbackObject::getPropertyNames):
513         (KJS::JSCallbackObject::staticValueGetter):
514         (KJS::JSCallbackObject::staticFunctionGetter):
515         * API/JSClassRef.cpp:
516         (OpaqueJSClass::OpaqueJSClass):
517         (OpaqueJSClass::~OpaqueJSClass):
518         * API/JSClassRef.h:
519         * API/JSObjectRef.cpp:
520         (JSClassCreate):
521         (OpaqueJSPropertyNameArray::OpaqueJSPropertyNameArray):
522         (JSObjectCopyPropertyNames):
523
524 2006-07-16  Darin Adler  <darin@apple.com>
525
526         - try to fix Windows build
527
528         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
529         Added some recently added files, removed some recently removed.
530
531 2006-07-16  Geoffrey Garen  <ggaren@apple.com>
532
533         Reviewed by Maciej.
534         
535         - Change getProperty* to return undefined, rather than NULL, for missing
536         properties, since that's what the spec says. Also added exception out
537         parameters to the *Index functions, because they can call through to the
538         regular functions, which can throw for custom objects.
539
540         * API/JSObjectRef.cpp:
541         (JSObjectGetProperty):
542         (JSObjectGetPropertyAtIndex):
543         (JSObjectSetPropertyAtIndex):
544         * API/JSObjectRef.h:
545         * API/testapi.c:
546         (main):
547
548 2006-07-16  Geoffrey Garen  <ggaren@apple.com>
549
550         Reviewed by Maciej.
551         
552         - Properly document and handle NULL callbacks for static properties. We
553         throw an exception in any case other than a ReadOnly property with a NULL
554         setProperty callback, because a NULL callback almost certainly indicates 
555         a programming error. Also throw an exception if hasProperty returns true
556         for a property that getProperty can't get.
557         
558         - If a static setProperty callback returns 'false', to indicate that the
559         property was not set, we no longer forward the set request up the class
560         chain, because that's almost certainly not what the programmer expected.
561
562         * API/JSCallbackObject.cpp:
563         (KJS::JSCallbackObject::getOwnPropertySlot):
564         (KJS::JSCallbackObject::put):
565         (KJS::JSCallbackObject::staticValueGetter):
566         (KJS::JSCallbackObject::staticFunctionGetter):
567         (KJS::JSCallbackObject::callbackGetter):
568         * API/JSObjectRef.h:
569         * API/minidom.js:
570         * API/testapi.c:
571         (MyObject_hasProperty):
572         * API/testapi.js:
573
574 2006-07-16  Geoffrey Garen  <ggaren@apple.com>
575
576         Reviewed by Maciej.
577         
578         - Added names to functions.
579         
580         - Removed GetPrivate/SetPrivate from callbackFunctions and callbackConstructors.
581         The private data idiom is that a JS object stores its native implementation
582         as private data. For functions and constructors, the native implementation is nothing
583         more than the callback they already store, so supporting private data, too,
584         confuses the idiom. If you *really* want, you can still create a custom 
585         function with private data.
586
587         * API/JSCallbackConstructor.cpp:
588         * API/JSCallbackConstructor.h:
589         * API/JSCallbackFunction.cpp:
590         (KJS::JSCallbackFunction::JSCallbackFunction):
591         * API/JSCallbackFunction.h:
592         * API/JSCallbackObject.cpp:
593         (KJS::JSCallbackObject::staticFunctionGetter):
594         * API/JSObjectRef.cpp:
595         (JSObjectMakeFunction):
596         (JSObjectMakeFunctionWithBody):
597         (JSObjectGetPrivate):
598         (JSObjectSetPrivate):
599         * API/JSObjectRef.h:
600         * API/minidom.c:
601         (main):
602         * API/testapi.c:
603         (main):
604
605 2006-07-15  Maciej Stachowiak  <mjs@apple.com>
606
607         Reviewed by Darin.
608         
609         - switch property lists to be vector+set of Identifiers instead of list of References
610         
611         This has the following benefits:
612         
613         - no duplicates in property lists
614         - simplifies API calls
615         - probably more efficient, since linked list is gone
616         - entirely removed Reference, ReferenceList and ProtectedReference types from the API
617
618         * kjs/PropertyNameArray.cpp: Added.
619         (KJS::PropertyNameArray::add): Check set, if not already there, add to
620         vector.
621         * kjs/PropertyNameArray.h: Added.
622         (KJS::PropertyNameArray::PropertyNameArray): Newly added type, combines
623         a set and a vector to make a unique but ordered list of identifiers.
624         (KJS::PropertyNameArray::begin): ditto
625         (KJS::PropertyNameArray::end): ditto
626         (KJS::PropertyNameArray::size): ditto
627         (KJS::PropertyNameArray::operator[]): ditto
628         * kjs/array_instance.h:
629         * kjs/array_object.cpp:
630         (ArrayInstance::getPropertyNames): renamed from getPropertyList, updated
631         for PropertyNameArray
632         (ArrayInstance::setLength): updated for PropertyNameArray
633         (ArrayInstance::pushUndefinedObjectsToEnd): ditto
634         * kjs/nodes.cpp:
635         (ForInNode::execute): updated for PropertyNameArray
636         * kjs/nodes.h:
637         * kjs/object.cpp:
638         (KJS::JSObject::getPropertyNames): renamed from getPropertyList, updated
639         for PropertyNameArray
640         * kjs/object.h:
641         * kjs/property_map.cpp:
642         (KJS::PropertyMap::getEnumerablePropertyNames): updated for PropertyNameArray
643         (KJS::PropertyMap::getSparseArrayPropertyNames): ditto
644         * kjs/property_map.h:
645         * kjs/protected_reference.h: Removed.
646         * kjs/reference.cpp: Removed.
647         * kjs/reference.h: Removed.
648         * kjs/reference_list.cpp: Removed.
649         * kjs/reference_list.h: Removed.
650         * kjs/scope_chain.cpp:
651         (KJS::ScopeChain::print): Use PropertyNamesArray instead of ReferenceList.
652         * kjs/string_object.cpp:
653         (StringInstance::getPropertyNames): Updated for new approach.
654         * kjs/string_object.h:
655         * kjs/ustring.h:
656         * API/APICast.h:
657         (toJS): Added overload for PropertyNameAccumulatorRef / PropertyNameArray*
658         (toRef): ditto
659         * API/JSBase.h:
660         * API/JSCallbackObject.cpp:
661         (KJS::JSCallbackObject::getPropertyNames): Fixed for new API.
662         * API/JSCallbackObject.h:
663         * API/JSObjectRef.cpp:
664         (__JSPropertyNameArray::__JSPropertyNameArray): Type used for a publicly vended
665         JSPropertyNameArrayRef.
666         (JSObjectCopyPropertyNames): New API call - renamed / refactored from 
667         JSObjectCreatePropertyList
668         (JSPropertyNameArrayRetain): new retain call for JSPropertyNameArray.
669         (JSPropertyNameArrayRelease): new release call for - " -.
670         (JSPropertyNameArrayGetCount): Instead of having to use a stateful enumerator you
671         can now get the count and items in any order.
672         (JSPropertyNameArrayGetNameAtIndex): See above.
673         (JSPropertyNameAccumulatorAddName): What you add properties to is now an opaque 
674         accumulator object.
675         * API/JSObjectRef.h: Prototyped new functions, removed old ones
676         * JavaScriptCore.exp: Updated exported symbols.
677         * JavaScriptCore.xcodeproj/project.pbxproj: Added new files, removed old.
678         * API/testapi.c:
679         (MyObject_getPropertyNames): Renamed / fixed callback to fit new paradigm.
680         (main): Updated for new API.
681
682 2006-07-15  Darin Adler  <darin@apple.com>
683
684         - oops, missed a few more arrays that had to be const
685
686         * API/JSNode.c:
687         (JSNodePrototype_appendChild): Added const.
688         (JSNodePrototype_removeChild): Ditto.
689         (JSNodePrototype_replaceChild): Ditto.
690         (JSNode_construct): Ditto.
691         * API/JSNodeList.c:
692         (JSNodeListPrototype_item): Ditto.
693         * API/JSObjectRef.cpp:
694         (JSObjectMakeFunctionWithBody): Ditto.
695         (JSObjectCallAsFunction): Ditto.
696         (JSObjectCallAsConstructor): Ditto.
697         * API/minidom.c:
698         (print): Ditto.
699         * API/testapi.c:
700         (MyObject_callAsFunction): Ditto.
701         (MyObject_callAsConstructor): Ditto.
702         (print_callAsFunction): Ditto.
703         (myConstructor_callAsConstructor): Ditto.
704
705 2006-07-15  Darin Adler  <darin@apple.com>
706
707         Reviewed by Maciej.
708
709         * API/JSNode.h: Made an array parameter const.
710         * API/JSObjectRef.h: Made array parameters const. Fixed a comment.
711
712 2006-07-15  Geoffrey Garen  <ggaren@apple.com>
713
714         Reviewed by Maciej.
715         
716         - JSObjectMakeFunctionWithBody includes a function name and named parameters now.
717
718         * API/JSObjectRef.cpp:
719         (JSObjectMakeFunctionWithBody):
720         * API/JSObjectRef.h:
721         * API/testapi.c:
722         (assertEqualsAsUTF8String): More informative failure reporting.
723         (main): Test more function cases.
724
725 2006-07-15  Geoffrey Garen  <ggaren@apple.com>
726
727         Reviewed by Maciej.
728
729         - Moved the arguments passed to JSClassCreate into a single structure,
730         called JSClassDefinition. This will enable easier structure 
731         migration/versioning in the future, if necessary.
732         
733         - Added support for class names.
734         
735         - kJSClassDefinitionNull replaces kJSObjectCallbacksNone.
736         
737         - JSClass is becoming a fairly complex struct, so I migrated all of its
738         implementation other than reference counting to the sruct.
739         
740         - Also moved JSClass* functions in the API to JSObjectRef.cpp, since they're
741         declared in JSObjectRef.h
742         
743         - Also added some more informative explanation to the class structure doc.
744         
745 2006-07-15  Darin Adler  <darin@apple.com>
746
747         Reviewed by Geoff.
748
749         - fix http://bugzilla.opendarwin.org/show_bug.cgi?id=8395
750           <rdar://problem/4613467>
751           REGRESSION: RegEx seems broken for hex escaped non breaking space
752
753         Test: fast/js/regexp-extended-characters-more.html
754
755         * pcre/pcre_exec.c:
756         (match): Got rid of utf16Length local variable to guarantee there's no
757         extra stack usage in recursive calls. Fixed two places in the PCRE_UTF16
758         code that were using the length variable, which is the UTF-8 length of
759         a character in the pattern, to move in the UTF-16 subject string. Instead
760         they hardcode lengths of 1 and 2 since the code already handles BMP
761         characters and surrogate pairs separately. Also fixed some DPRINTF so
762         I could compile with DEBUG on.
763         (pcre_exec): Changed a place that was checking for multibyte characters
764         in the subject string to use ISMIDCHAR. Instead it was using hardcoded
765         logic that was right for UTF-8 but wrong for UTF-16.
766
767         * pcre/pcre_compile.c: (pcre_compile2): Fixed a DPRINTF so I could compile
768         with DEBUG on.
769
770 2006-07-14  Geoffrey Garen  <ggaren@apple.com>
771
772         RS by Maciej.
773         
774         Global replace in the API of argc/argv with argumentCount/arguments.
775
776 2006-07-14  Geoffrey Garen  <ggaren@apple.com>
777
778         Reviewed by Maciej.
779         
780         - Finalized exception handling in the API.
781         
782         setProperty can throw because it throws for built-in arrays. getProperty
783         and deleteProperty can throw because setProperty can throw and we want
784         to be consistent, and also because they seem like "actions." callAsFunction,
785         callAsConstructor, and hasInstance can throw, because they caan throw for
786         all built-ins.
787         
788         toBoolean can't throw because it's defined that way in the spec.
789         
790         - Documented that toBoolean and toObject can't be overridden by custom 
791         objects because they're defined that way in the spec.
792
793 === Safari-521.17 ===
794
795 2006-07-14  Geoffrey Garen  <ggaren@apple.com>
796
797         Reviewed by Maciej.
798         
799         - Implemented ref-counting of JSContexts by splitting into two datatypes:
800         JSGlobalContext, which you can create/retain/release, and JSContext, which
801         you can't.
802         
803         Internally, you retain a JSGlobalContext/ExecState by retaining its
804         interpreter, which, in the case of a global ExecState, owns it.
805         
806         - Also made ~Interpreter() protected to catch places where Interpreter
807         is manually deleted. (Can't make it private because some crazy fool
808         decided it would be a good idea to subclass Interpreter in other frameworks.
809         I pity da fool.)
810
811         * API/APICast.h: 
812         (toJS): Added cast for new JSGlobalContext
813         * API/JSStringRef.h: Changed vague "you must" language to more specific
814         (but, ultimately, equally vague) "behavior is undefined if you don't" 
815         language.
816         (KJS::Interpreter::Interpreter): Factored more common initialization into
817         init()
818         * kjs/interpreter.h:
819         (KJS::Interpreter::ref): new
820         (KJS::Interpreter::deref): new
821         (KJS::Interpreter::refCount): new
822         * kjs/testkjs.cpp: 
823         (doIt): Ref-count the interpreter.
824
825 2006-07-14  Maciej Stachowiak  <mjs@apple.com>
826
827         Reviewed by Geoff.
828         
829         - removed bool return value from JSObjectSetProperty, since it is inefficient and
830         also doesn't work quite right
831         - added JSObjectGetPropertyAtIndex and JSObjectSetPropertyAtIndex
832
833         * API/JSObjectRef.cpp:
834         (JSObjectSetProperty): Removed return value and canPut stuff.
835         (JSObjectGetPropertyAtIndex): Added.
836         (JSObjectSetPropertyAtIndex): Added.
837         * API/JSObjectRef.h: Prototyped and documented new functions.
838
839 2006-07-14  Geoffrey Garen  <ggaren@apple.com>
840
841         Reviewed by Beth.
842         
843         Moved JSCheckScriptSyntax, JSEvaluateScript, and JSGarbageCollect into
844         JSBase.h/.cpp. They don't belong in the value-specific or context-specific 
845         files because they're not part of the value or context implementations.
846
847         * API/JSBase.h:
848         * API/JSContextRef.cpp:
849         (JSContextGetGlobalObject):
850         * API/JSContextRef.h:
851         * API/JSValueRef.cpp:
852         (JSValueUnprotect):
853         * API/JSValueRef.h:
854         * JavaScriptCore.xcodeproj/project.pbxproj:
855
856 2006-07-13  Timothy Hatcher  <timothy@apple.com>
857
858         Reviewed by Maciej.
859
860         Moved JavaScriptCore to be a public framework.
861
862         * JavaScriptCore.xcodeproj/project.pbxproj:
863
864 2006-07-13  Mark Rowe  <opendarwin.org@bdash.net.nz>
865
866         Reviewed by Geoffrey.
867
868         http://bugzilla.opendarwin.org/show_bug.cgi?id=9742
869         Bug 9742: REGRESSION: WebKit hangs when loading <http://www.vtbook.com>
870
871         * kjs/value.h:
872         (KJS::JSValue::getUInt32): Only types tagged as numeric can be converted to UInt32.
873
874 2006-07-13  Geoffrey Garen  <ggaren@apple.com>
875
876         Pleasing to Maciej.
877         
878         - Renamed JSEvaluate -> JSEvaluateScript, JSCheckSyntax -> JSCheckScriptSyntax
879         - Added exception out parameters to JSValueTo* and JSValueIsEqual because
880         they can throw
881         - Removed JSObjectGetDescription because it's useless and vague, and 
882         JSValueToString/JSValueIsObjectOfClass do a better job, anyway
883         - Clarified comments about "IsFunction/Constructor" to indicate that they
884         are true of all functions/constructors, not just those created by JSObjectMake*
885
886 2006-07-12  Geoffrey Garen  <ggaren@apple.com>
887
888         RS by Beth.
889         
890         Finished previously approved JSInternalString -> JSString conversion 
891         by renaming the files.
892
893         * API/JSCallbackObject.cpp:
894         * API/JSInternalStringRef.cpp: Removed.
895         * API/JSInternalStringRef.h: Removed.
896         * API/JSStringRef.cpp: Added.
897         * API/JSStringRef.h: Added.
898         * API/JavaScriptCore.h:
899         * JavaScriptCore.xcodeproj/project.pbxproj:
900
901 2006-07-12  Geoffrey Garen  <ggaren@apple.com>
902
903         Reviewed by Maciej.
904         
905         - Removed context and exception parameters from JSObjectGetPropertyEnumerator,
906         removing the spurious use of ExecState inside JavaScriptCore that made
907         us think this was necessary in the first place.
908
909         (StringInstance::getPropertyList): Use getString instead of toString because
910         we know we're dealing with a string -- we put it there in the first place.
911         While we're at it, store the string's size instead of retrieving it each time 
912         through the loop, to avoid the unnecessary killing of puppies.
913         * kjs/string_object.h:
914
915 2006-07-12  Maciej Stachowiak  <mjs@apple.com>
916
917         Reviewed by Geoff.
918         
919         - add handling of hasInstance callback for API objects
920
921         * API/JSCallbackObject.cpp:
922         (KJS::JSCallbackObject::implementsHasInstance): Check if callback is present.
923         (KJS::JSCallbackObject::hasInstance): Invoke appropriate callback.
924         * API/JSCallbackObject.h:
925         * API/JSClassRef.cpp:
926         * API/JSObjectRef.h:
927         * API/testapi.c:
928         (MyObject_hasInstance): Test case; should match what construct would do.
929         * API/testapi.js:
930
931 2006-07-11  Geoffrey Garen  <ggaren@apple.com>
932
933         Reviewed by Maciej.
934         
935         - Implemented a vast number of renames and comment clarifications 
936         suggested during API review.
937         
938         JSInternalString -> JSString
939         JS*Make -> JSValueMake*, JSObjectMake*
940         JSTypeCode -> JSType
941         JSValueIsInstanceOf -> JSValueIsInstanceOfConstructor (reads strangely well in client code)
942         JSGC*Protect -> JSValue*Protect
943         JS*Callback -> JSObject*Callback
944         JSGetPropertyListCallback -> JSObjectAddPropertiesToListCallback
945         JSPropertyEnumeratorGetNext -> JSPropertyEnumeratorGetNextName
946         JSString* -> 
947             JSStringCreateWithUTF8CString, JSStringGetUTF8CString,
948             JSStringGetMaximumUTF8CStringSize JSStringIsEqualToUTF8CString, 
949             JSStringCreateWithCFString, JSStringCopyCFString, JSStringCreateWithCharacters.
950         
951         - Changed functions taking a JSValue out arg and returning a bool indicating
952         whether it was set to simply return a JSValue or NULL.
953         
954         - Removed JSStringGetCharacters because it's more documentation than code,
955         and it's just a glorified memcpy built on existing API functionality.
956         
957         - Moved standard library includes into the headers that actually require them.
958         
959         - Standardized use of the phrase "Create Rule."
960         
961         - Removed JSLock from make functions that don't allocate.
962         
963         - Added exception handling to JSValueToBoolean, since we now allow
964         callback objects to throw exceptions upon converting to boolean.
965         
966         - Renamed JSGCCollect to JSGarbageCollect.
967
968 2006-07-10  Geoffrey Garen  <ggaren@apple.com>
969
970         Reviewed by Darin.
971         
972         - Changed public header includes to the <JavaScriptCore/ style.
973         - Changed instances of 'buffer' to 'string' since we decided on
974         JSInternalString instead of JSStringBuffer.
975
976         * API/JSContextRef.h:
977         * API/JSInternalStringRef.cpp:
978         (JSStringMake):
979         (JSInternalStringRetain):
980         (JSInternalStringRelease):
981         (JSValueCopyStringValue):
982         (JSInternalStringGetLength):
983         (JSInternalStringGetCharactersPtr):
984         (JSInternalStringGetCharacters):
985         (JSInternalStringGetMaxLengthUTF8):
986         (JSInternalStringGetCharactersUTF8):
987         (CFStringCreateWithJSInternalString):
988         * API/JSInternalStringRef.h:
989         * API/JSNode.c:
990         (JSNodePrototype_appendChild):
991         (JSNode_getNodeType):
992         * API/JSObjectRef.cpp:
993         (JSObjectCallAsConstructor):
994         * API/JSValueRef.h:
995         * API/JavaScriptCore.h:
996         * API/minidom.c:
997         (main):
998         (print):
999         * API/testapi.c:
1000         (MyObject_getPropertyList):
1001         (myConstructor_callAsConstructor):
1002         (main): I noticed that we were prematurely releasing some string buffers,
1003         so I moved their release calls to the end of main(). I got rid of 'Buf' in *Buf
1004         (sometimes changing to 'IString', when necessary to differentiate a variable) 
1005         to match the buffer->string change.
1006
1007 === Safari-521.16 ===
1008
1009 2006-07-10  Darin Adler  <darin@apple.com>
1010
1011         * kjs/value.cpp: (KJS::JSValue::toInt32Inline): Added inline keyword one more place.
1012         Just in case.
1013
1014 2006-07-10  Darin Adler  <darin@apple.com>
1015
1016         - fix the release build
1017
1018         * kjs/value.h:
1019         * kjs/value.cpp:
1020         (KJS::JSValue::toInt32Inline): Move the code here to an inline.
1021         (KJS::JSValue::toInt32): Call the inline from both overloaded toInt32 functions.
1022
1023 2006-07-10  David Kilzer  <ddkilzer@kilzer.net>
1024
1025         Reviewed by Darin.
1026
1027         - fix http://bugzilla.opendarwin.org/show_bug.cgi?id=9179
1028           Implement select.options.add() method
1029
1030         * JavaScriptCore.exp: Added overloaded KJS::JSValue::toInt32() method.
1031         * JavaScriptCore.xcodeproj/project.pbxproj: Altered attributes metadata for
1032         kjs/value.h to make it available as a forwarded header.
1033         * kjs/lookup.h:
1034         (KJS::lookupPut): Extracted a lookupPut() method from the existing lookupPut() method.
1035         The new method returns a boolean value if no entry is found in the lookup table.
1036         * kjs/value.cpp:
1037         (KJS::JSValue::toInt32): Overloaded toInt32() method with boolean "Ok" argument.
1038         * kjs/value.h: Ditto.
1039
1040 2006-07-10  Geoffrey Garen  <ggaren@apple.com>
1041
1042         No review necessary. Removed bogus file I accidentally checked in before.
1043
1044         * API/JSInternalSringRef.h: Removed.
1045
1046 2006-07-10  Geoffrey Garen  <ggaren@apple.com>
1047
1048         Reviewed by Darin.
1049         
1050         Added exception out parameter to API object callbacks, removed semi-bogus
1051         JSContext(.*)Exception functions.
1052         
1053         To make these calls syntactically simple, I added an exceptionSlot()
1054         method to the ExecState class, which provides a JSValue** slot in which to 
1055         store a JSValue* exception.
1056
1057         * API/APICast.h:
1058         (toRef):
1059         * API/JSCallbackConstructor.cpp:
1060         (KJS::JSCallbackConstructor::construct):
1061         * API/JSCallbackFunction.cpp:
1062         (KJS::JSCallbackFunction::callAsFunction):
1063         * API/JSCallbackObject.cpp:
1064         (KJS::JSCallbackObject::init):
1065         (KJS::JSCallbackObject::getOwnPropertySlot):
1066         (KJS::JSCallbackObject::put):
1067         (KJS::JSCallbackObject::deleteProperty):
1068         (KJS::JSCallbackObject::construct):
1069         (KJS::JSCallbackObject::callAsFunction):
1070         (KJS::JSCallbackObject::getPropertyList):
1071         (KJS::JSCallbackObject::toBoolean):
1072         (KJS::JSCallbackObject::toNumber):
1073         (KJS::JSCallbackObject::toString):
1074         (KJS::JSCallbackObject::staticValueGetter):
1075         (KJS::JSCallbackObject::callbackGetter):
1076         * API/JSContextRef.cpp:
1077         (JSCheckSyntax):
1078         * API/JSContextRef.h:
1079         * API/JSNode.c:
1080         (JSNodePrototype_appendChild):
1081         (JSNodePrototype_removeChild):
1082         (JSNodePrototype_replaceChild):
1083         (JSNode_getNodeType):
1084         (JSNode_getChildNodes):
1085         (JSNode_getFirstChild):
1086         (JSNode_construct):
1087         * API/JSNode.h:
1088         * API/JSNodeList.c:
1089         (JSNodeListPrototype_item):
1090         (JSNodeList_length):
1091         (JSNodeList_getProperty):
1092         * API/JSObjectRef.h:
1093         * API/minidom.c:
1094         (print):
1095         * API/testapi.c:
1096         (MyObject_initialize):
1097         (MyObject_hasProperty):
1098         (MyObject_getProperty):
1099         (MyObject_setProperty):
1100         (MyObject_deleteProperty):
1101         (MyObject_getPropertyList):
1102         (MyObject_callAsFunction):
1103         (MyObject_callAsConstructor):
1104         (MyObject_convertToType):
1105         (print_callAsFunction):
1106         (myConstructor_callAsConstructor):
1107         (main):
1108         * JavaScriptCore.exp:
1109         * kjs/ExecState.h:
1110         (KJS::ExecState::exceptionHandle):
1111
1112 2006-07-10  Geoffrey Garen  <ggaren@apple.com>
1113
1114         Reviewed by Darin.
1115
1116         Improved type safety by implementing opaque JSValue/JSObject typing through 
1117         abuse of 'const', not void*. Also fixed an alarming number of bugs
1118         exposed by this new type safety.
1119         
1120         I made one design change in JavaScriptCore, which is that the JSObject
1121         constructor should take a JSValue* as its prototype argument, not a JSObject*,
1122         since we allow the prototype to be any JSValue*, including jsNull(), for
1123         example.
1124         
1125         * API/APICast.h:
1126         (toJS):
1127         * API/JSBase.h:
1128         * API/JSCallbackConstructor.cpp:
1129         (KJS::JSCallbackConstructor::construct):
1130         * API/JSCallbackFunction.cpp:
1131         (KJS::JSCallbackFunction::callAsFunction):
1132         * API/JSCallbackObject.cpp:
1133         (KJS::JSCallbackObject::JSCallbackObject):
1134         (KJS::JSCallbackObject::getOwnPropertySlot):
1135         (KJS::JSCallbackObject::put):
1136         (KJS::JSCallbackObject::construct):
1137         (KJS::JSCallbackObject::callAsFunction):
1138         (KJS::JSCallbackObject::staticFunctionGetter):
1139         * API/JSCallbackObject.h:
1140         * API/JSContextRef.cpp:
1141         (JSEvaluate):
1142         * API/JSNode.c:
1143         (JSNodePrototype_appendChild):
1144         (JSNodePrototype_removeChild):
1145         (JSNodePrototype_replaceChild):
1146         * API/JSObjectRef.cpp:
1147         (JSObjectMake):
1148         (JSFunctionMakeWithBody):
1149         (JSObjectGetProperty):
1150         (JSObjectCallAsFunction):
1151         (JSObjectCallAsConstructor):
1152         * API/JSObjectRef.h:
1153         * API/testapi.c:
1154         (main):
1155         * ChangeLog:
1156         * kjs/object.h:
1157         (KJS::JSObject::JSObject):
1158
1159 2006-07-10  Geoffrey Garen  <ggaren@apple.com>
1160
1161         Approved by Maciej, Darin.
1162         
1163         Renamed JSStringBufferRef to JSInternalStringRef. "Internal string" means the 
1164         JavaScript engine's internal string representation, which is the most 
1165         low-level and efficient representation to use when interfacing with JavaScript.
1166
1167         * API/APICast.h:
1168         (toJS):
1169         (toRef):
1170         * API/JSBase.h:
1171         * API/JSCallbackObject.cpp:
1172         (KJS::JSCallbackObject::getOwnPropertySlot):
1173         (KJS::JSCallbackObject::put):
1174         (KJS::JSCallbackObject::deleteProperty):
1175         (KJS::JSCallbackObject::staticValueGetter):
1176         (KJS::JSCallbackObject::callbackGetter):
1177         * API/JSContextRef.cpp:
1178         (JSEvaluate):
1179         (JSCheckSyntax):
1180         * API/JSContextRef.h:
1181         * API/JSInternalStringRef.cpp: Added.
1182         (JSStringMake):
1183         (JSInternalStringCreate):
1184         (JSInternalStringCreateUTF8):
1185         (JSInternalStringRetain):
1186         (JSInternalStringRelease):
1187         (JSValueCopyStringValue):
1188         (JSInternalStringGetLength):
1189         (JSInternalStringGetCharactersPtr):
1190         (JSInternalStringGetCharacters):
1191         (JSInternalStringGetMaxLengthUTF8):
1192         (JSInternalStringGetCharactersUTF8):
1193         (JSInternalStringIsEqual):
1194         (JSInternalStringIsEqualUTF8):
1195         (JSInternalStringCreateCF):
1196         (CFStringCreateWithJSInternalString):
1197         * API/JSInternalStringRef.h: Added.
1198         * API/JSNode.c:
1199         (JSNodePrototype_appendChild):
1200         (JSNode_getNodeType):
1201         (JSNode_getChildNodes):
1202         (JSNode_getFirstChild):
1203         * API/JSNodeList.c:
1204         (JSNodeList_length):
1205         (JSNodeList_getProperty):
1206         * API/JSObjectRef.cpp:
1207         (JSFunctionMakeWithBody):
1208         (JSObjectGetDescription):
1209         (JSObjectHasProperty):
1210         (JSObjectGetProperty):
1211         (JSObjectSetProperty):
1212         (JSObjectDeleteProperty):
1213         (JSPropertyEnumeratorGetNext):
1214         (JSPropertyListAdd):
1215         * API/JSObjectRef.h:
1216         * API/JSStringBufferRef.cpp: Removed.
1217         * API/JSStringBufferRef.h: Removed.
1218         * API/JSValueRef.h:
1219         * API/JavaScriptCore.h:
1220         * API/minidom.c:
1221         (main):
1222         (print):
1223         * API/testapi.c:
1224         (assertEqualsAsUTF8String):
1225         (assertEqualsAsCharactersPtr):
1226         (assertEqualsAsCharacters):
1227         (MyObject_hasProperty):
1228         (MyObject_getProperty):
1229         (MyObject_setProperty):
1230         (MyObject_deleteProperty):
1231         (MyObject_getPropertyList):
1232         (print_callAsFunction):
1233         (myConstructor_callAsConstructor):
1234         (main):
1235         * JavaScriptCore.exp:
1236         * JavaScriptCore.xcodeproj/project.pbxproj:
1237
1238 2006-07-08  Tim Omernick  <timo@apple.com>
1239
1240         Reviewed by Maciej.
1241
1242         Added an OpenGL drawing model to the Netscape Plug-in API.
1243
1244         * bindings/npapi.h:
1245
1246 2006-07-08  Timothy Hatcher  <timothy@apple.com>
1247
1248         Reviewed by Maciej.
1249
1250         Moved KJS_GetCreatedJavaVMs to jni_utility.cpp.
1251         Switched KJS_GetCreatedJavaVMs over to use dlopen and dlsym
1252         now that NSAddImage, NSLookupSymbolInImage and NSAddressOfSymbol
1253         are deprecated in Leopard.
1254
1255         * JavaScriptCore.exp:
1256         * JavaScriptCore.xcodeproj/project.pbxproj:
1257         * bindings/jni/jni_utility.cpp:
1258         (KJS::Bindings::KJS_GetCreatedJavaVMs):
1259         * bindings/softlinking.c: Removed.
1260         * bindings/softlinking.h: Removed.
1261
1262 2006-07-08  Geoffrey Garen  <ggaren@apple.com>
1263
1264         Reviewed by Anders.
1265         
1266         - Make JSObjectGetProperty return a JSValue or NULL, like JSEvaluate does.
1267
1268         * API/JSObjectRef.cpp:
1269         (JSObjectGetProperty):
1270         * API/JSObjectRef.h:
1271         * API/testapi.c:
1272         (main):
1273
1274 2006-07-08  Geoffrey Garen  <ggaren@apple.com>
1275
1276         Style change -- no review necessary.
1277         
1278         Use 0 instead of NULL in API .cpp files, to match our style guidelines.
1279
1280         * API/JSContextRef.cpp:
1281         (JSEvaluate):
1282         * API/JSObjectRef.cpp:
1283         (JSFunctionMakeWithBody):
1284         (JSObjectCallAsFunction):
1285         (JSObjectCallAsConstructor):
1286         * API/JSValueRef.cpp:
1287         (JSValueToObject):
1288
1289 2006-07-08  Geoffrey Garen  <ggaren@apple.com>
1290
1291         Reviewed by TimO.
1292
1293         - Added ability to pass NULL for thisObject when calling JSObjectCallAsFunction,
1294         to match JSEvaluate.
1295         
1296         * API/JSObjectRef.cpp:
1297         (JSObjectCallAsFunction):
1298         * API/JSObjectRef.h:
1299         * API/testapi.c:
1300         (main):
1301
1302 === Safari-521.15 ===
1303
1304 2006-07-07  Geoffrey Garen  <ggaren@apple.com>
1305
1306         Reviewed by Maciej.
1307         
1308         - Standardized which functions take a JSContext as an argument. The rule is:
1309         if you might execute JavaScript, you take a JSContext, otherwise you don't.
1310         
1311         The FIXME in JSObjectRef.h requires refactoring some parts of Interpreter,
1312         but not API changes, so I'm putting it off until later.
1313
1314         * API/JSCallbackObject.cpp:
1315         (KJS::JSCallbackObject::JSCallbackObject):
1316         (KJS::JSCallbackObject::init):
1317         * API/JSCallbackObject.h:
1318         * API/JSContextRef.cpp:
1319         (JSContextCreate):
1320         * API/JSContextRef.h:
1321         * API/JSObjectRef.cpp:
1322         (JSObjectMake):
1323         (JSPropertyEnumeratorGetNext):
1324         * API/JSObjectRef.h:
1325         * API/testapi.c:
1326         (MyObject_initialize):
1327         (main):
1328         * JavaScriptCore.exp:
1329         * kjs/array_object.cpp:
1330         (ArrayInstance::setLength):
1331         (ArrayInstance::pushUndefinedObjectsToEnd):
1332         * kjs/nodes.cpp:
1333         (ForInNode::execute):
1334         * kjs/reference.cpp:
1335         (KJS::Reference::getPropertyName):
1336         (KJS::Reference::getValue):
1337         * kjs/reference.h:
1338         * kjs/scope_chain.cpp:
1339         (KJS::ScopeChain::print):
1340
1341 2006-07-06  Geoffrey Garen  <ggaren@apple.com>
1342
1343         Reviewed by Maciej.
1344         
1345         More API action.
1346         
1347         - Headerdoc finished
1348
1349         Semantic Changes:
1350         - Added a JSContextRef argument to many functions, because you need a 
1351         JSContextRef for doing virtually anything. I expect to add this argument
1352         to even more functions in a future patch.
1353         
1354         - Removed the globalObjectPrototype argument to JSContextCreate because
1355         you can't create an object until you have a context, so it's impossible
1356         to pass a prototype object to JSContextCreate. That's OK because (1) there's
1357         no reason to give the global object a prototype and (2) if you really want
1358         to, you can just use a separate call to JSObjectSetPrototype.
1359         
1360         - Removed the JSClassRef argument to JSClassCreate because it was unnecessary,
1361         and you need to be able to make the global object's class before you've
1362         created a JSContext.
1363         
1364         - Added an optional exception parameter to JSFunctionMakeWithBody because anything
1365         less would be uncivilized.
1366         
1367         - Made the return value parameter to JSObjectGetProperty optional to match
1368         all other return value parameters in the API.
1369         
1370         - Made JSObjectSetPrivate/JSObjectGetPrivate work on JSCallbackFunctions
1371         and JSCallbackConstructors. You could use an abstract base class or strategic
1372         placement of m_privateData in the class structure to implement this, but 
1373         the former seemed like overkill, and the latter seemed too dangerous.
1374         
1375         - Fixed a bug where JSPropertyEnumeratorGetNext would skip the first property.
1376
1377         Cosmetic Changes:
1378         - Reversed the logic of the JSChar #ifdef to avoid confusing headerdoc
1379         
1380         - Removed function names from @function declarations because headeroc
1381         can parse them automatically, and I wanted to rule out manual mismatch.
1382
1383         - Changed Error::create to take a const UString& instead of a UString*
1384         because it was looking at me funny.
1385         
1386         - Renamed JSStringBufferCreateWithCFString to JSStringBufferCreateCF
1387         because the latter is more concise and it matches JSStringBufferCreateUTF8.
1388         
1389         * API/JSCallbackObject.cpp:
1390         (KJS::JSCallbackObject::getOwnPropertySlot):
1391         (KJS::JSCallbackObject::put):
1392         (KJS::JSCallbackObject::deleteProperty):
1393         (KJS::JSCallbackObject::getPropertyList):
1394         (KJS::JSCallbackObject::toBoolean):
1395         (KJS::JSCallbackObject::toNumber):
1396         (KJS::JSCallbackObject::toString):
1397         * API/JSClassRef.cpp:
1398         (JSClassCreate):
1399         * API/JSContextRef.cpp:
1400         (JSContextCreate):
1401         (JSContextSetException):
1402         * API/JSContextRef.h:
1403         * API/JSNode.c:
1404         (JSNodePrototype_class):
1405         (JSNode_class):
1406         * API/JSNodeList.c:
1407         (JSNodeListPrototype_class):
1408         (JSNodeList_class):
1409         * API/JSObjectRef.cpp:
1410         (JSObjectGetProperty):
1411         (JSObjectGetPrivate):
1412         (JSObjectSetPrivate):
1413         (JSObjectCallAsFunction):
1414         (JSObjectCallAsConstructor):
1415         (JSPropertyEnumeratorGetNext):
1416         * API/JSObjectRef.h:
1417         * API/JSStringBufferRef.cpp:
1418         (JSStringBufferCreateCF):
1419         * API/JSStringBufferRef.h:
1420         * API/JSValueRef.cpp:
1421         (JSValueIsInstanceOf):
1422         * API/JSValueRef.h:
1423         * API/minidom.c:
1424         (main):
1425         * API/minidom.js:
1426         * API/testapi.c:
1427         (MyObject_hasProperty):
1428         (MyObject_setProperty):
1429         (MyObject_deleteProperty):
1430         (MyObject_getPropertyList):
1431         (MyObject_convertToType):
1432         (MyObject_class):
1433         (main):
1434         * JavaScriptCore.exp:
1435
1436 2006-07-07  Geoffrey Garen  <ggaren@apple.com>
1437
1438         Reviewed by John.
1439         
1440         - Fixed a few crashes resulting from NULL parameters to JSClassCreate.
1441
1442         * API/JSClassRef.cpp:
1443         (JSClassCreate):
1444         (JSClassRelease):
1445         * API/testapi.c: Added test for NULL parameters.
1446         (main):
1447
1448 2006-07-07  Geoffrey Garen  <ggaren@apple.com>
1449
1450         Reviewed by John, mocked by Darin.
1451         
1452         - Changed JSEvaluate to take a JSObjectRef instead of a JSValueRef as
1453         "this," since "this" must be an object.
1454
1455         * API/JSContextRef.cpp:
1456         (JSEvaluate):
1457         * API/JSContextRef.h:
1458
1459 2006-07-07  Geoffrey Garen  <ggaren@apple.com>
1460
1461         Reviewed by John.
1462         
1463         - More headerdoc
1464
1465         * API/JSBase.h:
1466         * JavaScriptCore.xcodeproj/project.pbxproj:
1467
1468 2006-07-05  Geoffrey Garen  <ggaren@apple.com>
1469
1470         RS by Beth.
1471         
1472         Renamed JSCharBufferRef, which was universally unpopular, to JSStringBufferRef,
1473         which, hopefully, will be less unpopular.
1474
1475         * API/APICast.h:
1476         (toJS):
1477         (toRef):
1478         * API/JSBase.h:
1479         * API/JSCallbackObject.cpp:
1480         (KJS::JSCallbackObject::getOwnPropertySlot):
1481         (KJS::JSCallbackObject::put):
1482         (KJS::JSCallbackObject::deleteProperty):
1483         (KJS::JSCallbackObject::staticValueGetter):
1484         (KJS::JSCallbackObject::callbackGetter):
1485         * API/JSCharBufferRef.cpp: Removed.
1486         * API/JSCharBufferRef.h: Removed.
1487         * API/JSContextRef.cpp:
1488         (JSEvaluate):
1489         (JSCheckSyntax):
1490         * API/JSContextRef.h:
1491         * API/JSNode.c:
1492         (JSNodePrototype_appendChild):
1493         (JSNode_getNodeType):
1494         (JSNode_getChildNodes):
1495         (JSNode_getFirstChild):
1496         * API/JSNodeList.c:
1497         (JSNodeList_length):
1498         (JSNodeList_getProperty):
1499         * API/JSObjectRef.cpp:
1500         (JSFunctionMakeWithBody):
1501         (JSObjectGetDescription):
1502         (JSObjectHasProperty):
1503         (JSObjectGetProperty):
1504         (JSObjectSetProperty):
1505         (JSObjectDeleteProperty):
1506         (JSPropertyEnumeratorGetNext):
1507         (JSPropertyListAdd):
1508         * API/JSObjectRef.h:
1509         * API/JSStringBufferRef.cpp: Added.
1510         (JSStringMake):
1511         (JSStringBufferCreate):
1512         (JSStringBufferCreateUTF8):
1513         (JSStringBufferRetain):
1514         (JSStringBufferRelease):
1515         (JSValueCopyStringValue):
1516         (JSStringBufferGetLength):
1517         (JSStringBufferGetCharactersPtr):
1518         (JSStringBufferGetCharacters):
1519         (JSStringBufferGetMaxLengthUTF8):
1520         (JSStringBufferGetCharactersUTF8):
1521         (JSStringBufferIsEqual):
1522         (JSStringBufferIsEqualUTF8):
1523         (JSStringBufferCreateWithCFString):
1524         (CFStringCreateWithJSStringBuffer):
1525         * API/JSStringBufferRef.h: Added.
1526         * API/JSValueRef.h:
1527         * API/JavaScriptCore.h:
1528         * API/minidom.c:
1529         (main):
1530         (print):
1531         * API/testapi.c:
1532         (assertEqualsAsUTF8String):
1533         (assertEqualsAsCharactersPtr):
1534         (assertEqualsAsCharacters):
1535         (MyObject_hasProperty):
1536         (MyObject_getProperty):
1537         (MyObject_setProperty):
1538         (MyObject_deleteProperty):
1539         (MyObject_getPropertyList):
1540         (print_callAsFunction):
1541         (myConstructor_callAsConstructor):
1542         (main):
1543         * JavaScriptCore.exp:
1544         * JavaScriptCore.xcodeproj/project.pbxproj:
1545
1546 2006-07-05  Geoffrey Garen  <ggaren@apple.com>
1547
1548         RS by Beth.
1549         
1550         Moved some code around for more logical file separation.
1551
1552         * API/JSBase.h:
1553         * API/JSContextRef.h:
1554         * API/JSObjectRef.cpp:
1555         * API/JSValueRef.cpp:
1556         (JSValueToObject):
1557         * API/JSValueRef.h:
1558
1559 2006-07-03  Geoffrey Garen  <ggaren@apple.com>
1560
1561         Reviewed by Maciej.
1562         
1563         Implemented JSFunctionMakeWithBody, which parses a script as a function body
1564         in the global scope, and returns the resulting anonymous function.
1565         
1566         I also removed private data from JSCallbackFunction. It never worked,
1567         since JSCallbackFunction doesn't inherit from JSCallbackObject.
1568
1569         * API/JSCallbackConstructor.cpp: Removed.
1570         * API/JSCallbackConstructor.h: Removed.
1571         * API/JSCallbackFunction.cpp:
1572         (KJS::JSCallbackFunction::JSCallbackFunction):
1573         (KJS::JSCallbackFunction::implementsConstruct):
1574         (KJS::JSCallbackFunction::construct):
1575         (KJS::JSCallbackFunction::implementsCall):
1576         (KJS::JSCallbackFunction::callAsFunction):
1577         * API/JSCallbackFunction.h:
1578         * API/JSCallbackObject.cpp:
1579         (KJS::JSCallbackObject::staticFunctionGetter):
1580         * API/JSObjectRef.cpp:
1581         (JSFunctionMake):
1582         (JSFunctionMakeWithCallbacks):
1583         * API/JSObjectRef.h:
1584         * API/JSValueRef.h:
1585         * API/minidom.c:
1586         (main):
1587         * API/testapi.c:
1588         (main):
1589         * JavaScriptCore.exp: Programmatically added all symbols exported by
1590         API object files, and sorted results
1591         * JavaScriptCore.xcodeproj/project.pbxproj:
1592
1593 2006-07-03  Geoffrey Garen  <ggaren@apple.com>
1594
1595         Reviewed by Maciej.
1596
1597         - Return syntax error in JSCheckSyntax through a JSValueRef* exception
1598         argument
1599         
1600         * API/JSBase.h:
1601         * API/JSContextRef.cpp:
1602         (JSCheckSyntax):
1603         * API/testapi.c:
1604         (main):
1605         * JavaScriptCore.exp:
1606         * kjs/interpreter.cpp:
1607         (KJS::Interpreter::checkSyntax):
1608         * kjs/interpreter.h:
1609
1610 2006-07-04  Darin Adler  <darin@apple.com>
1611
1612         - fixed build
1613
1614         * wtf/MathExtras.h: Oops. Added missing #endif.
1615
1616 2006-07-04  Bjoern Graf  <bjoern.graf@gmail.com>
1617
1618         Reviewed by Maciej.
1619         Tweaked a bit by Darin.
1620
1621         - http://bugzilla.opendarwin.org/show_bug.cgi?id=9678
1622           work around MSVCRT's fmod function returning NaN for fmod(x, infinity) instead of x
1623
1624         * wtf/MathExtras.h: Added include of <float.h>.
1625         (isinf): Fix to return false for NAN.
1626         (wtf_fmod): Added. An inline that works around the bug.
1627
1628         * kjs/nodes.cpp:
1629         * kjs/number_object.cpp:
1630         * kjs/operations.cpp:
1631         * kjs/value.cpp:
1632         Added includes of MathExtras.h to all files using fmod.
1633
1634         * JavaScriptCore.xcodeproj/project.pbxproj: Let Xcode 2.3 have its way with
1635         the project.
1636
1637 2006-07-01  Geoffrey Garen  <ggaren@apple.com>
1638
1639         Reviewed by Darin.
1640         
1641         - Refined value conversions in the API:
1642             - failed toNumber returns NaN
1643             - failed toObject returns NULL
1644             - failed toString returns empty string
1645         
1646         - Refined excpetion handling in the API:
1647             - failed value conversions do not throw exceptions
1648             - uncaught exceptions in JSEvaluate, JSObjectCallAsFunction, and 
1649               JSObjectCallAsConstructor are returned through a JSValueRef* exception
1650               argument
1651             - removed JSContextHasException, because JSContextGetException does
1652               the same job
1653             
1654         * API/JSBase.h:
1655         * API/JSCharBufferRef.cpp:
1656         (JSValueCopyStringValue):
1657         * API/JSContextRef.cpp:
1658         (JSEvaluate):
1659         * API/JSContextRef.h:
1660         * API/JSNodeList.c: Added test code demonstrating how you would use
1661         toNumber, and why you probably don't need toUInt32, etc.
1662         (JSNodeListPrototype_item):
1663         (JSNodeList_getProperty):
1664         * API/JSObjectRef.cpp:
1665         (JSValueToObject):
1666         (JSObjectCallAsFunction):
1667         (JSObjectCallAsConstructor):
1668         * API/JSObjectRef.h:
1669         * API/JSValueRef.cpp:
1670         (JSValueToNumber):
1671         * API/JSValueRef.h:
1672         * API/minidom.c:
1673         (main):
1674         * API/testapi.c:
1675         (main): Added tests for new rules, and call to JSGCProtect to fix Intel 
1676         crash
1677         * JavaScriptCore.exp:
1678
1679 2006-07-03  Darin Adler  <darin@apple.com>
1680
1681         - Rolled out HashMap implementation of NPRuntime, at least temporarily.
1682
1683         Fixes hang in the bindings section of layout tests seen on the
1684         buildbot.
1685
1686         This code was using HashMap<const char*, PrivateIdentifier*>.
1687         But that hashes based on pointer identity, not string value.
1688         The default hash for any pointer type is to hash based on the pointer.
1689         And WTF doesn't currently have a string hash for char*.
1690         We'll need to fix that before re-landing this patch.
1691
1692         (Formatting was also incorrect -- extra spaces in parentheses.)
1693
1694         * bindings/npruntime.cpp: Rolled out last change.
1695
1696 2006-07-02  Justin Haygood  <jhaygood@spsu.edu>
1697
1698         Reviewed, tweaked, landed by ggaren.
1699
1700         - Port NPRuntime from CFDictionary to HashMap.
1701
1702         * bindings/npruntime.cpp:
1703         (getStringIdentifierDictionary):
1704         (getIntIdentifierDictionary):
1705         (_NPN_GetStringIdentifier):
1706         (_NPN_GetIntIdentifier):
1707         * bindings/npruntime.h:
1708
1709 2006-07-01  Geoffrey Garen  <ggaren@apple.com>
1710
1711         Reviewed by Adele.
1712         
1713         - Fixed <rdar://problem/4611197> REGRESSION: Liveconnect with Java test 
1714         fails at http://www-sor.inria.fr/~dedieu/notes/liveconnect/simple_example.html
1715
1716         * JavaScriptCore.exp: Export symbols used by liveconnect
1717
1718 2006-06-29  Geoffrey Garen  <ggaren@apple.com>
1719
1720         Reviewed by Maciej.
1721         
1722         - Phase 2 in the JS API.
1723         
1724         - Added support for specifying static tables of values -- this should
1725         obviate the need for using complicated callbacks for most lookups.
1726         
1727         -  API objects are now created with classes (JSClassRef) -- in order to support
1728         static values, and in order to prevent API objects from storing their
1729         data inline, and thus falling into the oversized (read: slow and prone to
1730         giving Maciej the frowny face) heap.
1731         
1732         - Added two specialized JSObject subclasses -- JSCallbackFunction and JSCallbackConstructor -- 
1733         to allow JSFunctionMake and JSConstructorMake to continue to work with
1734         the new class model. Another solution to this problem would be to create
1735         a custom class object for each function and constructor you make. This
1736         solution is more code but also more efficient.
1737         
1738         - Substantially beefed up the minidom example to demonstrate and test a
1739         lot of these techniques. Its output is still pretty haphazard, though.
1740         
1741         - Gave the <kjs/ preface to some includes -- I'm told this matters to
1742         building on some versions of Linux.
1743         
1744         - Implemented JSValueIsInstanceOf and JSValueIsObjectOfClass
1745         
1746         - Removed GetDescription callback. Something in the class datastructure
1747         should take care of this.
1748
1749         * API/JSBase.h:
1750         * API/JSCallbackConstructor.cpp: Added.
1751         (KJS::):
1752         (KJS::JSCallbackConstructor::JSCallbackConstructor):
1753         (KJS::JSCallbackConstructor::implementsConstruct):
1754         (KJS::JSCallbackConstructor::construct):
1755         (KJS::JSCallbackConstructor::setPrivate):
1756         (KJS::JSCallbackConstructor::getPrivate):
1757         * API/JSCallbackConstructor.h: Added.
1758         (KJS::JSCallbackConstructor::classInfo):
1759         * API/JSCallbackFunction.cpp: Added.
1760         (KJS::):
1761         (KJS::JSCallbackFunction::JSCallbackFunction):
1762         (KJS::JSCallbackFunction::implementsCall):
1763         (KJS::JSCallbackFunction::callAsFunction):
1764         (KJS::JSCallbackFunction::setPrivate):
1765         (KJS::JSCallbackFunction::getPrivate):
1766         * API/JSCallbackFunction.h: Added.
1767         (KJS::JSCallbackFunction::classInfo):
1768         * API/JSCallbackObject.cpp:
1769         (KJS::):
1770         (KJS::JSCallbackObject::JSCallbackObject):
1771         (KJS::JSCallbackObject::init):
1772         (KJS::JSCallbackObject::~JSCallbackObject):
1773         (KJS::JSCallbackObject::className):
1774         (KJS::JSCallbackObject::getOwnPropertySlot):
1775         (KJS::JSCallbackObject::put):
1776         (KJS::JSCallbackObject::deleteProperty):
1777         (KJS::JSCallbackObject::implementsConstruct):
1778         (KJS::JSCallbackObject::construct):
1779         (KJS::JSCallbackObject::implementsCall):
1780         (KJS::JSCallbackObject::callAsFunction):
1781         (KJS::JSCallbackObject::getPropertyList):
1782         (KJS::JSCallbackObject::toBoolean):
1783         (KJS::JSCallbackObject::toNumber):
1784         (KJS::JSCallbackObject::toString):
1785         (KJS::JSCallbackObject::inherits):
1786         (KJS::JSCallbackObject::staticValueGetter):
1787         (KJS::JSCallbackObject::staticFunctionGetter):
1788         (KJS::JSCallbackObject::callbackGetter):
1789         * API/JSCallbackObject.h:
1790         * API/JSCharBufferRef.cpp:
1791         * API/JSClassRef.cpp: Added.
1792         (JSClassCreate):
1793         (JSClassRetain):
1794         (JSClassRelease):
1795         * API/JSClassRef.h: Added.
1796         (StaticValueEntry::StaticValueEntry):
1797         (StaticFunctionEntry::StaticFunctionEntry):
1798         (__JSClass::__JSClass):
1799         * API/JSContextRef.cpp:
1800         (JSContextCreate):
1801         (JSEvaluate):
1802         * API/JSContextRef.h:
1803         * API/JSNode.c: Added.
1804         (JSNodePrototype_appendChild):
1805         (JSNodePrototype_removeChild):
1806         (JSNodePrototype_replaceChild):
1807         (JSNodePrototype_class):
1808         (JSNode_getNodeType):
1809         (JSNode_getChildNodes):
1810         (JSNode_getFirstChild):
1811         (JSNode_finalize):
1812         (JSNode_class):
1813         (JSNode_prototype):
1814         (JSNode_new):
1815         (JSNode_construct):
1816         * API/JSNode.h: Added.
1817         * API/JSNodeList.c: Added.
1818         (JSNodeListPrototype_item):
1819         (JSNodeListPrototype_class):
1820         (JSNodeList_length):
1821         (JSNodeList_getProperty):
1822         (JSNodeList_finalize):
1823         (JSNodeList_class):
1824         (JSNodeList_prototype):
1825         (JSNodeList_new):
1826         * API/JSNodeList.h: Added.
1827         * API/JSObjectRef.cpp:
1828         (JSObjectMake):
1829         (JSFunctionMake):
1830         (JSConstructorMake):
1831         (__JSPropertyEnumerator::__JSPropertyEnumerator):
1832         (JSObjectCreatePropertyEnumerator):
1833         (JSPropertyEnumeratorGetNext):
1834         (JSPropertyEnumeratorRetain):
1835         (JSPropertyEnumeratorRelease):
1836         * API/JSObjectRef.h:
1837         (__JSObjectCallbacks::):
1838         * API/JSValueRef.cpp:
1839         (JSValueIsObjectOfClass):
1840         (JSValueIsInstanceOf):
1841         * API/JSValueRef.h:
1842         * API/Node.c: Added.
1843         (Node_new):
1844         (Node_appendChild):
1845         (Node_removeChild):
1846         (Node_replaceChild):
1847         (Node_ref):
1848         (Node_deref):
1849         * API/Node.h: Added.
1850         * API/NodeList.c: Added.
1851         (NodeList_new):
1852         (NodeList_length):
1853         (NodeList_item):
1854         (NodeList_ref):
1855         (NodeList_deref):
1856         * API/NodeList.h: Added.
1857         * API/minidom.c:
1858         (main):
1859         (print):
1860         (createStringWithContentsOfFile):
1861         * API/minidom.js:
1862         * API/testapi.c:
1863         (assertEqualsAsCharacters):
1864         (MyObject_getProperty):
1865         (MyObject_class):
1866         (myConstructor_callAsConstructor):
1867         (main):
1868         * API/testapi.js:
1869         * JavaScriptCore.xcodeproj/project.pbxproj:
1870
1871 2006-06-26  Kevin Ollivier  <kevino@theolliviers.com>
1872         
1873         Reviewed and tweaked by Darin.
1874
1875         - Compile fixes for wx port / gcc 4.0.2
1876
1877         * kjs/array_object.cpp:
1878         Added missing headers. 
1879
1880         * kjs/ExecState.h:
1881         gcc needs class prototypes before defining those classes as friend classes
1882
1883 2006-06-30  Mike Emmel  <mike.emmel@gmail.com>
1884
1885         Reviewed by Darin.
1886
1887         Compilation fixes for Linux/Gdk.
1888
1889         * JavaScriptCore/kjs/interpreter.cpp: added include of signal.h
1890         * JavaScriptCore/kjs/ExecState.h: added missing class declaration 
1891         * JavaScriptCore/kjs/ExecState.cpp: case wrong on include of context.h 
1892         * JavaScriptCore/JavaScriptCoreSources.bkl: added Context.cpp and ExecState.cpp
1893
1894 === Safari-521.14 ===
1895
1896 2006-06-29  Maciej Stachowiak  <mjs@apple.com>
1897
1898         Reviewed by Geoff.
1899         
1900         - add headerdoc comments to some of the new JS API headers
1901
1902         * API/JSBase.h:
1903         * API/JSValueRef.h:
1904
1905 2006-06-28  Timothy Hatcher  <timothy@apple.com>
1906
1907         Prefer the Stabs debugging symbols format until DWARF bugs are fixed.
1908
1909         * JavaScriptCore.xcodeproj/project.pbxproj:
1910
1911 2006-06-27  Timothy Hatcher  <timothy@apple.com>
1912
1913         Reviewed by Tim O.
1914
1915         <rdar://problem/4448350> Deprecated ObjC language API used in JavaScriptCore, WebCore, WebKit and WebBrowser
1916
1917         Switch to the new ObjC 2 API, ifdefed the old code around OBJC_API_VERSION so it still works on Tiger.
1918         Removed the use of the old stringWithCString, switched to the new Tiger version that accepts an encoding.
1919         Lots of code style cleanup.
1920
1921         * JavaScriptCore.xcodeproj/project.pbxproj:
1922         * bindings/objc/objc_class.h:
1923         * bindings/objc/objc_class.mm:
1924         (KJS::Bindings::ObjcClass::~ObjcClass):
1925         (KJS::Bindings::_createClassesByIsAIfNecessary):
1926         (KJS::Bindings::ObjcClass::classForIsA):
1927         (KJS::Bindings::ObjcClass::name):
1928         (KJS::Bindings::ObjcClass::methodsNamed):
1929         (KJS::Bindings::ObjcClass::fieldNamed):
1930         (KJS::Bindings::ObjcClass::fallbackObject):
1931         * bindings/objc/objc_header.h:
1932         * bindings/objc/objc_instance.h:
1933         * bindings/objc/objc_instance.mm:
1934         (ObjcInstance::ObjcInstance):
1935         (ObjcInstance::~ObjcInstance):
1936         (ObjcInstance::operator=):
1937         (ObjcInstance::begin):
1938         (ObjcInstance::end):
1939         (ObjcInstance::getClass):
1940         (ObjcInstance::invokeMethod):
1941         (ObjcInstance::invokeDefaultMethod):
1942         (ObjcInstance::setValueOfField):
1943         (ObjcInstance::supportsSetValueOfUndefinedField):
1944         (ObjcInstance::setValueOfUndefinedField):
1945         (ObjcInstance::getValueOfField):
1946         (ObjcInstance::getValueOfUndefinedField):
1947         (ObjcInstance::defaultValue):
1948         (ObjcInstance::stringValue):
1949         (ObjcInstance::numberValue):
1950         (ObjcInstance::booleanValue):
1951         (ObjcInstance::valueOf):
1952         * bindings/objc/objc_runtime.h:
1953         * bindings/objc/objc_runtime.mm:
1954         (ObjcMethod::ObjcMethod):
1955         (ObjcMethod::name):
1956         (ObjcMethod::getMethodSignature):
1957         (ObjcMethod::setJavaScriptName):
1958         (ObjcField::name):
1959         (ObjcField::type):
1960         (ObjcField::valueFromInstance):
1961         (convertValueToObjcObject):
1962         (ObjcField::setValueToInstance):
1963         (ObjcArray::operator=):
1964         (ObjcArray::setValueAt):
1965         (ObjcArray::valueAt):
1966         (ObjcFallbackObjectImp::ObjcFallbackObjectImp):
1967         (ObjcFallbackObjectImp::callAsFunction):
1968         (ObjcFallbackObjectImp::defaultValue):
1969
1970 2006-06-28  Anders Carlsson  <acarlsson@apple.com>
1971
1972         Reviewed by Geoff.
1973
1974         http://bugzilla.opendarwin.org/show_bug.cgi?id=8636
1975         REGRESSION: JavaScript access to Java applet causes hang (_webViewURL not implemented)
1976
1977         * bindings/jni/jni_objc.mm:
1978         (KJS::Bindings::dispatchJNICall):
1979         Just pass nil as the calling URL. This will cause the Java plugin to use the URL of the page
1980         containing the applet (which is what we used to do).
1981
1982 2006-06-27  Timothy Hatcher  <timothy@apple.com>
1983
1984         Reviewed by Darin.
1985
1986         <rdar://problem/4406785> Add an export file to TOT JavaScriptCore like the Safari-2-0-branch
1987
1988         * JavaScriptCore.exp: Added.
1989         * JavaScriptCore.xcodeproj/project.pbxproj:
1990
1991 2006-06-25  Geoffrey Garen  <ggaren@apple.com>
1992
1993         Reviewed by Adele.
1994         
1995         - Added JSConstructorMake to match JSFunctionMake, along with test code.
1996         
1997         [ I checked in the ChangeLog before without the actual files. ]
1998
1999         * API/JSObjectRef.cpp:
2000         (JSConstructorMake):
2001         * API/JSObjectRef.h:
2002         * API/testapi.c:
2003         (myConstructor_callAsConstructor):
2004         (main):
2005         * API/testapi.js:
2006         * ChangeLog:
2007         * JavaScriptCore.xcodeproj/project.pbxproj: Moved testapi.c to the testapi
2008         target -- this was an oversight in my earlier check-in.
2009
2010 2006-06-25  Timothy Hatcher  <timothy@apple.com>
2011
2012         Reviewed by Darin.
2013
2014         Bug 9574: Drosera should show inline scripts within the original HTML
2015         http://bugzilla.opendarwin.org/show_bug.cgi?id=9574
2016
2017         Pass the starting line number and error message to the debugger.
2018
2019         * kjs/debugger.cpp:
2020         (Debugger::sourceParsed):
2021         * kjs/debugger.h:
2022         * kjs/function.cpp:
2023         (KJS::GlobalFuncImp::callAsFunction):
2024         * kjs/function_object.cpp:
2025         (FunctionObjectImp::construct):
2026         * kjs/interpreter.cpp:
2027         (KJS::Interpreter::evaluate):
2028
2029 2006-06-24  Alexey Proskuryakov  <ap@nypop.com>
2030
2031         Rubber-stamped by Eric.
2032
2033         Add a -h (do not follow symlinks) option to ln in derived sources build script (without it,
2034         a symlink was created inside the source directory on second build).
2035
2036         * JavaScriptCore.xcodeproj/project.pbxproj:
2037
2038 2006-06-24  David Kilzer  <ddkilzer@kilzer.net>
2039
2040         Reviewed by Timothy.
2041
2042         * Info.plist: Fixed copyright to include 2003-2006.
2043
2044 2006-06-24  Alexey Proskuryakov  <ap@nypop.com>
2045
2046         Reviewed by Darin.
2047
2048         - http://bugzilla.opendarwin.org/show_bug.cgi?id=9418
2049         WebKit will not build when Space exists in path
2050
2051         * JavaScriptCore.xcodeproj/project.pbxproj: Enclose search paths in quotes; create symlinks to 
2052         avoid passing paths with spaces to make.
2053
2054 2006-06-23  Timothy Hatcher  <timothy@apple.com>
2055
2056         Reviewed by Darin.
2057
2058         Adding more operator[] overloads for long and short types.
2059
2060         * wtf/Vector.h:
2061         (WTF::Vector::operator[]):
2062
2063 === JavaScriptCore-521.13 ===
2064
2065 2006-06-22  Alexey Proskuryakov  <ap@nypop.com>
2066
2067         Build fix.
2068
2069         - http://bugzilla.opendarwin.org/show_bug.cgi?id=9539
2070         Another case error preventing build
2071
2072         * API/JSObjectRef.cpp: Changed "identifier.h" to "Identifier.h"
2073         
2074 2006-06-22  David Kilzer  <ddkilzer@kilzer.net>
2075
2076         Build fix.
2077
2078         http://bugzilla.opendarwin.org/show_bug.cgi?id=9539
2079         Another case error preventing build
2080
2081         * API/APICast.h: Changed "UString.h" to "ustring.h".
2082
2083 2006-06-21  Geoffrey Garen  <ggaren@apple.com>
2084
2085         Fixed release build, fixed accidental infinite recursion due to
2086         last minute global replace gone awry.
2087         
2088         * API/APICast.h:
2089         (toRef):
2090         * API/testapi.c:
2091         (assertEqualsAsBoolean):
2092         (assertEqualsAsNumber):
2093         (assertEqualsAsUTF8String):
2094         (assertEqualsAsCharactersPtr):
2095         * JavaScriptCore.xcodeproj/project.pbxproj:
2096
2097 2006-06-21  Geoffrey Garen  <ggaren@apple.com>
2098
2099         Reviewed by Anders.
2100         
2101         - First cut at C API to JavaScript. Includes a unit test, 'testapi.c', 
2102         and the outline of a test app, 'minidom.c'.
2103         
2104         Includes one change to JSC internals: Rename propList to getPropertyList and have it
2105         take its target property list by reference so that subclasses can
2106         add properties to the list before calling through to their superclasses.
2107         
2108         Also, I just ran prepare-ChangeLog in about 10 seconds, and I would like
2109         to give a shout-out to that.
2110         
2111         * API/APICast.h: Added.
2112         (toJS):
2113         (toRef):
2114         * API/JSBase.h: Added.
2115         * API/JSCallbackObject.cpp: Added.
2116         (KJS::):
2117         (KJS::JSCallbackObject::JSCallbackObject):
2118         (KJS::JSCallbackObject::~JSCallbackObject):
2119         (KJS::JSCallbackObject::className):
2120         (KJS::JSCallbackObject::getOwnPropertySlot):
2121         (KJS::JSCallbackObject::put):
2122         (KJS::JSCallbackObject::deleteProperty):
2123         (KJS::JSCallbackObject::implementsConstruct):
2124         (KJS::JSCallbackObject::construct):
2125         (KJS::JSCallbackObject::implementsCall):
2126         (KJS::JSCallbackObject::callAsFunction):
2127         (KJS::JSCallbackObject::getPropertyList):
2128         (KJS::JSCallbackObject::toBoolean):
2129         (KJS::JSCallbackObject::toNumber):
2130         (KJS::JSCallbackObject::toString):
2131         (KJS::JSCallbackObject::setPrivate):
2132         (KJS::JSCallbackObject::getPrivate):
2133         (KJS::JSCallbackObject::cachedValueGetter):
2134         (KJS::JSCallbackObject::callbackGetter):
2135         * API/JSCallbackObject.h: Added.
2136         (KJS::JSCallbackObject::classInfo):
2137         * API/JSCharBufferRef.cpp: Added.
2138         (JSStringMake):
2139         (JSCharBufferCreate):
2140         (JSCharBufferCreateUTF8):
2141         (JSCharBufferRetain):
2142         (JSCharBufferRelease):
2143         (JSValueCopyStringValue):
2144         (JSCharBufferGetLength):
2145         (JSCharBufferGetCharactersPtr):
2146         (JSCharBufferGetCharacters):
2147         (JSCharBufferGetMaxLengthUTF8):
2148         (JSCharBufferGetCharactersUTF8):
2149         (JSCharBufferIsEqual):
2150         (JSCharBufferIsEqualUTF8):
2151         (JSCharBufferCreateWithCFString):
2152         (CFStringCreateWithJSCharBuffer):
2153         * API/JSCharBufferRef.h: Added.
2154         * API/JSContextRef.cpp: Added.
2155         (JSContextCreate):
2156         (JSContextDestroy):
2157         (JSContextGetGlobalObject):
2158         (JSEvaluate):
2159         (JSCheckSyntax):
2160         (JSContextHasException):
2161         (JSContextGetException):
2162         (JSContextClearException):
2163         (JSContextSetException):
2164         * API/JSContextRef.h: Added.
2165         * API/JSObjectRef.cpp: Added.
2166         (JSValueToObject):
2167         (JSObjectMake):
2168         (JSFunctionMake):
2169         (JSObjectGetDescription):
2170         (JSObjectGetPrototype):
2171         (JSObjectSetPrototype):
2172         (JSObjectHasProperty):
2173         (JSObjectGetProperty):
2174         (JSObjectSetProperty):
2175         (JSObjectDeleteProperty):
2176         (JSObjectGetPrivate):
2177         (JSObjectSetPrivate):
2178         (JSObjectIsFunction):
2179         (JSObjectCallAsFunction):
2180         (JSObjectIsConstructor):
2181         (JSObjectCallAsConstructor):
2182         (__JSPropertyListEnumerator::__JSPropertyListEnumerator):
2183         (JSObjectCreatePropertyEnumerator):
2184         (JSPropertyEnumeratorGetNext):
2185         (JSPropertyEnumeratorRetain):
2186         (JSPropertyEnumeratorRelease):
2187         (JSPropertyListAdd):
2188         * API/JSObjectRef.h: Added.
2189         * API/JSValueRef.cpp: Added.
2190         (JSValueGetType):
2191         (JSValueIsUndefined):
2192         (JSValueIsNull):
2193         (JSValueIsBoolean):
2194         (JSValueIsNumber):
2195         (JSValueIsString):
2196         (JSValueIsObject):
2197         (JSValueIsEqual):
2198         (JSValueIsStrictEqual):
2199         (JSUndefinedMake):
2200         (JSNullMake):
2201         (JSBooleanMake):
2202         (JSNumberMake):
2203         (JSValueToBoolean):
2204         (JSValueToNumber):
2205         (JSGCProtect):
2206         (JSGCUnprotect):
2207         (JSGCCollect):
2208         * API/JSValueRef.h: Added.
2209         * API/JavaScriptCore.h: Added.
2210         * API/minidom.c: Added.
2211         (main):
2212         * API/minidom.html: Added.
2213         * API/minidom.js: Added.
2214         * API/testapi.c: Added.
2215         (assertEqualsAsBoolean):
2216         (assertEqualsAsNumber):
2217         (assertEqualsAsUTF8String):
2218         (assertEqualsAsCharactersPtr):
2219         (assertEqualsAsCharacters):
2220         (MyObject_initialize):
2221         (MyObject_copyDescription):
2222         (MyObject_hasProperty):
2223         (MyObject_getProperty):
2224         (MyObject_setProperty):
2225         (MyObject_deleteProperty):
2226         (MyObject_getPropertyList):
2227         (MyObject_callAsFunction):
2228         (MyObject_callAsConstructor):
2229         (MyObject_convertToType):
2230         (MyObject_finalize):
2231         (print_callAsFunction):
2232         (main):
2233         (createStringWithContentsOfFile):
2234         * API/testapi.js: Added.
2235         * ChangeLog:
2236         * JavaScriptCore.xcodeproj/project.pbxproj:
2237         * bindings/npruntime_impl.h:
2238         * kjs/array_instance.h:
2239         * kjs/array_object.cpp:
2240         (ArrayInstance::getPropertyList):
2241         * kjs/interpreter.cpp:
2242         (KJS::Interpreter::evaluate):
2243         * kjs/nodes.cpp:
2244         (ForInNode::execute):
2245         * kjs/object.cpp:
2246         (KJS::JSObject::put):
2247         (KJS::JSObject::canPut):
2248         (KJS::JSObject::deleteProperty):
2249         (KJS::JSObject::propertyIsEnumerable):
2250         (KJS::JSObject::getPropertyAttributes):
2251         (KJS::JSObject::getPropertyList):
2252         * kjs/object.h:
2253         * kjs/property_map.cpp:
2254         (KJS::PropertyMap::get):
2255         * kjs/property_map.h:
2256         * kjs/scope_chain.cpp:
2257         (KJS::ScopeChain::print):
2258         * kjs/string_object.cpp:
2259         (StringInstance::getPropertyList):
2260         * kjs/string_object.h:
2261         * kjs/ustring.h:
2262         (KJS::UString::Rep::ref):
2263
2264 2006-06-20  Timothy Hatcher  <timothy@apple.com>
2265
2266         Reviewed by Geoff.
2267
2268         Make sure we clear the exception before returning so
2269         that future calls will not fail because of an earlier
2270         exception state. Assert on entry that the WebScriptObject
2271         is working with an ExecState that dose not have an exception. 
2272         Document that evaluateWebScript and callWebScriptMethod return
2273         WebUndefined when an exception is thrown.
2274
2275         * bindings/objc/WebScriptObject.h:
2276         * bindings/objc/WebScriptObject.mm:
2277         (-[WebScriptObject callWebScriptMethod:withArguments:]):
2278         (-[WebScriptObject evaluateWebScript:]):
2279         (-[WebScriptObject setValue:forKey:]):
2280         (-[WebScriptObject valueForKey:]):
2281         (-[WebScriptObject removeWebScriptKey:]):
2282         (-[WebScriptObject webScriptValueAtIndex:]):
2283         (-[WebScriptObject setWebScriptValueAtIndex:value:]):
2284
2285 2006-06-19  Anders Carlsson  <acarlsson@apple.com>
2286
2287         Reviewed by John.
2288
2289         * kjs/interpreter.cpp:
2290         (KJS::TimeoutChecker::pauseTimeoutCheck):
2291         (KJS::TimeoutChecker::resumeTimeoutCheck):
2292         Fix argument order in setitimer calls.
2293
2294 2006-06-18  Anders Carlsson  <acarlsson@apple.com>
2295
2296         Reviewed by Geoff.
2297
2298         * kjs/interpreter.cpp:
2299         (KJS::TimeoutChecker::pauseTimeoutCheck):
2300         Do nothing if the timeout check hasn't been started.
2301         
2302         (KJS::TimeoutChecker::resumeTimeoutCheck):
2303         Do nothing if the timeout check hasn't been started.
2304         Use the right signal handler when unblocking.
2305         
2306         (KJS::Interpreter::handleTimeout):
2307         pause/resume the timeout check around the call to
2308         shouldInterruptScript().
2309         
2310 2006-06-16  Ben Goodger <beng@google.com>
2311         
2312         Reviewed by Maciej
2313
2314         http://bugzilla.opendarwin.org/show_bug.cgi?id=9491
2315         Windows build breaks in interpreter.cpp 
2316
2317         * kjs/interpreter.cpp
2318         (KJS::TimeoutChecker::pauseTimeoutCheck):
2319         (KJS::TimeoutChecker::resumeTimeoutCheck):
2320         Make sure to only assert equality with s_executingInterpreter when it 
2321         is being used (i.e. when HAVE(SYS_TIME_H) == true)
2322
2323 2006-06-17  David Kilzer  <ddkilzer@kilzer.net>
2324
2325         Reviewed by darin.
2326
2327         http://bugzilla.opendarwin.org/show_bug.cgi?id=9477
2328         REGRESSION: fast/dom/replaceChild.html crashes on WebKit ToT in debug build
2329
2330         * kjs/function.cpp:
2331         (KJS::FunctionImp::callAsFunction): Refetch the debugger after executing the function
2332         in case the WebFrame it was running in has since been destroyed.
2333
2334 2006-06-17  David Kilzer  <ddkilzer@kilzer.net>
2335
2336         Reviewed by ggaren.
2337
2338         http://bugzilla.opendarwin.org/show_bug.cgi?id=9476
2339         REGRESSION: Reproducible crash after closing window after viewing
2340         css2.1/t0803-c5501-imrgn-t-00-b-ag.html
2341
2342         * kjs/debugger.cpp:
2343         (Debugger::detach): Call setDebugger(0) for all interpreters removed from
2344         the 'attached to a debugger' list.
2345
2346 2006-06-17  Anders Carlsson  <acarlsson@apple.com>
2347
2348         Reviewed by Maciej and Geoff.
2349
2350         http://bugzilla.opendarwin.org/show_bug.cgi?id=7080
2351         Provide some way to stop a JavaScript infinite loop
2352         
2353         * kjs/completion.h:
2354         (KJS::):
2355         Add Interrupted completion type.
2356         
2357         * kjs/function.cpp:
2358         (KJS::FunctionImp::callAsFunction):
2359         (KJS::GlobalFuncImp::callAsFunction):
2360         Only set the exception on the new ExecState if the current one has had one.
2361         
2362         * kjs/interpreter.cpp:
2363         (KJS::TimeoutChecker::startTimeoutCheck):
2364         (KJS::TimeoutChecker::stopTimeoutCheck):
2365         (KJS::TimeoutChecker::alarmHandler):
2366         (KJS::TimeoutChecker::pauseTimeoutCheck):
2367         (KJS::TimeoutChecker::resumeTimeoutCheck):
2368         New TimeoutChecker class which handles setting Interpreter::m_timedOut flag after a given
2369         period of time. This currently only works on Unix platforms where setitimer and signals are used.
2370         
2371         (KJS::Interpreter::Interpreter):
2372         Initialize new member variables.
2373         
2374         (KJS::Interpreter::~Interpreter):
2375         Destroy the timeout checker.
2376         
2377         (KJS::Interpreter::startTimeoutCheck):
2378         (KJS::Interpreter::stopTimeoutCheck):
2379         (KJS::Interpreter::pauseTimeoutCheck):
2380         (KJS::Interpreter::resumeTimeoutCheck):
2381         Call the timeout checker.
2382         
2383         (KJS::Interpreter::handleTimeout):
2384         Called on timeout. Resets the m_timedOut flag and calls shouldInterruptScript.
2385         
2386         * kjs/interpreter.h:
2387         (KJS::Interpreter::setTimeoutTime):
2388         New function for setting the timeout time.
2389         
2390         (KJS::Interpreter::shouldInterruptScript):
2391         New function. The idea is that this should be overridden by subclasses in order to for example
2392         pop up a dialog asking the user if the script should be interrupted.
2393         
2394         (KJS::Interpreter::checkTimeout):
2395         New function which checks the m_timedOut flag and calls handleTimeout if it's set.
2396         
2397         * kjs/nodes.cpp:
2398         (DoWhileNode::execute):
2399         (WhileNode::execute):
2400         (ForNode::execute):
2401         Call Interpreter::checkTimeout after each iteration of the loop.
2402
2403 2006-06-15  Timothy Hatcher  <timothy@apple.com>
2404
2405         Reviewed by Geoff and Darin.
2406         
2407         Prefer the DWARF debugging symbols format for use in Xcode 2.3.
2408
2409         * JavaScriptCore.xcodeproj/project.pbxproj:
2410
2411 2006-06-14  Geoffrey Garen  <ggaren@apple.com>
2412
2413         Reviewed by Beth.
2414         
2415         - fixed http://bugzilla.opendarwin.org/show_bug.cgi?id=9438
2416         Someone broke ToT: cannot build
2417
2418         * JavaScriptCore.xcodeproj/project.pbxproj:
2419         * bindings/runtime_root.h: Changed "Interpreter.h" to "interpreter.h"
2420
2421 2006-06-12  Geoffrey Garen  <ggaren@apple.com>
2422
2423         build fix
2424         
2425         * bindings/objc/WebScriptObject.mm:
2426         (+[WebScriptObject throwException:]): Restore assignment I accidentally
2427         deleted in previous commit
2428
2429 2006-06-12  Geoffrey Garen  <ggaren@apple.com>
2430
2431         Reviewed by TimO, Maciej.
2432         
2433         - Merged InterpreterImp code into Interpreter, which implements
2434         all interpreter functionality now. This is part of my continuing quest
2435         to create an external notion of JS "execution context" that is unified and simple --
2436         something to replace the mix of Context, ContextImp, ExecState, Interpreter,
2437         InterpreterImp, and JSRun.
2438         
2439         All tests pass. Leaks test has not regressed from its baseline ~207 leaks
2440         with ~3460 leaked nodes.
2441
2442         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
2443         * JavaScriptCore.xcodeproj/project.pbxproj:
2444         * bindings/NP_jsobject.cpp:
2445         * bindings/objc/WebScriptObject.mm:
2446         (+[WebScriptObject throwException:]):
2447         * bindings/runtime_root.cpp:
2448         * bindings/runtime_root.h:
2449         * kjs/Context.cpp:
2450         (KJS::Context::Context):
2451         * kjs/ExecState.cpp: Added.
2452         (KJS::ExecState::lexicalInterpreter):
2453         * kjs/ExecState.h: Added.
2454         (KJS::ExecState::dynamicInterpreter):
2455         * kjs/SavedBuiltins.h: Added.
2456         * kjs/bool_object.cpp:
2457         (BooleanPrototype::BooleanPrototype):
2458         * kjs/collector.cpp:
2459         (KJS::Collector::collect):
2460         (KJS::Collector::numInterpreters):
2461         * kjs/context.h:
2462         * kjs/debugger.cpp:
2463         (Debugger::attach):
2464         (Debugger::detach):
2465         * kjs/function.cpp:
2466         (KJS::FunctionImp::callAsFunction):
2467         (KJS::GlobalFuncImp::callAsFunction):
2468         * kjs/function_object.cpp:
2469         (FunctionObjectImp::construct):
2470         * kjs/internal.cpp:
2471         * kjs/internal.h:
2472         * kjs/interpreter.cpp:
2473         (KJS::interpreterMap):
2474         (KJS::Interpreter::Interpreter):
2475         (KJS::Interpreter::init):
2476         (KJS::Interpreter::~Interpreter):
2477         (KJS::Interpreter::globalObject):
2478         (KJS::Interpreter::initGlobalObject):
2479         (KJS::Interpreter::globalExec):
2480         (KJS::Interpreter::checkSyntax):
2481         (KJS::Interpreter::evaluate):
2482         (KJS::Interpreter::builtinObject):
2483         (KJS::Interpreter::builtinFunction):
2484         (KJS::Interpreter::builtinArray):
2485         (KJS::Interpreter::builtinBoolean):
2486         (KJS::Interpreter::builtinString):
2487         (KJS::Interpreter::builtinNumber):
2488         (KJS::Interpreter::builtinDate):
2489         (KJS::Interpreter::builtinRegExp):
2490         (KJS::Interpreter::builtinError):
2491         (KJS::Interpreter::builtinObjectPrototype):
2492         (KJS::Interpreter::builtinFunctionPrototype):
2493         (KJS::Interpreter::builtinArrayPrototype):
2494         (KJS::Interpreter::builtinBooleanPrototype):
2495         (KJS::Interpreter::builtinStringPrototype):
2496         (KJS::Interpreter::builtinNumberPrototype):
2497         (KJS::Interpreter::builtinDatePrototype):
2498         (KJS::Interpreter::builtinRegExpPrototype):
2499         (KJS::Interpreter::builtinErrorPrototype):
2500         (KJS::Interpreter::builtinEvalError):
2501         (KJS::Interpreter::builtinRangeError):
2502         (KJS::Interpreter::builtinReferenceError):
2503         (KJS::Interpreter::builtinSyntaxError):
2504         (KJS::Interpreter::builtinTypeError):
2505         (KJS::Interpreter::builtinURIError):
2506         (KJS::Interpreter::builtinEvalErrorPrototype):
2507         (KJS::Interpreter::builtinRangeErrorPrototype):
2508         (KJS::Interpreter::builtinReferenceErrorPrototype):
2509         (KJS::Interpreter::builtinSyntaxErrorPrototype):
2510         (KJS::Interpreter::builtinTypeErrorPrototype):
2511         (KJS::Interpreter::builtinURIErrorPrototype):
2512         (KJS::Interpreter::mark):
2513         (KJS::Interpreter::interpreterWithGlobalObject):
2514         (KJS::Interpreter::saveBuiltins):
2515         (KJS::Interpreter::restoreBuiltins):
2516         * kjs/interpreter.h:
2517         (KJS::Interpreter::setCompatMode):
2518         (KJS::Interpreter::compatMode):
2519         (KJS::Interpreter::firstInterpreter):
2520         (KJS::Interpreter::nextInterpreter):
2521         (KJS::Interpreter::prevInterpreter):
2522         (KJS::Interpreter::debugger):
2523         (KJS::Interpreter::setDebugger):
2524         (KJS::Interpreter::setContext):
2525         (KJS::Interpreter::context):
2526         * kjs/nodes.cpp:
2527         (StatementNode::hitStatement):
2528         (RegExpNode::evaluate):
2529         * kjs/protect.h:
2530
2531 2006-06-12  Geoffrey Garen  <ggaren@apple.com>
2532
2533         Reviewed by Maciej.
2534         
2535         - Have *.lut.h files #include lookup.h to eliminate surprising header
2536         include order dependency.
2537
2538         * DerivedSources.make:
2539         * kjs/array_object.cpp:
2540         * kjs/date_object.cpp:
2541         * kjs/date_object.h:
2542         (KJS::DateProtoFunc::):
2543         * kjs/lexer.cpp:
2544         * kjs/math_object.cpp:
2545         * kjs/number_object.cpp:
2546         * kjs/regexp_object.cpp:
2547         * kjs/string_object.cpp:
2548
2549 2006-06-10  Geoffrey Garen  <ggaren@apple.com>
2550
2551         - http://bugzilla.opendarwin.org/show_bug.cgi?id=8515
2552         Linux porting compile bug
2553         
2554         Fix by Mike Emmel, Reviewed by Darin.
2555
2556         * JavaScriptCoreSources.bkl:
2557         * jscore.bkl:
2558         * wtf/Platform.h:
2559
2560 2006-06-09  Geoffrey Garen  <ggaren@apple.com>
2561
2562         Build fix -- I think :).
2563
2564         * JavaScriptCore.xcodeproj/project.pbxproj:
2565         * kjs/context.h:
2566
2567 2006-06-09  Geoffrey Garen  <ggaren@apple.com>
2568
2569         Reviewed by Eric (yay!).
2570         
2571         - Removed Context wrapper for ContextImp, renamed ContextImp to Context,
2572         split Context into its own file -- Context.cpp -- renamed _var to m_var,
2573         change ' *' to '* '.
2574
2575         * JavaScriptCore.xcodeproj/project.pbxproj:
2576         * kjs/Context.cpp: Added.
2577         (KJS::Context::Context):
2578         (KJS::Context::~Context):
2579         (KJS::Context::mark):
2580         * kjs/context.h:
2581         (KJS::Context::scopeChain):
2582         (KJS::Context::variableObject):
2583         (KJS::Context::setVariableObject):
2584         (KJS::Context::thisValue):
2585         (KJS::Context::callingContext):
2586         (KJS::Context::activationObject):
2587         (KJS::Context::currentBody):
2588         (KJS::Context::function):
2589         (KJS::Context::arguments):
2590         (KJS::Context::pushScope):
2591         (KJS::Context::seenLabels):
2592         * kjs/function.cpp:
2593         (KJS::FunctionImp::callAsFunction):
2594         (KJS::FunctionImp::processParameters):
2595         (KJS::FunctionImp::argumentsGetter):
2596         (KJS::GlobalFuncImp::callAsFunction):
2597         * kjs/internal.cpp:
2598         (KJS::InterpreterImp::evaluate):
2599         * kjs/internal.h:
2600         (KJS::InterpreterImp::setContext):
2601         (KJS::InterpreterImp::context):
2602         * kjs/interpreter.cpp:
2603         * kjs/interpreter.h:
2604         (KJS::ExecState::context):
2605         (KJS::ExecState::ExecState):
2606         * kjs/nodes.cpp:
2607         (currentSourceId):
2608         (currentSourceURL):
2609         (ThisNode::evaluate):
2610         (ResolveNode::evaluate):
2611         (FunctionCallResolveNode::evaluate):
2612         (PostfixResolveNode::evaluate):
2613         (DeleteResolveNode::evaluate):
2614         (TypeOfResolveNode::evaluate):
2615         (PrefixResolveNode::evaluate):
2616         (AssignResolveNode::evaluate):
2617         (VarDeclNode::evaluate):
2618         (VarDeclNode::processVarDecls):
2619         (DoWhileNode::execute):
2620         (WhileNode::execute):
2621         (ForNode::execute):
2622         (ForInNode::execute):
2623         (ContinueNode::execute):
2624         (BreakNode::execute):
2625         (ReturnNode::execute):
2626         (WithNode::execute):
2627         (SwitchNode::execute):
2628         (LabelNode::execute):
2629         (TryNode::execute):
2630         (FuncDeclNode::processFuncDecl):
2631         (FuncExprNode::evaluate):
2632
2633 2006-06-07  Geoffrey Garen  <ggaren@apple.com>
2634
2635         Removed API directory I prematurely/accidentally added.
2636
2637         * API: Removed.
2638
2639 2006-06-05  Mitz Pettel  <opendarwin.org@mitzpettel.com>
2640
2641         Reviewed and landed by Geoff.
2642
2643         - fix a regression in ecma_3/String/regress-104375.js
2644
2645         * kjs/string_object.cpp:
2646         (substituteBackreferences): If a 2-digit back reference is out of range,
2647         parse it as a 1-digit reference (followed by the other digit). This matches
2648         Firefox's behavior.
2649
2650 2006-06-05  Geoffrey Garen  <ggaren@apple.com>
2651
2652         Reviewed By Maciej.
2653         Darin already reviewed this change on the branch. See <rdar://problem/4317701>.
2654         
2655         - Fixed <rdar://problem/4291345> PCRE overflow in Safari JavaScriptCore
2656
2657         No test case because there's no behavior change.
2658         
2659         * pcre/pcre_compile.c:
2660         (read_repeat_counts): Check for integer overflow / out of bounds
2661
2662 2006-06-05  Geoffrey Garen  <ggaren@apple.com>
2663
2664         Reviewed by aliu.
2665
2666         - Changed CString length from int to size_t. We sould probably do this
2667         for UString, too. (Darin, if you're reading this: Maciej said so.)
2668         
2669         * kjs/function.cpp:
2670         (KJS::encode):
2671         * kjs/ustring.cpp:
2672         (KJS::CString::CString):
2673         (KJS::operator==):
2674         * kjs/ustring.h:
2675         (KJS::CString::size):
2676
2677 2006-06-04  Geoffrey Garen  <ggaren@apple.com>
2678
2679         Reviewed by Maciej.
2680         
2681         - http://bugzilla.opendarwin.org/show_bug.cgi?id=9304
2682         Minor cleanup in JavaScriptCore
2683
2684         * kjs/value.h: Removed redundant declarations
2685
2686 2006-06-04  Darin Adler  <darin@apple.com>
2687
2688         Reviewed by Anders.
2689
2690         - changed deleteAllValues so it can work on "const" collections
2691           Deleting the values affects the values, not the pointers in the
2692           collection, so it's legitimate to do it to a const collection,
2693           and a case of that actually came up in the XPath code.
2694
2695         * wtf/HashMap.h:
2696         (WTF::deleteAllPairSeconds): Use const iterators.
2697         (WTF::deleteAllValues): Take const HashMap reference as a parameter.
2698         * wtf/HashSet.h:
2699         (WTF::deleteAllValues): Take const HashSet reference as a parameter,
2700         and use const iterators.
2701         * wtf/Vector.h:
2702         (WTF::deleteAllValues): Take const Vector reference as a parameter.
2703
2704         - added more functions that are present in <math.h> on some platforms,
2705           but not on others; moved here from various files in WebCore
2706
2707         * wtf/MathExtras.h:
2708         (isinf): Added.
2709         (isnan): Added.
2710         (lround): Added.
2711         (lroundf): Tweaked.
2712         (round): Added.
2713         (roundf): Tweaked.
2714         (signbit): Added.
2715
2716 2006-06-02  Mitz Pettel  <opendarwin.org@mitzpettel.com>
2717
2718         Reviewed by ggaren.
2719
2720         - http://bugzilla.opendarwin.org/show_bug.cgi?id=9234
2721           Implement $&, $' and $` replacement codes in String.prototype.replace
2722
2723         Test: fast/js/string-replace-3.html
2724
2725         * kjs/string_object.cpp:
2726         (substituteBackreferences): Added support for $& (matched substring),
2727         $` (everything preceding matched substring), $' (everything following
2728         matched substring) and 2-digit back references, and cleaned up a little.
2729
2730 2006-06-02 Adele Peterson  <adele@apple.com>
2731
2732         Reviewed by Darin.
2733
2734         Set incremental linking to no. This seems to fix a build problem I was seeing
2735         where dftables couldn't find a dll. 
2736
2737         * JavaScriptCore.vcproj/dftables/dftables.vcproj:
2738
2739 2006-05-26  Steve Falkenburg  <sfalken@apple.com>
2740
2741         Build fixes/tweaks
2742
2743         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
2744
2745 === JavaScriptCore-521.11 ===
2746
2747 2006-05-24  Geoffrey Garen  <ggaren@apple.com>
2748
2749         Reviewed by mjs.
2750         
2751         - JSC half of fix for <rdar://problem/4557926> TOT REGRESSSION: Crash
2752         occurs when attempting to view image in slideshow mode at
2753         http://d.smugmug.com/gallery/581716 ( KJS::IfNode::execute
2754         (KJS::ExecState*) + 312)
2755
2756         On alternate threads, DOMObjects remain in the
2757         ScriptInterpreter's cache because they're not collected. So, they
2758         need an opportunity to mark their children.
2759         
2760         I'm not particularly happy with this solution because it fails to
2761         resolve many outstanding issues with the DOM object cache. Since none
2762         of those issues is a crasher or a serious compatibility concern,
2763         and since the behavior of other browsers is not much to go on in this
2764         case, I've filed <rdar://problem/4561439> about that, and I'm moving on 
2765         with my life.
2766
2767         * JavaScriptCore.xcodeproj/project.pbxproj:
2768         * kjs/collector.cpp:
2769         (KJS::Collector::collect):
2770         * kjs/internal.cpp:
2771         (KJS::InterpreterImp::mark):
2772         * kjs/internal.h:
2773         * kjs/interpreter.cpp:
2774         (KJS::Interpreter::mark):
2775         * kjs/interpreter.h:
2776
2777 === JavaScriptCore-521.10 ===
2778
2779 2006-05-22  Timothy Hatcher  <timothy@apple.com>
2780
2781         Reviewed by Eric, Kevin and Geoff.
2782
2783         Merge open source build fixes. <rdar://problem/4555500>
2784
2785         * kjs/collector.cpp: look at the rsp register in x86_64 
2786         (KJS::Collector::markOtherThreadConservatively):
2787         * wtf/Platform.h: add x86_64 to the platform list
2788
2789 2006-05-19  Anders Carlsson  <acarlsson@apple.com>
2790
2791         Reviewed by Geoff.
2792
2793         http://bugzilla.opendarwin.org/show_bug.cgi?id=8993
2794         Support function declaration in case statements
2795         
2796         * kjs/grammar.y: Get rid of StatementList and use SourceElements instead.
2797         
2798         * kjs/nodes.cpp:
2799         (CaseClauseNode::evalStatements):
2800         (CaseClauseNode::processVarDecls):
2801         (CaseClauseNode::processFuncDecl):
2802         (ClauseListNode::processFuncDecl):
2803         (CaseBlockNode::processFuncDecl):
2804         (SwitchNode::processFuncDecl):
2805         * kjs/nodes.h:
2806         (KJS::CaseClauseNode::CaseClauseNode):
2807         (KJS::ClauseListNode::ClauseListNode):
2808         (KJS::ClauseListNode::getClause):
2809         (KJS::ClauseListNode::getNext):
2810         (KJS::ClauseListNode::releaseNext):
2811         (KJS::SwitchNode::SwitchNode):
2812         Add processFuncDecl for the relevant nodes.        
2813
2814         * kjs/nodes2string.cpp:
2815         (CaseClauseNode::streamTo):
2816         next got renamed to source.
2817
2818 2006-05-17  George Staikos <staikos@kde.org>
2819
2820         Reviewed by Maciej, Alexey, and Eric.
2821
2822         * pcre/pcre_compile.c:
2823         * pcre/pcre_get.c:
2824         * pcre/pcre_exec.c:
2825         * wtf/UnusedParam.h:
2826         Use /**/ in .c files to compile with non-C99 and non-GCC compilers.
2827
2828         * kjs/testkjs.cpp:
2829         Change include to <wtf/HashTraits.h> from "HashTraits.h" to avoid -I
2830
2831         * wtf/unicode/qt4/UnicodeQt4.h:
2832         Use correct parentheses and correct mask for utf-32 support.
2833
2834 2006-05-17  Alexey Proskuryakov  <ap@nypop.com>
2835
2836         Reviewed by Darin.
2837
2838         - fix http://bugzilla.opendarwin.org/show_bug.cgi?id=8870
2839         Crash typing in Yahoo auto-complete widget.
2840
2841         Test: fast/js/regexp-stack-overflow.html
2842
2843         * pcre/pcre-config.h: Define NO_RECURSE.
2844
2845 2006-05-16  George Staikos <staikos@kde.org>
2846
2847         Reviewed by Maciej.
2848
2849         Fix some warnings and strict compilation errors.
2850
2851         * kjs/nodes.cpp: 
2852         * kjs/value.cpp: 
2853
2854 2006-05-15  Alexey Proskuryakov  <ap@nypop.com>
2855
2856         * make-generated-sources.sh: Changed to be executable and removed
2857         text in the file generated by "svn diff".
2858
2859 2006-05-15  Geoffrey Garen  <ggaren@apple.com>
2860
2861         Reviewed by Maciej.
2862
2863         - Fixed <rdar://problem/4534904> please do not treat "debugger" as
2864         a reserved word while parsing JavaScript (and other ECMA reserved
2865         words) 
2866
2867         AKA 
2868
2869         http://bugzilla.opendarwin.org/show_bug.cgi?id=6179 
2870         We treat "char" as a reserved word in JavaScript and firefox/IE do
2871         not
2872
2873         (1) I unreserved most of the spec's "future reserved words" because 
2874         they're not reserved in IE or FF. (Most, but not all, because IE
2875         somewhat randomly *does* reserve a few of them.)
2876         (2) I made 'debugger' a legitimate statement that acts like an empty
2877         statement because FF and IE support it.
2878         
2879         * kjs/grammar.y:
2880         * kjs/keywords.table:
2881
2882 2006-05-15  Tim Omernick  <timo@apple.com>
2883
2884         Reviewed by John Sullivan.
2885
2886         Part of <rdar://problem/4466508> Add 64-bit support to the Netscape Plugin API
2887
2888         Added to the Netscape Plugin API the concept of "plugin drawing models".  The drawing model
2889         determines the kind of graphics context created by the browser for the plugin, as well as 
2890         the Mac types of various Netscape Plugin API data structures.
2891
2892         There is a drawing model to represent the old QuickDraw-based API.  It is used by default
2893         if QuickDraw is available on the system, unless the plugin specifies another drawing model.
2894
2895         The big change is the addition of the CoreGraphics drawing model.  A plugin may request this
2896         drawing model to obtain access to a CGContextRef for drawing, instead of a QuickDraw CGrafPtr.
2897
2898         * bindings/npapi.h:
2899         Define NP_NO_QUICKDRAW when compiling 64-bit; there is no 64-bit QuickDraw.
2900         Added NPNVpluginDrawingModel, NPNVsupportsQuickDrawBool, and NPNVsupportsCoreGraphicsBool
2901         variables.
2902         Added NPDrawingModel enumeration.  Currently the only drawing models are QuickDraw and
2903         CoreGraphics.
2904         NPRegion's type now depends on the drawing model specified by the plugin.
2905         NP_Port is now only defined when QuickDraw is available.
2906         Added NP_CGContext, which is the type of the NPWindow's "window" member in CoreGraphics mode.
2907
2908 2006-05-13  Kevin M. Ollivier  <kevino@theolliviers.com>
2909
2910         Reviewed by Darin, landed by ap.
2911
2912         - http://bugzilla.opendarwin.org/show_bug.cgi?id=8528
2913           Bakefiles (and generated Makefiles) for wx and gdk ports
2914
2915         * make-generated-sources.sh: 
2916         Added script to configure environment to run DerivedSources.make
2917         
2918         * JavaScriptCoreSources.bkl:
2919         Added JavaScriptCore sources list for Bakefile.
2920         
2921         * jscore.bkl:
2922         Bakefile used to generate JavaScriptCore project files 
2923         (currently only used by wx and gdk ports)
2924
2925 2006-05-09  Steve Falkenburg  <sfalken@apple.com>
2926
2927         Fix Windows build.
2928         Minor fixes to WTF headers.
2929         
2930         Reviewed by kevin.
2931
2932         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Fix include dirs, paths to files. 
2933         * JavaScriptCore.vcproj/testkjs/testkjs.vcproj: Fix include dirs.
2934         * wtf/Assertions.h: include Platform.h to get definition for COMPILER()
2935         * wtf/Vector.h: include FastMalloc.h for definition of fastMalloc, fastFree
2936
2937 2006-05-09  Maciej Stachowiak  <mjs@apple.com>
2938
2939         Rubber stamped by Anders.
2940         
2941         - renamed kxmlcore to wtf
2942         
2943         kxmlcore --> wtf
2944         KXMLCore --> WTF
2945         KXC --> WTF
2946
2947         * JavaScriptCore.xcodeproj/project.pbxproj:
2948         * bindings/c/c_instance.cpp:
2949         * bindings/objc/WebScriptObject.mm:
2950         * kjs/JSImmediate.h:
2951         * kjs/Parser.cpp:
2952         * kjs/Parser.h:
2953         * kjs/array_object.cpp:
2954         * kjs/collector.cpp:
2955         (KJS::Collector::registerThread):
2956         * kjs/collector.h:
2957         * kjs/config.h:
2958         * kjs/function.cpp:
2959         (KJS::isStrWhiteSpace):
2960         * kjs/function.h:
2961         * kjs/identifier.cpp:
2962         * kjs/internal.cpp:
2963         * kjs/internal.h:
2964         * kjs/lexer.cpp:
2965         (Lexer::shift):
2966         (Lexer::isWhiteSpace):
2967         (Lexer::isIdentStart):
2968         (Lexer::isIdentPart):
2969         * kjs/lookup.cpp:
2970         * kjs/nodes.cpp:
2971         * kjs/nodes.h:
2972         * kjs/number_object.cpp:
2973         * kjs/object.h:
2974         * kjs/property_map.cpp:
2975         * kjs/property_map.h:
2976         * kjs/string_object.cpp:
2977         (StringProtoFunc::callAsFunction):
2978         * kjs/testkjs.cpp:
2979         (testIsInteger):
2980         * kjs/ustring.cpp:
2981         * kjs/ustring.h:
2982         * kxmlcore: Removed.
2983         * kxmlcore/AlwaysInline.h: Removed.
2984         * kxmlcore/Assertions.cpp: Removed.
2985         * kxmlcore/Assertions.h: Removed.
2986         * kxmlcore/FastMalloc.cpp: Removed.
2987         * kxmlcore/FastMalloc.h: Removed.
2988         * kxmlcore/FastMallocInternal.h: Removed.
2989         * kxmlcore/Forward.h: Removed.
2990         * kxmlcore/HashCountedSet.h: Removed.
2991         * kxmlcore/HashFunctions.h: Removed.
2992         * kxmlcore/HashMap.h: Removed.
2993         * kxmlcore/HashSet.h: Removed.
2994         * kxmlcore/HashTable.cpp: Removed.
2995         * kxmlcore/HashTable.h: Removed.
2996         * kxmlcore/HashTraits.h: Removed.
2997         * kxmlcore/ListRefPtr.h: Removed.
2998         * kxmlcore/Noncopyable.h: Removed.
2999         * kxmlcore/OwnArrayPtr.h: Removed.
3000         * kxmlcore/OwnPtr.h: Removed.
3001         * kxmlcore/PassRefPtr.h: Removed.
3002         * kxmlcore/Platform.h: Removed.
3003         * kxmlcore/RefPtr.h: Removed.
3004         * kxmlcore/TCPageMap.h: Removed.
3005         * kxmlcore/TCSpinLock.h: Removed.
3006         * kxmlcore/TCSystemAlloc.cpp: Removed.
3007         * kxmlcore/TCSystemAlloc.h: Removed.
3008         * kxmlcore/UnusedParam.h: Removed.
3009         * kxmlcore/Vector.h: Removed.
3010         * kxmlcore/VectorTraits.h: Removed.
3011         * kxmlcore/unicode: Removed.
3012         * kxmlcore/unicode/Unicode.h: Removed.
3013         * kxmlcore/unicode/UnicodeCategory.h: Removed.
3014         * kxmlcore/unicode/icu: Removed.
3015         * kxmlcore/unicode/icu/UnicodeIcu.h: Removed.
3016         * kxmlcore/unicode/posix: Removed.
3017         * kxmlcore/unicode/qt3: Removed.
3018         * kxmlcore/unicode/qt4: Removed.
3019         * kxmlcore/unicode/qt4/UnicodeQt4.h: Removed.
3020         * pcre/pcre_get.c:
3021         * wtf: Added.
3022         * wtf/Assertions.cpp:
3023         * wtf/Assertions.h:
3024         * wtf/FastMalloc.cpp:
3025         (WTF::TCMalloc_ThreadCache::Scavenge):
3026         (WTF::do_malloc):
3027         (WTF::do_free):
3028         (WTF::TCMallocGuard::TCMallocGuard):
3029         (WTF::malloc):
3030         (WTF::free):
3031         (WTF::calloc):
3032         (WTF::cfree):
3033         (WTF::realloc):
3034         * wtf/FastMalloc.h:
3035         * wtf/FastMallocInternal.h:
3036         * wtf/Forward.h:
3037         * wtf/HashCountedSet.h:
3038         * wtf/HashFunctions.h:
3039         * wtf/HashMap.h:
3040         * wtf/HashSet.h:
3041         * wtf/HashTable.cpp:
3042         * wtf/HashTable.h:
3043         * wtf/HashTraits.h:
3044         * wtf/ListRefPtr.h:
3045         * wtf/Noncopyable.h:
3046         * wtf/OwnArrayPtr.h:
3047         * wtf/OwnPtr.h:
3048         * wtf/PassRefPtr.h:
3049         * wtf/RefPtr.h:
3050         * wtf/TCSystemAlloc.cpp:
3051         (TCMalloc_SystemAlloc):
3052         * wtf/Vector.h:
3053         * wtf/VectorTraits.h:
3054         * wtf/unicode/UnicodeCategory.h:
3055         * wtf/unicode/icu/UnicodeIcu.h:
3056
3057 2006-05-08  Timothy Hatcher  <timothy@apple.com>
3058
3059         Reviewed by Tim O.
3060
3061         * bindings/npapi.h: do not define #pragma options align=mac68k if we are 64-bit
3062
3063 2006-05-07  Darin Adler  <darin@apple.com>
3064
3065         Reviewed and landed by Maciej.
3066
3067         - fix http://bugzilla.opendarwin.org/show_bug.cgi?id=8765
3068         Random crashes on TOT since the form state change
3069         
3070         I haven't figured out how to construct a test for this, but this does seem to fix the
3071         problem; Mitz mentioned that a double-destroy was occurring in these functions.
3072         
3073         * kxmlcore/HashMap.h: (KXMLCore::HashMap::remove): Use RefCounter::deref instead of calling
3074         ~ValueType, because ~ValueType often results in a double-destroy, since the HashTable also
3075         destroys the element based on the storage type. The RefCounter template correctly does work
3076         only in cases where ValueType and ValueStorageType differ and this class is what's used
3077         elsewhere for the same purpose; I somehow missed this case when optimizing HashMap.
3078         * kxmlcore/HashSet.h: (KXMLCore::HashSet::remove): Ditto.
3079         
3080 2006-05-05  Darin Adler  <darin@apple.com>
3081
3082         - http://bugzilla.opendarwin.org/show_bug.cgi?id=8722
3083           IE compatibility fix in date parsing
3084
3085         * kjs/date_object.cpp: (KJS::parseDate): Merged change that George Staikos provided
3086         from KDE 3.4.3 branch that allows day values of 0 and values that are > 1000.
3087
3088 2006-05-04  Anders Carlsson  <andersca@mac.com>
3089
3090         Reviewed by Maciej.
3091
3092         http://bugzilla.opendarwin.org/show_bug.cgi?id=8734
3093         Would like a Vector::append that takes another Vector
3094         
3095         * kxmlcore/Vector.h:
3096         (KXMLCore::::append):
3097         New function that takes another array.
3098
3099 2006-05-02  Steve Falkenburg  <sfalken@apple.com>
3100
3101         Reviewed by eric.
3102
3103         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: set NDEBUG for release build
3104         * kxmlcore/FastMalloc.cpp: Prevent USE_SYSTEM_MALLOC from being defined twice
3105
3106 2006-05-02  Anders Carlsson  <andersca@mac.com>
3107
3108         Reviewed by Maciej.
3109
3110         * kxmlcore/HashMap.h:
3111         (KXMLCore::::operator):
3112         Return *this
3113
3114 2006-05-01  Tim Omernick  <timo@apple.com>
3115
3116         Reviewed by Tim Hatcher.
3117
3118         <rdar://problem/4476875> Support printing for embedded Netscape plugins
3119
3120         * bindings/npapi.h:
3121         Fixed struct alignment problem in our npapi.h.  Structs must be 68k-aligned on both pre-Mac OS X
3122         and Mac OS X systems, as this is what plugins expect.
3123
3124 2006-05-01  Timothy Hatcher  <timothy@apple.com>
3125
3126         Reviewed by Maciej.
3127         
3128         <rdar://problem/4308243> 8F36 Regression: crash in malloc_consolidate if you use a .PAC file
3129
3130         The original fix missed the oversized cell case. Added a test for "currentThreadIsMainThread || 
3131         imp->m_destructorIsThreadSafe" where we collect oversized cells.
3132
3133         We don't have a way to test PAC files yet, so there's no test attached.
3134
3135         * kjs/collector.cpp:
3136         (KJS::Collector::collect): test the thread when we collect oversized cells
3137
3138 2006-05-01  Tim Omernick  <timo@apple.com>
3139
3140         Reviewed by Adele.
3141
3142         <rdar://problem/4526114> REGRESSION (two days ago): LOG() just prints @ for NSObject substitutions
3143
3144         * kxmlcore/Assertions.cpp:
3145         Changed sense of strstr("%@") check.  I already made the same fix to the WebBrowser assertions.
3146
3147 2006-04-28  Steve Falkenburg  <sfalken@apple.com>
3148
3149         Reviewed by kdecker
3150         
3151         Actually apply the change that was reviewed insted of checking it in with an #if 0 (oops).
3152
3153         * kjs/testkjs.cpp:
3154         (main): Suppress C runtime alerts
3155
3156 2006-04-28  Steve Falkenburg  <sfalken@apple.com>
3157
3158         Reviewed by kdecker
3159
3160         Suppress error reporting dialog that blocks Javascript tests from completing.
3161         
3162         Real error is due to an overflow in the date/time handling functions that needs
3163         to be addressed, but this will prevent the hang running the Javascript tests
3164         on the build bot (along with the related changes).
3165         
3166         * kjs/testkjs.cpp:
3167         (main): Suppress C runtime alerts
3168
3169 2006-04-27  Geoffrey Garen  <ggaren@apple.com>
3170
3171         Reviewed by Maciej
3172
3173         - Minor fixups I discovered while working on the autogenerator.
3174         
3175         * kjs/lookup.cpp:
3176         (findEntry): ASSERT that size is not 0, because otherwise we'll % by 0,
3177         compute a garbage address, and possibly crash.
3178         * kjs/lookup.h:
3179         (cacheGlobalObject): Don't enumerate cached objects -- ideally, they
3180         would be hidden entirely.
3181
3182 2006-04-21  Kevin M. Ollivier  <kevino@theolliviers.com>
3183
3184         Reviewed by Darin.
3185
3186         - http://bugzilla.opendarwin.org/show_bug.cgi?id=8507
3187           Compilation fixes for building on gcc 4.0.2, and without precomp headers
3188
3189         * kjs/operations.h:
3190         * kxmlcore/Assertions.cpp:
3191         * kxmlcore/FastMalloc.cpp:
3192         Added necessary headers to resolve compilation issues when not using
3193         precompiled headers.
3194         
3195         * kjs/value.h: Declare the JSCell class before friend declaration  
3196         to resolve compilation issues with gcc 4.0.2.
3197         
3198         * kxmlcore/Platform.h: Set Unicode support to use ICU on platforms
3199         other than KDE (previously only defined for Win and Mac OS)
3200                 
3201 2006-04-18  Eric Seidel  <eseidel@apple.com>
3202
3203         Reviewed by ggaren.
3204
3205         Fix "new Function()" to correctly use lexical scoping.
3206         Add ScopeChain::print() function for debugging.
3207         <rdar://problem/4067864> REGRESSION (125-407): JavaScript failure on PeopleSoft REN Server
3208
3209         * kjs/function_object.cpp:
3210         (FunctionObjectImp::construct):
3211         * kjs/scope_chain.cpp:
3212         (KJS::ScopeChain::print):
3213         * kjs/scope_chain.h:
3214
3215 2006-04-14  James G. Speth  <speth@end.com>
3216
3217         Reviewed by Timothy.
3218
3219         Bug 8389: support for Cocoa bindings - binding an NSTreeController to the WebView's DOM
3220         http://bugzilla.opendarwin.org/show_bug.cgi?id=8389
3221
3222         Adds a category to WebScriptObject with array accessors for KVC/KVO.
3223
3224         If super valueForKey: fails it will call valueForUndefinedKey:, which is
3225         important because it causes the right behavior to happen with bindings using
3226         the "Raises for Not Applicable Keys" flag and the "Not Applicable Placeholder"
3227
3228         * bindings/objc/WebScriptObject.mm:
3229         (-[WebScriptObject valueForKey:]):
3230         (-[WebScriptObject count]):
3231         (-[WebScriptObject objectAtIndex:]):
3232         (-[WebUndefined description]): return "undefined"
3233
3234 2006-04-13  Geoffrey Garen  <ggaren@apple.com>
3235
3236         Reviewed by Darin.
3237
3238         * kjs/internal.cpp:
3239         (KJS::InterpreterImp::initGlobalObject): Add the built-in object
3240         prototype to the end of the global object's prototype chain instead of
3241         just blowing away its existing prototype. We need to do this because
3242         the window object has a meaningful prototype now.
3243
3244 2006-04-13  Maciej Stachowiak  <mjs@apple.com>
3245
3246         Reviewed by Geoff.
3247         
3248         - fix testkjs to not show false-positive KJS::Node leaks in debug builds
3249
3250         * kjs/testkjs.cpp:
3251         (doIt):
3252         (kjsmain):
3253
3254 2006-04-11  Geoffrey Garen  <ggaren@apple.com>
3255
3256         Reviewed by Maciej.
3257
3258         Minor code cleanup -- passes all the JS tests.
3259
3260         * kjs/object_object.cpp:
3261         (ObjectObjectImp::construct):
3262         (ObjectObjectImp::callAsFunction):
3263
3264 2006-04-11  Darin Adler  <darin@apple.com>
3265
3266         - another attempt to fix Windows build -- Vector in Forward.h was not working
3267
3268         * kxmlcore/Forward.h: Remove Vector.
3269         * kxmlcore/Vector.h: Add back default arguments, remove include of
3270         Forward.h.
3271
3272 2006-04-11  Darin Adler  <darin@apple.com>
3273
3274         - try to fix Windows build -- HashForward.h was not working
3275
3276         * kxmlcore/HashForward.h: Removed.
3277
3278         * JavaScriptCore.xcodeproj/project.pbxproj: Remove HashForward.h.
3279         * kjs/collector.h: Remove use of HashForward.h.
3280         * kxmlcore/HashCountedSet.h: Remove include of HashForward.h, restore
3281         default arguments.
3282         * kxmlcore/HashMap.h: Ditto.
3283         * kxmlcore/HashSet.h: Ditto.
3284
3285 2006-04-11  David Harrison  <harrison@apple.com>
3286
3287         Reviewed by Darin.
3288
3289         - fixed clean build, broken by Darin's check-in
3290
3291         * kjs/date_object.cpp: Add needed include of lookup.h.
3292         * kjs/regexp_object.cpp: Move include of .lut.h file below other includes.
3293
3294 2006-04-10  Darin Adler  <darin@apple.com>
3295
3296         Rubber-stamped by John Sullivan.
3297
3298         - switched from a shell script to a makefile for generated files
3299         - removed lots of unneeded includes
3300         - added new Forward.h and HashForward.h headers that allow compiling with
3301           fewer unneeded templates
3302
3303         * DerivedSources.make: Added.
3304         * generate-derived-sources: Removed.
3305         * JavaScriptCore.xcodeproj/project.pbxproj: Added new files, changed to use
3306         DerivedSources.make.
3307
3308         * kxmlcore/Forward.h: Added.
3309         * kxmlcore/HashForward.h: Added.
3310
3311         * kxmlcore/HashCountedSet.h: Include HashForward for default args.
3312         * kxmlcore/HashMap.h: Ditto.
3313         * kxmlcore/HashSet.h: Ditto.
3314
3315         * kjs/object.h:
3316         * kjs/object.cpp:
3317         Moved KJS_MAX_STACK into the .cpp file.
3318
3319         * bindings/NP_jsobject.cpp:
3320         * bindings/c/c_instance.h:
3321         * bindings/jni/jni_class.h:
3322         * bindings/jni/jni_runtime.h:
3323         * bindings/jni/jni_utility.h:
3324         * bindings/objc/WebScriptObject.mm:
3325         * bindings/objc/WebScriptObjectPrivate.h:
3326         * bindings/objc/objc_class.h:
3327         * bindings/objc/objc_class.mm:
3328         * bindings/objc/objc_instance.h:
3329         * bindings/objc/objc_instance.mm:
3330         * bindings/objc/objc_runtime.mm:
3331         * bindings/objc/objc_utility.mm:
3332         * bindings/runtime.h:
3333         * bindings/runtime_array.cpp:
3334         * bindings/runtime_array.h:
3335         * bindings/runtime_method.cpp:
3336         * bindings/runtime_method.h:
3337         * bindings/runtime_object.cpp:
3338         * bindings/runtime_root.h:
3339         * kjs/JSImmediate.cpp:
3340         * kjs/Parser.h:
3341         * kjs/array_object.cpp:
3342         * kjs/array_object.h:
3343         * kjs/bool_object.cpp:
3344         * kjs/bool_object.h:
3345         * kjs/collector.h:
3346         * kjs/context.h:
3347         * kjs/debugger.cpp:
3348         * kjs/error_object.h:
3349         * kjs/function_object.h:
3350         * kjs/internal.h:
3351         * kjs/lexer.cpp:
3352         * kjs/math_object.cpp:
3353         * kjs/math_object.h:
3354         * kjs/nodes.cpp:
3355         * kjs/nodes.h:
3356         * kjs/number_object.cpp:
3357         * kjs/number_object.h:
3358         * kjs/object_object.cpp:
3359         * kjs/operations.cpp:
3360         * kjs/protected_reference.h:
3361         * kjs/reference.h:
3362         * kjs/reference_list.h:
3363         * kjs/regexp_object.h:
3364         * kjs/string_object.cpp:
3365         * kjs/string_object.h:
3366         * kjs/testkjs.cpp:
3367         * kjs/value.cpp:
3368         * kjs/value.h:
3369         * kxmlcore/HashTable.h:
3370         * kxmlcore/ListRefPtr.h:
3371         * kxmlcore/TCPageMap.h:
3372         * kxmlcore/Vector.h:
3373         Removed unneeded header includes.
3374
3375 2006-04-09  Geoffrey Garen  <ggaren@apple.com>
3376
3377         Reviewed by eric.
3378
3379         - Fixed http://bugzilla.opendarwin.org/show_bug.cgi?id=8284
3380         prevent unnecessary entries in the "nodes with extra refs" hash table
3381
3382         This patch switches manually RefPtr exchange with use of
3383         RefPtr::release to ensure that a node's ref count never tops 1
3384         (in the normal case).
3385
3386         * kjs/nodes.cpp:
3387         (BlockNode::BlockNode):
3388         (CaseBlockNode::CaseBlockNode):
3389         * kjs/nodes.h:
3390         (KJS::ArrayNode::ArrayNode):
3391         (KJS::ObjectLiteralNode::ObjectLiteralNode):
3392         (KJS::ArgumentsNode::ArgumentsNode):
3393         (KJS::VarStatementNode::VarStatementNode):
3394         (KJS::ForNode::ForNode):
3395         (KJS::CaseClauseNode::CaseClauseNode):
3396         (KJS::FuncExprNode::FuncExprNode):
3397         (KJS::FuncDeclNode::FuncDeclNode):
3398
3399 2006-04-08  Alexey Proskuryakov  <ap@nypop.com>
3400
3401         Reviewed by Darin.
3402
3403         One more attempt - use reinterpret_cast, rather than static_cast.
3404
3405 2006-04-08  Alexey Proskuryakov  <ap@nypop.com>
3406
3407         Reviewed by Darin.
3408
3409         An attempt to fix Win32 build - ICU uses wchar_t on Windows, so we need a type cast.
3410
3411         * kxmlcore/unicode/icu/UnicodeIcu.h:
3412         (KXMLCore::Unicode::toLower):
3413         (KXMLCore::Unicode::toUpper):
3414
3415 2006-04-08  Alexey Proskuryakov  <ap@nypop.com>
3416
3417         Reviewed by Darin.
3418
3419         - fix http://bugzilla.opendarwin.org/show_bug.cgi?id=8264
3420         toLowerCase and toUpperCase don't honor special mappings
3421
3422         Test: fast/js/string-capitalization.html
3423
3424         * JavaScriptCore.xcodeproj/project.pbxproj: Added KXMLCore::Unicode headers to the project.
3425         * icu/unicode/putil.h: Added (copied from WebCore).
3426         * icu/unicode/uiter.h: Ditto.
3427         * icu/unicode/ustring.h: Ditto.
3428         * kjs/string_object.cpp:
3429         (StringProtoFunc::callAsFunction): Use the new KXMLCore::Unicode::toUpper() and toLower().
3430         * kjs/ustring.cpp: Removed unused (and evil) UChar::toLower() and toUpper().
3431         * kjs/ustring.h: Ditto.
3432
3433         * kxmlcore/unicode/Unicode.h: Corrected capitalization of the word Unicode.
3434         * kxmlcore/unicode/UnicodeCategory.h: Renamed include guard macro to match file name.
3435
3436         * kxmlcore/unicode/icu/UnicodeIcu.h:
3437         (KXMLCore::Unicode::toLower): Work on strings, not individual characters. Use ICU root locale.
3438         (KXMLCore::Unicode::toUpper): Ditto.
3439         (KXMLCore::Unicode::isFormatChar): Use int32_t, which can hold a complete code point.
3440         (KXMLCore::Unicode::isSeparatorSpace): Ditto.
3441         (KXMLCore::Unicode::category): Ditto.
3442         * kxmlcore/unicode/qt4/UnicodeQt4.h:
3443         (KXMLCore::Unicode::toLower): Work on strings, not individual characters.
3444         (KXMLCore::Unicode::toUpper): Ditto.
3445         (KXMLCore::Unicode::isFormatChar): Use int32_t, which can hold a complete code point.
3446         (KXMLCore::Unicode::isSeparatorSpace): Ditto.
3447         (KXMLCore::Unicode::category): Ditto.
3448
3449         * tests/mozilla/ecma/String/15.5.4.12-1.js: Corrected expected results.
3450         * tests/mozilla/ecma/String/15.5.4.12-5.js: Corrected expected results.
3451
3452 2006-04-05  Darin Adler  <darin@apple.com>
3453
3454         - attempt to fix Windows build
3455
3456         * kxmlcore/HashMap.h: (KXMLCore::HashMap::remove): Use (*it). instead of it->.
3457         * kxmlcore/HashSet.h: (KXMLCore::HashSet::remove): Ditto.
3458
3459 2006-04-05  Darin Adler  <darin@apple.com>
3460
3461         - attempt to fix Windows build
3462
3463         * os-win32/stdint.h: Add int8_t, uint8_t, int64_t.
3464
3465 2006-04-05  Darin Adler  <darin@apple.com>
3466
3467         Reviewed by Maciej.
3468
3469         - fix memory leak introduced by the previous change
3470
3471         * kxmlcore/HashTable.h: Specialize NeedsRef so that it correctly returns true when
3472         the value in question is a pair where one of the pair needs a ref and the other
3473         of the pair does not.
3474
3475 2006-04-05  Darin Adler  <darin@apple.com>
3476
3477         Reviewed by Maciej.
3478
3479         - JavaScriptCore part of fix for http://bugzilla.opendarwin.org/show_bug.cgi?id=8049
3480           StringImpl hash traits deleted value creates an init routine for WebCore
3481           <rdar://problem/4442248> REGRESSION: WebCore has init routines (8049)
3482
3483         Change HashMap and HashSet implementation so they fold various types together.
3484         This allows us to implement maps and sets that use RefPtr<WebCore::StringImpl>
3485         and WebCore::String in terms of the underlying raw pointer type, and hence use
3486         -1 for the deleted value.
3487
3488         * kxmlcore/HashTraits.h: Added a new type to HashTraits, StorageTraits, which is a
3489         type to be used when storing a value that has the same layout as the type itself.
3490         This is used only for non-key cases. In the case of keys, the hash function must also
3491         be considered. Moved emptyValue out of GenericHashTraitsBase into GenericHashTraits.
3492         Added a new bool to HashTraits, needsRef, which indicates whether the type needs
3493         explicit reference counting. If the type itself has needsRef true, but the storage
3494         type has needsRef false, then the HashSet or HashMap has to handle the reference
3495         counting explicitly. Added hash trait specializations for all signed integer values
3496         that give -1 as the deleted value. Gave all integers StorageTraits of the canonical
3497         integer type of the same size so int and long will share code. Gave all pointers and
3498         RefPtrs StorageTraits of the appropriately sized integer type. Removed redundant
3499         TraitType and emptyValue definitions in the pointer specialization for HashTraits.
3500         Added PairBaseHashTraits, which doesn't try to set up needsDestruction and deletedValue.
3501         Useful for types where we don't want to force the existence of deletedValue, such as
3502         the type of a pair in a HashMap which is not the actual storage type. Removed an
3503         unneeded parameter from the DeletedValueAssigner template. Added HashKeyStorageTraits
3504         template, which determines what type can be used to store a given hash key type with
3505         a given hash function, and specialized it for pointers and RefPtr so that pointer
3506         hash tables share an underlying HashTable that uses IntHash.
3507
3508         * kxmlcore/HashTable.h: Added HashTableConstIteratorAdapter, HashTableIteratorAdapter,
3509         NeedsRef, RefCountManagerBase, RefCountManager, HashTableRefCountManagerBase, and
3510         HashTableRefCountManager. All are used by both HashSet and HashMap to handle hash
3511         tables where the type stored is not the same as the real value type.
3512         
3513         * kxmlcore/HashFunctions.h: Added a new struct named IntTypes that finds an
3514         integer type given a sizeof value. Renamed pointerHash to intHash and made it
3515         use overloading and take integer parameters. Added an IntHash struct which is
3516         a hash function that works for integers. Changed PtrHash to call IntHash with
3517         an appropriately sized integer. Made IntHash the default hash function for
3518         many integer types. Made PtrHash the default hash function for RefPtr as well
3519         as for raw pointers.
3520
3521         * kxmlcore/HashSet.h: Changed implementation to use a separate "storage type"
3522         derived from the new traits. The HashTable will use the storage type and all
3523         necessary translation and ref/deref is done at the HashSet level. Also reorganized
3524         the file so that the HashSet is at the top and has no inline implementation inside
3525         it so it's easy to read the interface to HashSet.
3526
3527         * kxmlcore/HashMap.h: Changed implementation to use a separate "storage type"
3528         derived from the new traits. The HashTable will use the storage type and all
3529         necessary translation and ref/deref is done at the HashMap level. Also reorganized
3530         the file so that the HashMap is at the top and has no inline implementation inside
3531         it so it's easy to read the interface to HashMap.
3532
3533         * kxmlcore/HashMapPtrSpec.h: Removed. Superceded by optimizations in HashMap itself.
3534
3535         * JavaScriptCore.xcodeproj/project.pbxproj: Remove HashMapPtrSpec.h, resort files,
3536         and also remove some unnecessary build settings from the aggregate target that
3537         generates derived sources.
3538         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Ditto.
3539
3540 2006-04-04  Timothy Hatcher  <timothy@apple.com>
3541
3542         Reviewed by Darin.
3543
3544         The Debug and Release frameworks are now built with install paths relative to the build products directory.
3545         This removes the need for other projects to build with -framework WebCore and -framework JavaScriptCore. 
3546
3547         * JavaScriptCore.xcodeproj/project.pbxproj:
3548
3549 2006-04-04  Eric Seidel  <eseidel@apple.com>
3550
3551         Reviewed by ggaren.
3552
3553         Fix win32 build.
3554         Disable ASSERT redefinition warnings for now.
3555
3556         * JavaScriptCore.vcproj/testkjs/testkjs.vcproj:
3557         * kxmlcore/Assertions.h:
3558
3559 2006-04-04  Bjrn Graf  <bjoern.graf@gmail.com>
3560
3561         Reviewed by ggaren & darin.  Landed by eseidel.
3562
3563         Integrate CURL version of gettimeofday
3564         http://bugzilla.opendarwin.org/show_bug.cgi?id=7399
3565         Disable crash report dialogs for testkjs.exe in Release mode
3566         http://bugzilla.opendarwin.org/show_bug.cgi?id=8113
3567
3568         * kjs/testkjs.cpp:
3569         (StopWatch::start):
3570         (StopWatch::stop):
3571         (StopWatch::getElapsedMS):
3572         (main):
3573         (kjsmain):
3574
3575 2006-04-04  Eric Seidel  <eseidel@apple.com>
3576
3577         Reviewed by mjs.
3578
3579         * kjs/number_object.cpp:
3580         (NumberProtoFunc::callAsFunction): remove trunc() to fix win32.
3581
3582 2006-03-12  Maciej Stachowiak  <mjs@apple.com>
3583
3584         Reviewed by Darin.
3585         
3586         - fixed "toPrecision sometimes messes up the last digit on intel Macs"
3587         http://bugzilla.opendarwin.org/show_bug.cgi?id=7748
3588
3589         * kjs/number_object.cpp:
3590         (intPow10): Compute integer powers of 10 using exponentiation by squaring.
3591         (NumberProtoFunc::callAsFunction): Use intPow10(n) in place of all pow(10.0, n),
3592         plus a bit of refactoring.
3593
3594 2006-04-03  Darin Adler  <darin@apple.com>
3595
3596         - tweak config.h and Platform.h to try to get buildbot working
3597           (making some small changes at the same time)
3598
3599         * kjs/config.h: Removed now-unneeded HAVE_ICU.
3600         * kxmlcore/Platform.h: Tweak how platform gets set up. Move all the
3601         USE stuff to the end.
3602
3603 2006-04-03  George Staikos   <staikos@opensource.apple.com>
3604
3605         Reviewed by Maciej.
3606
3607         Fix Win32 build breakage from previous commit, remove unused forward.
3608
3609 2006-04-03  George Staikos   <staikos@opensource.apple.com>
3610
3611         Reviewed by Maciej.
3612
3613         Implement a unicode abstraction layer to make JavaScriptCore much more
3614         easily ported to other platforms without having to take in libicu.  Also
3615         makes the unicode related code easier to understand.
3616
3617 2006-04-03  Timothy Hatcher  <timothy@apple.com>
3618
3619         Reviewed by Adele.
3620
3621         Fixes <rdar://problem/4498338> JavaScriptCore fails to compile for ppc64
3622         Other 64 bit build fixes.
3623
3624         * kjs/collector.cpp:
3625         (KJS::Collector::markOtherThreadConservatively): test for __DARWIN_UNIX03 and use __r1
3626         * kjs/dtoa.cpp:
3627         (Bigint::): cast PRIVATE_mem to unsigned to prevent warning
3628         * bindings/jni/jni_utility.cpp:
3629         (KJS::Bindings::getJavaVM): cast jniError to long to prevent format warning
3630         (KJS::Bindings::getJNIEnv): cast jniError to long to prevent format warning
3631         * bindings/runtime_root.cpp:
3632         (KJS::Bindings::addNativeReference): cast CFDictionaryGetValue to unsigned long to prevent warning
3633         (KJS::Bindings::removeNativeReference): cast CFDictionaryGetValue to unsigned long to prevent warning
3634
3635 2006-03-31  Darin Adler  <darin@apple.com>
3636
3637         Reviewed by Geoff.
3638
3639         - <rdar://problem/4395622> API: WebScriptObject.h incorrectly reports that -isSelectorExcludedFromWebScript returns NO by default
3640
3641         * bindings/objc/WebScriptObject.h: Fixed comment.
3642
3643 2006-03-31  Eric Seidel  <eseidel@apple.com>
3644
3645         Reviewed by mjs.
3646
3647         A bit more code cleanup.
3648
3649         * bindings/c/c_utility.cpp:
3650         (KJS::Bindings::convertValueToNPVariant):
3651         * bindings/objc/objc_runtime.mm:
3652         (convertValueToObjcObject):
3653         * bindings/objc/objc_utility.mm:
3654         (KJS::Bindings::convertValueToObjcValue):
3655         * kjs/function.cpp:
3656         (KJS::GlobalFuncImp::callAsFunction):
3657         * kjs/interpreter.cpp:
3658         (KJS::ExecState::lexicalInterpreter):
3659         * kjs/interpreter.h:
3660         * kjs/operations.cpp:
3661         (KJS::equal):
3662
3663 2006-03-30  Eric Seidel  <eseidel@apple.com>
3664
3665         Reviewed by anders.
3666
3667         Small code-style update.
3668
3669         * kjs/operations.cpp:
3670         (KJS::isNaN):
3671         (KJS::isInf):
3672         (KJS::isPosInf):
3673         (KJS::isNegInf):
3674         (KJS::equal):
3675         (KJS::strictEqual):
3676         (KJS::relation):
3677         (KJS::maxInt):
3678         (KJS::minInt):
3679         (KJS::add):
3680         (KJS::mult):
3681
3682 2006-03-31  Anders Carlsson  <andersca@mac.com>
3683
3684         Reviewed by Maciej.
3685
3686         Make sure the GetterSetterImp objects are marked as well.
3687         
3688         * kjs/internal.cpp:
3689         (KJS::GetterSetterImp::mark):
3690         Call JSCell::mark().
3691
3692 2006-03-30  Eric Seidel  <eseidel@apple.com>
3693
3694         Reviewed by ggaren.
3695
3696         * kjs/nodes.h: Some various small style fixes.
3697
3698 2006-03-30  Eric Seidel  <eseidel@apple.com>
3699
3700         Reviewed by ggaren.
3701
3702         Clean-up style issues in node.h, remove redundant initializations.
3703
3704         * kjs/nodes.h:
3705         (KJS::StatementNode::evaluate):
3706         (KJS::ArrayNode::ArrayNode):
3707         (KJS::ObjectLiteralNode::ObjectLiteralNode):
3708         (KJS::ArgumentsNode::ArgumentsNode):
3709         (KJS::NewExprNode::NewExprNode):
3710         (KJS::CaseClauseNode::CaseClauseNode):
3711         (KJS::FuncDeclNode::FuncDeclNode):
3712
3713 2006-03-30  Tim Omernick  <timo@apple.com>
3714
3715         Reviewed by Geoff.
3716
3717         <rdar://problem/4212626> REGRESSION: LIVECONNECT: JavaScript type for Java Strings is function,
3718         not object
3719
3720         * bindings/runtime.h:
3721         (KJS::Bindings::Instance::implementsCall):
3722         New method.  Returns false by default.  Concrete subclasses can override this return true when
3723         the bound object may be called as a function.
3724         (KJS::Bindings::Instance::invokeDefaultMethod):
3725         Since bound objects are no longer treated as functions by default, we can return jsUndefined()
3726         here instead of in concrete subclasses that decide not to implement the default method
3727         functionality.
3728
3729         * bindings/runtime_object.cpp:
3730         (RuntimeObjectImp::implementsCall):
3731         Don't assume that the bound object is a function; instead, let the object instance decide whether
3732         it is callable.
3733
3734         * bindings/c/c_instance.h:
3735         * bindings/c/c_instance.cpp:
3736         (KJS::Bindings::CInstance::implementsCall):
3737         The object is callable if its class has an invokeDefault function.
3738
3739         * bindings/objc/objc_instance.h:
3740         * bindings/objc/objc_instance.mm:
3741         (ObjcInstance::implementsCall):
3742         The object is callable if the ObjC instance responds to -invokeDefaultMethodWithArguments:.
3743
3744         * bindings/jni/jni_instance.h:
3745         * bindings/jni/jni_instance.cpp:
3746         Moved bogus invokeDefaultMethod() to superclass.
3747
3748 2006-03-29  Geoffrey Garen  <ggaren@apple.com>
3749
3750         Reviewed by Darin.
3751
3752         - JavaScriptCore side of fix for <rdar://problem/4308243> 8F36 
3753         Regression: crash in malloc_consolidate if you use a .PAC file
3754
3755         The crash was a result of threaded deallocation of thread-unsafe
3756         objects. Pure JS objects are thread-safe because all JS execution
3757         is synchronized through JSLock. However, JS objects that wrap WebCore 
3758         objects are thread-unsafe because JS and WebCore execution are not 
3759         synchronized.  That unsafety comes into play when the collector 
3760         deallocates a JS object that wraps a WebCore object, thus causing the 
3761         WebCore object to be deallocated.
3762
3763         The solution here is to have each JSCell know whether it is safe to
3764         collect on a non-main thread, and to avoid collecting unsafe cells
3765         when on a non-main thread.
3766
3767         We don't have a way to test PAC files yet, so there's no test
3768         attached to this patch.
3769
3770         * kjs/collector.cpp:
3771         (KJS::Collector::collect):
3772         (1) Added the test "currentThreadIsMainThread || 
3773         imp->m_destructorIsThreadSafe". 
3774
3775         * kjs/protect.h:
3776         (KJS::gcProtectNullTolerant):
3777         (KJS::gcUnprotectNullTolerant):
3778         * kjs/value.h:
3779         (KJS::JSCell::JSCell): The bools here must be bitfields, otherwise
3780         m_destructorIsThreadSafe becomes another whole word, ruining the
3781         collector optimizations we've made based on the size of a JSObject.
3782         * kxmlcore/FastMalloc.cpp:
3783         (KXMLCore::currentThreadIsMainThread):
3784         (KXMLCore::fastMallocRegisterThread):
3785         * kxmlcore/FastMalloc.h:
3786
3787 2006-03-28  Darin Adler  <darin@apple.com>
3788
3789         Reviewed by Geoff.
3790
3791         - change some code that resulted in init routines on Mac OS X -- if the framework has
3792           init routines it will use memory and slow down applications that link with WebKit
3793           even in cases where those applications don't use WebKit
3794
3795         * kjs/date_object.cpp: Changed constants that were derived by multiplying other constants
3796         to use immediate numbers instead. Apparently, double constant expressions of the type we
3797         had here are evaluated at load time.
3798
3799         * kjs/list.cpp: Can't use OwnArrayPtr in ListImp because of the global instances of
3800         ListImp, so go back to using a plain old pointer.
3801         (KJS::List::List): Set overflow to 0 when initializing ListImp.
3802         (KJS::List::release): Replace a clear call with a delete and explicit set to 0.
3803         (KJS::List::append): Use raw pointers, and do a delete [] instead of finessing it with
3804         a swap of OwnArrayPtr.
3805         (KJS::List::copyFrom): Remove now-unneeded get().
3806         (KJS::List::copyTail): Ditto.
3807
3808         * kjs/ustring.cpp: Changed UString::Rep::empty initializer a bit so that it doesn't get
3809         a static initializer routine. Had to get rid of one level of constant to get the compiler
3810         to understand it could initialize without any code.
3811
3812         - added a build step that checks for init routines
3813
3814         * JavaScriptCore.xcodeproj/project.pbxproj: Deleted now-unused custom build rule that
3815         was replaced by the generate-derived-sources script a while back. Added a custom build
3816         phase that invokes the check-for-global-initializers script.
3817
3818 2006-03-28  Timothy Hatcher  <timothy@apple.com>
3819
3820         Reviewed by Eric.
3821
3822         fixes <rdar://problem/4458539> Unable to include Security(public) and WebKit(private) headers
3823
3824         * bindings/npapi.h: added #defines after the #ifndefs
3825
3826 2006-03-27  Maciej Stachowiak  <mjs@apple.com>
3827
3828         Reviewed by Anders.
3829         
3830         - fixed <rdar://problem/4489745> REGRESSION: Safari crashes at to display http://www.lgphilips-lcd.com/
3831
3832         * kjs/nodes.cpp:
3833         (Node::deref): take into account the case where the extra refcount table was never created
3834
3835 2006-03-23  David Carson <dacarson@gmail.com>
3836
3837         Reviewed by Darin.
3838         
3839         - JSObject in LiveConnect not working.
3840         http://bugzilla.opendarwin.org/show_bug.cgi?id=7917
3841
3842         * bindings/jni_jsobject.cpp:
3843         (JavaJSObject::convertJObjectToValue): Was trying to retrieve the native pointer from the wrong base
3844         class, and the GetFieldID was using the wrong signature.
3845
3846 2006-03-23  Darin Adler  <darin@apple.com>
3847
3848         Reviewed by Maciej.
3849
3850         - fix buildbot
3851
3852         * JavaScriptCore.xcodeproj/project.pbxproj: Change target name to JavaScriptCore (it was "include"!?).
3853         Also add -Y 3 option for linker.
3854
3855 2006-03-23  Darin Adler  <darin@apple.com>
3856
3857         Reviewed by Maciej.
3858
3859         - fix http://bugzilla.opendarwin.org/show_bug.cgi?id=7726
3860           REGRESSION: orbitz calendar fails (JavaScript function serialization/parsing)
3861
3862         * kjs/object.h: Take function name, as well as source URL and line number, when
3863         using the special overloaded construct for making functions.
3864         * kjs/object.cpp: (KJS::JSObject::construct): Ditto.
3865         * kjs/function_object.h: Ditto.
3866         * kjs/function_object.cpp: (FunctionObjectImp::construct): Pass a name when
3867         constructing the function rather than null. Use "anonymous" when making a
3868         function using the default function constructor.
3869
3870         * kjs/nodes2string.cpp: (FuncDeclNode::streamTo): Put a line break just before
3871         a function declaration.
3872
3873         - unrelated fix
3874
3875         * kxmlcore/HashMapPtrSpec.h: Add missing needed friend declaration.
3876
3877 2006-03-23  Darin Adler  <darin@apple.com>
3878
3879         Reviewed by Maciej.
3880
3881         - fix http://bugzilla.opendarwin.org/show_bug.cgi?id=7805
3882           LEAK: method name leaks in KJS::Bindings::CInstance::invokeMethod
3883
3884         * bindings/c/c_utility.h: Remove NPN_UTF16FromString declaration (not implemented).
3885         * bindings/c/c_utility.cpp:
3886         (KJS::Bindings::convertValueToNPVariant): Use DOUBLE_TO_NPVARIANT,
3887         BOOLEAN_TO_NPVARIANT, VOID_TO_NPVARIANT, NULL_TO_NPVARIANT, and
3888         OBJECT_TO_NPVARIANT. In the case of OBJECT, call _NPN_RetainObject in
3889         one case and remove a _NPN_ReleaseObject in another because this
3890         should return a retained value.
3891         (KJS::Bindings::convertNPVariantToValue): Use NPVARIANT_TO_BOOLEAN,
3892         NPVARIANT_TO_INT32, and NPVARIANT_TO_DOUBLE.
3893
3894         * bindings/c/c_runtime.h: Removed implementations of CMethod::name and
3895         CField::name that called _NPN_UTF8FromIdentifier and hence leaked.
3896         * bindings/c/c_runtime.cpp:
3897         (KJS::Bindings::CMethod::name): Added. Returns the string from inside the
3898         method object.
3899         (KJS::Bindings::CField::name): Added. Returns the string from inside the
3900         field object.
3901         (KJS::Bindings::CField::valueFromInstance): Added call to _NPN_ReleaseVariantValue
3902         on the result of getProperty after using it to fix a storage leak.
3903         (KJS::Bindings::CField::setValueToInstance): Added call to _NPN_ReleaseVariantValue
3904         after pasing a value to setProperty now that the conversion function does a retain.
3905
3906         * bindings/c/c_instance.cpp:
3907         (KJS::Bindings::CInstance::invokeMethod): Changed to use Vector for a local
3908         stack buffer. Removed special case for NPVARIANT_IS_VOID because the
3909         convertNPVariantToValue function handles that properly.
3910         (KJS::Bindings::CInstance::invokeDefaultMethod): Ditto.
3911
3912         * bindings/NP_jsobject.h: Formatting changes only.
3913         * bindings/NP_jsobject.cpp:
3914         (jsDeallocate): Changed parameter type so we don't need a function cast.
3915         (_NPN_InvokeDefault): Use VOID_TO_NPVARIANT.
3916         (_NPN_Invoke): Use NULL_TO_NPVARIANT and VOID_TO_NPVARIANT.
3917         (_NPN_Evaluate): Use VOID_TO_NPVARIANT.
3918         (_NPN_GetProperty): Use NULL_TO_NPVARIANT and VOID_TO_NPVARIANT.
3919
3920         * bindings/c/c_class.cpp: Formatting changes only.
3921         * bindings/c/c_class.h: Formatting changes only.
3922
3923         * bindings/npruntime_priv.h: Removed obsolete and now-unused functions:
3924         NPN_VariantIsVoid, NPN_VariantIsNull, NPN_VariantIsUndefined,
3925         NPN_VariantIsBool, NPN_VariantIsInt32, NPN_VariantIsDouble,
3926         NPN_VariantIsString, NPN_VariantIsObject, NPN_VariantToBool,
3927         NPN_VariantToInt32, NPN_VariantToDouble, NPN_VariantToString,
3928         NPN_VariantToStringCopy, NPN_VariantToObject, NPN_InitializeVariantAsVoid,
3929         NPN_InitializeVariantAsNull, NPN_InitializeVariantAsUndefined,
3930         NPN_InitializeVariantWithBool, NPN_InitializeVariantWithInt32,
3931         NPN_InitializeVariantWithDouble, NPN_InitializeVariantWithString,
3932         NPN_InitializeVariantWithObject, and NPN_InitializeVariantWithVariant.
3933         * bindings/npruntime.cpp:
3934         (getIntIdentifierDictionary): Don't bother creating custom callbacks for the
3935         integer dictionary since the default behavior is fine for integers.
3936
3937 2006-03-23  Mark Rowe  <opendarwin.org@bdash.net.nz>
3938
3939         Reviewed and landed by Maciej.
3940
3941         - WebKit no longer builds with bison 2.1
3942         http://bugzilla.opendarwin.org/show_bug.cgi?id=7923
3943
3944         * generate-derived-sources:  Handle generated header named either grammar.cpp.h
3945         or grammar.hpp.
3946
3947 2006-03-22  Maciej Stachowiak  <mjs@apple.com>
3948
3949         - fix the build
3950
3951         * JavaScriptCore.xcodeproj/project.pbxproj:
3952
3953 2006-03-21  Maciej Stachowiak  <mjs@apple.com>
3954
3955         * kjs/generate-derived-sources: Set executable property.
3956
3957 2006-03-21  Maciej Stachowiak  <mjs@apple.com>
3958
3959         Reviewed by Darin.
3960         
3961         Ensure that generated source dependencies are handled properly, as follows:
3962         
3963         - Made an external script that generates the sources into a
3964           DerivedSources dir in the build products directory.
3965         - Added a new build target that builds all the generated sources
3966           if needed. Sadly it has to be a target, not a phase for Xcode to notice changes.
3967         - Added the DerivedSources dir in question to the include path.
3968         - Added the new DerivedSources dir and its contents to the project as build-relative.
3969         
3970         * JavaScriptCore.xcodeproj/project.pbxproj:
3971         * kjs/generate-derived-sources: Added. Based on the windows version - maybe someday they
3972         can share more.
3973
3974 2006-03-11  Maciej Stachowiak  <mjs@apple.com>
3975
3976         Reviewed by Darin.
3977         
3978         - fixed "charAt layout test fails on intel macs; some NaNs are printed as -NaN"
3979         http://bugzilla.opendarwin.org/show_bug.cgi?id=7745
3980
3981         * kjs/ustring.cpp:
3982         (KJS::UString::from): Use "NaN" for all NaN values, regardless of sign.
3983
3984 2006-03-16  Maciej Stachowiak  <mjs@apple.com>
3985
3986         Reviewed by Darin.
3987         
3988         - tweaks to my change to redo KJS::Node refcounting
3989
3990         * kjs/nodes.cpp:
3991         (Node::ref):
3992         (Node::deref):
3993         (Node::refcount):
3994         (Node::clearNewNodes):
3995         * kjs/nodes.h:
3996
3997 2006-03-16  Darin Adler  <darin@apple.com>
3998
3999         Reviewed by Maciej.
4000
4001         - fixed Vector so that you can pass a reference to something in the vector
4002           to the append or insert functions
4003
4004         * kxmlcore/Vector.h:
4005         (KXMLCore::Vector::expandCapacity): Added new overloads that take a pointer to adjust
4006         and return the adjusted value of the pointer.
4007         (KXMLCore::Vector::append): Pass a pointer when expanding the vector, and use it when
4008         adding the new element. Makes the case where the element moves when the vector
4009         is expanded work.
4010         (KXMLCore::Vector::insert): Ditto.
4011
4012 2006-03-15  Eric Seidel  <eseidel@apple.com>
4013
4014         Reviewed by adele.
4015
4016         Build fix.
4017
4018         * kjs/date_object.cpp:
4019         (KJS::DateProtoFunc::callAsFunction): use size() not "len()"
4020
4021 2006-03-15  Eric Seidel  <eseidel@apple.com>
4022
4023         Reviewed by mjs.
4024
4025         Fix CString copy constructor, fixes Date.parse("") on Win32.
4026
4027         * kjs/date_object.cpp:
4028         (KJS::DateProtoFunc::callAsFunction):
4029         * kjs/ustring.cpp:
4030         (KJS::CString::CString):
4031         (KJS::CString::operator=):
4032
4033 2006-03-13  Maciej Stachowiak  <mjs@apple.com>
4034
4035         Reviewed by Anders.
4036         
4037         - KJS::Node and KJS::StatementNode are bigger than they need to be
4038         http://bugzilla.opendarwin.org/show_bug.cgi?id=7775
4039
4040         The memory usage of Node was reduced by 2 machine words per node:
4041
4042         - sourceURL was removed and only kept on FunctionBodyNode. The
4043         source URL can only be distinct per function or top-level program node, 
4044         and you always have one.
4045         
4046         - refcount was removed and kept in a separate hashtable when
4047         greater than 1. newNodes set represents floating nodes with
4048         refcount of 0. This helps because almost all nodes have a refcount of 1
4049         for almost all of their lifetime.
4050         
4051         * bindings/runtime_method.cpp:
4052         (RuntimeMethod::RuntimeMethod): Pass null body, added FIXME.
4053         * kjs/Parser.cpp:
4054         (KJS::clearNewNodes): New nodes are tracked in nodes.cpp now, but still clear
4055         them at the appropriate time.
4056         * kjs/context.h:
4057         (KJS::ContextImp::currentBody): added; used to retrieve source URL and sid
4058         for current code.
4059         (KJS::ContextImp::pushIteration): moved here from LabelStack
4060         (KJS::ContextImp::popIteration): ditto
4061         (KJS::ContextImp::inIteration): ditto
4062         (KJS::ContextImp::pushSwitch): ditto
4063         (KJS::ContextImp::popSwitch): ditto
4064         (KJS::ContextImp::inSwitch): ditto
4065         * kjs/function.cpp:
4066         (KJS::FunctionImp::FunctionImp): Add FunctionBodyNode* parameter.
4067         (KJS::FunctionImp::callAsFunction): Pass body to ContextImp.
4068         (KJS::FunctionImp::argumentsGetter): _context renamed to m_context.
4069         (KJS::DeclaredFunctionImp::DeclaredFunctionImp): Pass body to superclass
4070         constructor.
4071         (KJS::GlobalFuncImp::callAsFunction): Pass progNode as body for ContextImp in
4072         eval.
4073         * kjs/function.h: Move body field from DeclaredFunctionImp to
4074         FunctionImp.
4075         * kjs/grammar.y: Change DBG; statements no longer have a sourceid.
4076         * kjs/internal.cpp:
4077         (KJS::ContextImp::ContextImp): Initialize new m_currentBody, m_iterationDepth
4078         and m_switchDepth data members. New FunctionBodyNode* parameter - the
4079         function body provides source URL and SourceId.
4080         (KJS::InterpreterImp::mark): Use exception() function, not _exception directly.
4081         (KJS::InterpreterImp::evaluate): Pass progNode to ContextImp constructor
4082         to use as the body.
4083         * kjs/internal.h:
4084         (KJS::LabelStack::LabelStack): Remove iteration depth and switch depth;
4085         statement label stacks don't need these and it bloats their size. Put them
4086         in the ContextImp instead.
4087         * kjs/interpreter.cpp:
4088         (KJS::ExecState::lexicalInterpreter): Renamed _context to m_context.
4089         * kjs/interpreter.h:
4090         (KJS::ExecState::dynamicInterpreter): Renamed _context to m_context.
4091         (KJS::ExecState::context): ditto
4092         (KJS::ExecState::setException): Renamed _exception to m_exception
4093         (KJS::ExecState::clearException): ditto
4094         (KJS::ExecState::exception): ditto
4095         (KJS::ExecState::hadException): ditto
4096         (KJS::ExecState::ExecState): ditto both above renames
4097         * kjs/nodes.cpp:
4098         (Node::Node): Removed initialization of line, source URL and refcount. Add to
4099         local newNodes set instead of involving parser.
4100         (Node::ref): Instead of managing refcount directly, story refcount over 1 in a
4101         HashCountedSet, and keep a separate HashSet of "floating" nodes with refcount
4102         0.
4103         (Node::deref): ditto
4104         (Node::refcount): ditto
4105         (Node::clearNewNodes): Destroy anything left in the new nodes set.
4106         (currentSourceId): Inline helper to get sourceId from function body via context.
4107         (currentSourceURL): ditto for sourceURL.
4108         (Node::createErrorCompletion): use new helper
4109         (Node::throwError): ditto
4110         (Node::setExceptionDetailsIfNeeded): ditto
4111         (StatementNode::StatementNode): remove initialization of l0 and sid, rename
4112         l1 to m_lastLine.
4113         (StatementNode::setLoc): Set own m_lastLine and Node's m_line.
4114         (StatementNode::hitStatement): Get sid, first line, last line in the proper new ways.
4115         (StatListNode::StatListNode): updated for setLoc changes
4116         (BlockNode::BlockNode): ditto
4117         (DoWhileNode::execute): excpect iteraton counts on ContextImp, not LabelStack
4118         (WhileNode::execute): ditto
4119         (ForNode::execute): ditto
4120         (ForInNode::execute): ditto
4121         (ContinueNode::execute): excpect inIteration on ContextImp, not LabelStack
4122         (BreakNode::execute): excpect inIteration and inSwitch on ContextImp, not LabelStack
4123         (SwitchNode::execute): expect switch counts on ContextImp, not LabelStack
4124         (FunctionBodyNode::FunctionBodyNode): update for new setLoc
4125         (FunctionBodyNode::processFuncDecl): reindent
4126         (SourceElementsNode::SourceElementsNode): update for new setLoc
4127         * kjs/nodes.h:
4128         (KJS::Node::lineNo): Renamed _line to m_line
4129         (KJS::StatementNode::firstLine): Use lineNo()