JavaScriptCore:
Reviewed by Darin.
- switch property lists to be vector+set of Identifiers instead of list of References
This has the following benefits:
- no duplicates in property lists
- simplifies API calls
- probably more efficient, since linked list is gone
- entirely removed Reference, ReferenceList and ProtectedReference types from the API
* kjs/PropertyNameArray.cpp: Added.
(KJS::PropertyNameArray::add): Check set, if not already there, add to
vector.
* kjs/PropertyNameArray.h: Added.
(KJS::PropertyNameArray::PropertyNameArray): Newly added type, combines
a set and a vector to make a unique but ordered list of identifiers.
(KJS::PropertyNameArray::begin): ditto
(KJS::PropertyNameArray::end): ditto
(KJS::PropertyNameArray::size): ditto
(KJS::PropertyNameArray::operator[]): ditto
* kjs/array_instance.h:
* kjs/array_object.cpp:
(ArrayInstance::getPropertyNames): renamed from getPropertyList, updated
for PropertyNameArray
(ArrayInstance::setLength): updated for PropertyNameArray
(ArrayInstance::pushUndefinedObjectsToEnd): ditto
* kjs/nodes.cpp:
(ForInNode::execute): updated for PropertyNameArray
* kjs/nodes.h:
* kjs/object.cpp:
(KJS::JSObject::getPropertyNames): renamed from getPropertyList, updated
for PropertyNameArray
* kjs/object.h:
* kjs/property_map.cpp:
(KJS::PropertyMap::getEnumerablePropertyNames): updated for PropertyNameArray
(KJS::PropertyMap::getSparseArrayPropertyNames): ditto
* kjs/property_map.h:
* kjs/protected_reference.h: Removed.
* kjs/reference.cpp: Removed.
* kjs/reference.h: Removed.
* kjs/reference_list.cpp: Removed.
* kjs/reference_list.h: Removed.
* kjs/scope_chain.cpp:
(KJS::ScopeChain::print): Use PropertyNamesArray instead of ReferenceList.
* kjs/string_object.cpp:
(StringInstance::getPropertyNames): Updated for new approach.
* kjs/string_object.h:
* kjs/ustring.h:
* API/APICast.h:
(toJS): Added overload for PropertyNameAccumulatorRef / PropertyNameArray*
(toRef): ditto
* API/JSBase.h:
* API/JSCallbackObject.cpp:
(KJS::JSCallbackObject::getPropertyNames): Fixed for new API.
* API/JSCallbackObject.h:
* API/JSObjectRef.cpp:
(__JSPropertyNameArray::__JSPropertyNameArray): Type used for a publicly vended
JSPropertyNameArrayRef.
(JSObjectCopyPropertyNames): New API call - renamed / refactored from
JSObjectCreatePropertyList
(JSPropertyNameArrayRetain): new retain call for JSPropertyNameArray.
(JSPropertyNameArrayRelease): new release call for - " -.
(JSPropertyNameArrayGetCount): Instead of having to use a stateful enumerator you
can now get the count and items in any order.
(JSPropertyNameArrayGetNameAtIndex): See above.
(JSPropertyNameAccumulatorAddName): What you add properties to is now an opaque
accumulator object.
* API/JSObjectRef.h: Prototyped new functions, removed old ones
* JavaScriptCore.exp: Updated exported symbols.
* JavaScriptCore.xcodeproj/project.pbxproj: Added new files, removed old.
* API/testapi.c:
(MyObject_getPropertyNames): Renamed / fixed callback to fit new paradigm.
(main): Updated for new API.
JavaScriptGlue:
Reviewed by Darin.
- switch property lists to be vector+set of Identifiers instead of list of References
* JSUtils.cpp:
(KJSValueToCFTypeInternal): updated for JSC SPI changes
* JSValueWrapper.cpp:
(JSValueWrapper::JSObjectCopyPropertyNames): ditto
* UserObjectImp.cpp:
(UserObjectImp::getPropertyNames): ditto
* UserObjectImp.h:
LayoutTests:
Reviewed by Darin.
- new test case and updated results for property list changes
* fast/js/for-in-avoid-duplicates-expected.txt: Added.
* fast/js/for-in-avoid-duplicates.html: Added.
* fast/js/kde/Array-expected.txt:
* fast/js/resources/for-in-avoid-duplicates.js: Added.
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@15468 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/JavaScriptCore/API/JSBase.h b/JavaScriptCore/API/JSBase.h
index b9fc487..d40323f 100644
--- a/JavaScriptCore/API/JSBase.h
+++ b/JavaScriptCore/API/JSBase.h
@@ -43,11 +43,11 @@
/*! @typedef JSClassRef A JavaScript class. Used with JSObjectMake to construct objects with custom behavior. */
typedef struct __JSClass* JSClassRef;
-/*! @typedef JSPropertyListRef A JavaScript property list. Used for listing the properties in an object so they can be enumerated. */
-typedef struct __JSPropertyList* JSPropertyListRef;
+/*! @typedef JSPropertyNameArrayRef An array of JavaScript property names. */
+typedef struct __JSPropertyNameArray* JSPropertyNameArrayRef;
-/*! @typedef JSPropertyEnumeratorRef A JavaScript property enumerator. Used for enumerating the properties in an object. */
-typedef struct __JSPropertyEnumerator* JSPropertyEnumeratorRef;
+/*! @typedef JSPropertyNameAccumulatorRef A data type used to collect a JavaScript object's property names. */
+typedef struct __JSPropertyNameAccumulator* JSPropertyNameAccumulatorRef;
/* JavaScript data types */