Show
Ignore:
Timestamp:
07/16/06 14:06:28 (2 years ago)
Author:
mjs
Message:

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.
Files:
1 modified

Legend:

Unmodified
Added
Removed
  • trunk/JavaScriptCore/ChangeLog

    r15465 r15468  
     12006-07-15  Maciej Stachowiak  <mjs@apple.com> 
     2 
     3        Reviewed by Darin. 
     4         
     5        - switch property lists to be vector+set of Identifiers instead of list of References 
     6         
     7        This has the following benefits: 
     8         
     9        - no duplicates in property lists 
     10        - simplifies API calls 
     11        - probably more efficient, since linked list is gone 
     12        - entirely removed Reference, ReferenceList and ProtectedReference types from the API 
     13 
     14        * kjs/PropertyNameArray.cpp: Added. 
     15        (KJS::PropertyNameArray::add): Check set, if not already there, add to 
     16        vector. 
     17        * kjs/PropertyNameArray.h: Added. 
     18        (KJS::PropertyNameArray::PropertyNameArray): Newly added type, combines 
     19        a set and a vector to make a unique but ordered list of identifiers. 
     20        (KJS::PropertyNameArray::begin): ditto 
     21        (KJS::PropertyNameArray::end): ditto 
     22        (KJS::PropertyNameArray::size): ditto 
     23        (KJS::PropertyNameArray::operator[]): ditto 
     24        * kjs/array_instance.h: 
     25        * kjs/array_object.cpp: 
     26        (ArrayInstance::getPropertyNames): renamed from getPropertyList, updated 
     27        for PropertyNameArray 
     28        (ArrayInstance::setLength): updated for PropertyNameArray 
     29        (ArrayInstance::pushUndefinedObjectsToEnd): ditto 
     30        * kjs/nodes.cpp: 
     31        (ForInNode::execute): updated for PropertyNameArray 
     32        * kjs/nodes.h: 
     33        * kjs/object.cpp: 
     34        (KJS::JSObject::getPropertyNames): renamed from getPropertyList, updated 
     35        for PropertyNameArray 
     36        * kjs/object.h: 
     37        * kjs/property_map.cpp: 
     38        (KJS::PropertyMap::getEnumerablePropertyNames): updated for PropertyNameArray 
     39        (KJS::PropertyMap::getSparseArrayPropertyNames): ditto 
     40        * kjs/property_map.h: 
     41        * kjs/protected_reference.h: Removed. 
     42        * kjs/reference.cpp: Removed. 
     43        * kjs/reference.h: Removed. 
     44        * kjs/reference_list.cpp: Removed. 
     45        * kjs/reference_list.h: Removed. 
     46        * kjs/scope_chain.cpp: 
     47        (KJS::ScopeChain::print): Use PropertyNamesArray instead of ReferenceList. 
     48        * kjs/string_object.cpp: 
     49        (StringInstance::getPropertyNames): Updated for new approach. 
     50        * kjs/string_object.h: 
     51        * kjs/ustring.h: 
     52        * API/APICast.h: 
     53        (toJS): Added overload for PropertyNameAccumulatorRef / PropertyNameArray* 
     54        (toRef): ditto 
     55        * API/JSBase.h: 
     56        * API/JSCallbackObject.cpp: 
     57        (KJS::JSCallbackObject::getPropertyNames): Fixed for new API. 
     58        * API/JSCallbackObject.h: 
     59        * API/JSObjectRef.cpp: 
     60        (__JSPropertyNameArray::__JSPropertyNameArray): Type used for a publicly vended 
     61        JSPropertyNameArrayRef. 
     62        (JSObjectCopyPropertyNames): New API call - renamed / refactored from  
     63        JSObjectCreatePropertyList 
     64        (JSPropertyNameArrayRetain): new retain call for JSPropertyNameArray. 
     65        (JSPropertyNameArrayRelease): new release call for - " -. 
     66        (JSPropertyNameArrayGetCount): Instead of having to use a stateful enumerator you 
     67        can now get the count and items in any order. 
     68        (JSPropertyNameArrayGetNameAtIndex): See above. 
     69        (JSPropertyNameAccumulatorAddName): What you add properties to is now an opaque  
     70        accumulator object. 
     71        * API/JSObjectRef.h: Prototyped new functions, removed old ones 
     72        * JavaScriptCore.exp: Updated exported symbols. 
     73        * JavaScriptCore.xcodeproj/project.pbxproj: Added new files, removed old. 
     74        * API/testapi.c: 
     75        (MyObject_getPropertyNames): Renamed / fixed callback to fit new paradigm. 
     76        (main): Updated for new API. 
     77 
    1782006-07-15  Darin Adler  <darin@apple.com> 
    279