-
mjs authored
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
b3598b86