Changeset 10744 in webkit for trunk/JavaScriptCore


Ignore:
Timestamp:
Oct 5, 2005, 1:05:44 AM (20 years ago)
Author:
mjs
Message:

JavaScriptCore:

Reviewed by Eric.

  • fixed <rdar://problem/4260481> Remove Reference type from JavaScriptCore

Also fixed some bugs with for..in enumeration while I was at it. object
properties now come before prototype properties and duplicates
between object and prototype are listed only once.

  • JavaScriptCore.xcodeproj/project.pbxproj:
  • kjs/IdentifierSequencedSet.cpp: Added. (KJS::IdentifierSequencedSet::IdentifierSequencedSet): (KJS::IdentifierSequencedSet::deallocateVector): (KJS::IdentifierSequencedSet::~IdentifierSequencedSet): (KJS::IdentifierSequencedSet::insert):
  • kjs/IdentifierSequencedSet.h: Added. (KJS::IdentifierSequencedSetIterator::IdentifierSequencedSetIterator): (KJS::IdentifierSequencedSetIterator::operator*): (KJS::IdentifierSequencedSetIterator::operator->): (KJS::IdentifierSequencedSetIterator::operator++): (KJS::IdentifierSequencedSetIterator::operator==): (KJS::IdentifierSequencedSetIterator::operator!=): (KJS::IdentifierSequencedSet::begin): (KJS::IdentifierSequencedSet::end): (KJS::IdentifierSequencedSet::size):
  • kjs/array_instance.h:
  • kjs/array_object.cpp: (ArrayInstanceImp::getPropertyNames): (ArrayInstanceImp::setLength): (ArrayInstanceImp::pushUndefinedObjectsToEnd):
  • kjs/nodes.cpp: (ForInNode::execute):
  • kjs/nodes.h:
  • kjs/object.cpp: (KJS::ObjectImp::getPropertyNames):
  • kjs/object.h:
  • kjs/property_map.cpp: (KJS::PropertyMap::getEnumerablePropertyNames): (KJS::PropertyMap::getSparseArrayPropertyNames):
  • kjs/property_map.h:
  • kjs/protect.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/ustring.h: (KJS::UString::impl):
  • kxmlcore/HashSet.h:

LayoutTests:

Reviewed by Eric.

  • test case for some fixes I made to for..in enumeration. object properties now come before prototype properties and duplicates between object and prototype are listed only once.
  • fast/js/for-in-expected.txt: Added.
  • fast/js/for-in.html: Added.
Location:
trunk/JavaScriptCore
Files:
2 added
5 deleted
13 edited

Legend:

Unmodified
Added
Removed
  • trunk/JavaScriptCore/ChangeLog

    r10728 r10744  
     12005-10-05  Maciej Stachowiak  <[email protected]>
     2
     3        Reviewed by Eric.
     4
     5        - fixed <rdar://problem/4260481> Remove Reference type from JavaScriptCore
     6
     7        Also fixed some bugs with for..in enumeration while I was at it. object
     8        properties now come before prototype properties and duplicates
     9        between object and prototype are listed only once.
     10
     11        * JavaScriptCore.xcodeproj/project.pbxproj:
     12        * kjs/IdentifierSequencedSet.cpp: Added.
     13        (KJS::IdentifierSequencedSet::IdentifierSequencedSet):
     14        (KJS::IdentifierSequencedSet::deallocateVector):
     15        (KJS::IdentifierSequencedSet::~IdentifierSequencedSet):
     16        (KJS::IdentifierSequencedSet::insert):
     17        * kjs/IdentifierSequencedSet.h: Added.
     18        (KJS::IdentifierSequencedSetIterator::IdentifierSequencedSetIterator):
     19        (KJS::IdentifierSequencedSetIterator::operator*):
     20        (KJS::IdentifierSequencedSetIterator::operator->):
     21        (KJS::IdentifierSequencedSetIterator::operator++):
     22        (KJS::IdentifierSequencedSetIterator::operator==):
     23        (KJS::IdentifierSequencedSetIterator::operator!=):
     24        (KJS::IdentifierSequencedSet::begin):
     25        (KJS::IdentifierSequencedSet::end):
     26        (KJS::IdentifierSequencedSet::size):
     27        * kjs/array_instance.h:
     28        * kjs/array_object.cpp:
     29        (ArrayInstanceImp::getPropertyNames):
     30        (ArrayInstanceImp::setLength):
     31        (ArrayInstanceImp::pushUndefinedObjectsToEnd):
     32        * kjs/nodes.cpp:
     33        (ForInNode::execute):
     34        * kjs/nodes.h:
     35        * kjs/object.cpp:
     36        (KJS::ObjectImp::getPropertyNames):
     37        * kjs/object.h:
     38        * kjs/property_map.cpp:
     39        (KJS::PropertyMap::getEnumerablePropertyNames):
     40        (KJS::PropertyMap::getSparseArrayPropertyNames):
     41        * kjs/property_map.h:
     42        * kjs/protect.h:
     43        * kjs/protected_reference.h: Removed.
     44        * kjs/reference.cpp: Removed.
     45        * kjs/reference.h: Removed.
     46        * kjs/reference_list.cpp: Removed.
     47        * kjs/reference_list.h: Removed.
     48        * kjs/ustring.h:
     49        (KJS::UString::impl):
     50        * kxmlcore/HashSet.h:
     51
    1522005-10-04  Eric Seidel  <[email protected]>
    253
  • trunk/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj

    r10701 r10744  
    3333                37B800F008EBB65B0035B474 /* HashTable.h in Headers */ = {isa = PBXBuildFile; fileRef = 65DFC92E08EA173A00F7300B /* HashTable.h */; settings = {ATTRIBUTES = (Private, ); }; };
    3434                37B800F108EBB65C0035B474 /* HashTraits.h in Headers */ = {isa = PBXBuildFile; fileRef = 65DFC92F08EA173A00F7300B /* HashTraits.h */; settings = {ATTRIBUTES = (Private, ); }; };
     35                6512E62B08F3BA8B004A15B6 /* IdentifierSequencedSet.h in Headers */ = {isa = PBXBuildFile; fileRef = 65D6D61C08F2676800958B28 /* IdentifierSequencedSet.h */; settings = {ATTRIBUTES = (Private, ); }; };
     36                6512E63608F3BADE004A15B6 /* IdentifierSequencedSet.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 65D6D61B08F2676800958B28 /* IdentifierSequencedSet.cpp */; };
    3537                65162EEB08E6A1FE007556CD /* SharedPtr.h in Headers */ = {isa = PBXBuildFile; fileRef = 65162EEA08E6A1FE007556CD /* SharedPtr.h */; settings = {ATTRIBUTES = (Private, ); }; };
    3638                65162F0208E6A2D0007556CD /* SharedPtr.h in Headers */ = {isa = PBXBuildFile; fileRef = 65162EEA08E6A1FE007556CD /* SharedPtr.h */; settings = {ATTRIBUTES = (Private, ); }; };
    37                 652C107F08DA7B1E0020887D /* protected_reference.h in Headers */ = {isa = PBXBuildFile; fileRef = 652C107E08DA7B1E0020887D /* protected_reference.h */; };
    3839                6541BD7208E80A17002CBEE7 /* TCPageMap.h in Headers */ = {isa = PBXBuildFile; fileRef = 6541BD6E08E80A17002CBEE7 /* TCPageMap.h */; };
    3940                6541BD7308E80A17002CBEE7 /* TCSpinLock.h in Headers */ = {isa = PBXBuildFile; fileRef = 6541BD6F08E80A17002CBEE7 /* TCSpinLock.h */; };
     
    4546                65621E6F089E85D300760F35 /* property_slot.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 65621E6B089E859700760F35 /* property_slot.cpp */; };
    4647                65621E70089E85D300760F35 /* property_slot.h in Headers */ = {isa = PBXBuildFile; fileRef = 65621E6C089E859700760F35 /* property_slot.h */; settings = {ATTRIBUTES = (Private, ); }; };
     48                65D6D61D08F2676800958B28 /* IdentifierSequencedSet.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 65D6D61B08F2676800958B28 /* IdentifierSequencedSet.cpp */; };
     49                65D6D61E08F2676800958B28 /* IdentifierSequencedSet.h in Headers */ = {isa = PBXBuildFile; fileRef = 65D6D61C08F2676800958B28 /* IdentifierSequencedSet.h */; settings = {ATTRIBUTES = (Private, ); }; };
    4750                65D7D19C08F10B5B0015ABD8 /* FastMallocInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 65D7D19B08F10B5B0015ABD8 /* FastMallocInternal.h */; };
    4851                65DFC93008EA173A00F7300B /* HashFunctions.h in Headers */ = {isa = PBXBuildFile; fileRef = 65DFC92A08EA173A00F7300B /* HashFunctions.h */; settings = {ATTRIBUTES = (Private, ); }; };
     
    9396                932F5B610822A1C700736975 /* JavaScriptCorePrefix.h in Headers */ = {isa = PBXBuildFile; fileRef = F5C290E60284F98E018635CA /* JavaScriptCorePrefix.h */; };
    9497                932F5B620822A1C700736975 /* simple_number.h in Headers */ = {isa = PBXBuildFile; fileRef = F50888B6030BB74C012A967E /* simple_number.h */; settings = {ATTRIBUTES = (Private, ); }; };
    95                 932F5B630822A1C700736975 /* reference_list.h in Headers */ = {isa = PBXBuildFile; fileRef = F54F0800030CD22001B5C2EB /* reference_list.h */; settings = {ATTRIBUTES = (Private, ); }; };
    96                 932F5B640822A1C700736975 /* reference.h in Headers */ = {isa = PBXBuildFile; fileRef = F5341391030CEEB1018BE7F3 /* reference.h */; settings = {ATTRIBUTES = (Private, ); }; };
    9798                932F5B650822A1C700736975 /* completion.h in Headers */ = {isa = PBXBuildFile; fileRef = F5BB2BC5030F772101FCFE1D /* completion.h */; settings = {ATTRIBUTES = (Private, ); }; };
    9899                932F5B660822A1C700736975 /* identifier.h in Headers */ = {isa = PBXBuildFile; fileRef = 933A349A038AE7C6008635CE /* identifier.h */; settings = {ATTRIBUTES = (Private, ); }; };
     
    159160                932F5BA90822A1C700736975 /* value.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F692A8870255597D01FF60F7 /* value.cpp */; };
    160161                932F5BAB0822A1C700736975 /* nodes2string.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F5FFE656026B47A6018635CA /* nodes2string.cpp */; };
    161                 932F5BAC0822A1C700736975 /* reference.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F5341390030CEEB1018BE7F3 /* reference.cpp */; settings = {ATTRIBUTES = (Private, ); }; };
    162                 932F5BAD0822A1C700736975 /* reference_list.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F5341394030CF5F8018BE7F3 /* reference_list.cpp */; settings = {ATTRIBUTES = (Private, ); }; };
    163162                932F5BAE0822A1C700736975 /* identifier.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 933A349D038AE80F008635CE /* identifier.cpp */; };
    164163                932F5BAF0822A1C700736975 /* scope_chain.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9374D3A8038D9D74008635CE /* scope_chain.cpp */; };
     
    249248                A85D8211087B2822006A9172 /* JavaScriptCorePrefix.h in Headers */ = {isa = PBXBuildFile; fileRef = F5C290E60284F98E018635CA /* JavaScriptCorePrefix.h */; };
    250249                A85D8212087B2822006A9172 /* simple_number.h in Headers */ = {isa = PBXBuildFile; fileRef = F50888B6030BB74C012A967E /* simple_number.h */; settings = {ATTRIBUTES = (Private, ); }; };
    251                 A85D8213087B2822006A9172 /* reference_list.h in Headers */ = {isa = PBXBuildFile; fileRef = F54F0800030CD22001B5C2EB /* reference_list.h */; settings = {ATTRIBUTES = (Private, ); }; };
    252                 A85D8214087B2822006A9172 /* reference.h in Headers */ = {isa = PBXBuildFile; fileRef = F5341391030CEEB1018BE7F3 /* reference.h */; settings = {ATTRIBUTES = (Private, ); }; };
    253250                A85D8215087B2822006A9172 /* completion.h in Headers */ = {isa = PBXBuildFile; fileRef = F5BB2BC5030F772101FCFE1D /* completion.h */; settings = {ATTRIBUTES = (Private, ); }; };
    254251                A85D8216087B2822006A9172 /* identifier.h in Headers */ = {isa = PBXBuildFile; fileRef = 933A349A038AE7C6008635CE /* identifier.h */; settings = {ATTRIBUTES = (Private, ); }; };
     
    317314                A85D8259087B2822006A9172 /* value.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F692A8870255597D01FF60F7 /* value.cpp */; };
    318315                A85D825A087B2822006A9172 /* nodes2string.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F5FFE656026B47A6018635CA /* nodes2string.cpp */; };
    319                 A85D825B087B2822006A9172 /* reference.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F5341390030CEEB1018BE7F3 /* reference.cpp */; settings = {ATTRIBUTES = (Private, ); }; };
    320                 A85D825C087B2822006A9172 /* reference_list.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F5341394030CF5F8018BE7F3 /* reference_list.cpp */; settings = {ATTRIBUTES = (Private, ); }; };
    321316                A85D825D087B2822006A9172 /* identifier.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 933A349D038AE80F008635CE /* identifier.cpp */; };
    322317                A85D825E087B2822006A9172 /* scope_chain.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9374D3A8038D9D74008635CE /* scope_chain.cpp */; };
     
    363358                A883C7F508EA12860051473E /* TCSystemAlloc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6541BD7008E80A17002CBEE7 /* TCSystemAlloc.cpp */; };
    364359                A883C7F608EA12860051473E /* TCSystemAlloc.h in Headers */ = {isa = PBXBuildFile; fileRef = 6541BD7108E80A17002CBEE7 /* TCSystemAlloc.h */; };
    365                 A883C7F708EA12A20051473E /* protected_reference.h in Headers */ = {isa = PBXBuildFile; fileRef = 652C107E08DA7B1E0020887D /* protected_reference.h */; };
    366360                A8BC0DFC08D43D6D00379918 /* ucptable.c in Headers */ = {isa = PBXBuildFile; fileRef = 93E26C0D08B1520900F85226 /* ucptable.c */; };
    367361/* End PBXBuildFile section */
     
    503497                651F6412039D5B5F0078395C /* dtoa.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = dtoa.cpp; sourceTree = "<group>"; };
    504498                651F6413039D5B5F0078395C /* dtoa.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = dtoa.h; sourceTree = "<group>"; };
    505                 652C107E08DA7B1E0020887D /* protected_reference.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = protected_reference.h; sourceTree = "<group>"; };
    506499                6541720E039E08B90058BFEB /* dftables.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = dftables.c; path = pcre/dftables.c; sourceTree = "<group>"; };
    507500                6541720F039E08B90058BFEB /* pcre.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = pcre.h; path = pcre/pcre.h; sourceTree = "<group>"; };
     
    517510                65621E6C089E859700760F35 /* property_slot.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = property_slot.h; sourceTree = "<group>"; };
    518511                65C02FBB0637462A003E7EE6 /* protect.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = protect.h; sourceTree = "<group>"; };
     512                65D6D61B08F2676800958B28 /* IdentifierSequencedSet.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = IdentifierSequencedSet.cpp; sourceTree = "<group>"; };
     513                65D6D61C08F2676800958B28 /* IdentifierSequencedSet.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = IdentifierSequencedSet.h; sourceTree = "<group>"; };
    519514                65D7D19B08F10B5B0015ABD8 /* FastMallocInternal.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = FastMallocInternal.h; sourceTree = "<group>"; };
    520515                65DFC92A08EA173A00F7300B /* HashFunctions.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = HashFunctions.h; sourceTree = "<group>"; };
     
    573568                A85D8288087B2822006A9172 /* JavaScriptCore.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = JavaScriptCore.framework; sourceTree = BUILT_PRODUCTS_DIR; };
    574569                F50888B6030BB74C012A967E /* simple_number.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = simple_number.h; sourceTree = "<group>"; };
    575                 F5341390030CEEB1018BE7F3 /* reference.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = reference.cpp; sourceTree = "<group>"; };
    576                 F5341391030CEEB1018BE7F3 /* reference.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = reference.h; sourceTree = "<group>"; };
    577                 F5341394030CF5F8018BE7F3 /* reference_list.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = reference_list.cpp; sourceTree = "<group>"; };
    578                 F54F0800030CD22001B5C2EB /* reference_list.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = reference_list.h; sourceTree = "<group>"; };
    579570                F5BB2BC5030F772101FCFE1D /* completion.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = completion.h; sourceTree = "<group>"; };
    580571                F5C290E60284F98E018635CA /* JavaScriptCorePrefix.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = JavaScriptCorePrefix.h; path = ../JavaScriptCorePrefix.h; sourceTree = "<group>"; };
     
    715706                        isa = PBXGroup;
    716707                        children = (
     708                                65D6D61B08F2676800958B28 /* IdentifierSequencedSet.cpp */,
     709                                65D6D61C08F2676800958B28 /* IdentifierSequencedSet.h */,
    717710                                65621E6B089E859700760F35 /* property_slot.cpp */,
    718711                                65621E6C089E859700760F35 /* property_slot.h */,
    719712                                938772E5038BFE19008635CE /* array_instance.h */,
    720713                                650B68D80639033F009D42DE /* protected_values.cpp */,
    721                                 652C107E08DA7B1E0020887D /* protected_reference.h */,
    722714                                650B68D90639033F009D42DE /* protected_values.h */,
    723715                                F692A84E0255597D01FF60F7 /* array_object.h */,
     
    766758                                F692A8790255597D01FF60F7 /* property_map.cpp */,
    767759                                65C02FBB0637462A003E7EE6 /* protect.h */,
    768                                 F5341390030CEEB1018BE7F3 /* reference.cpp */,
    769                                 F5341391030CEEB1018BE7F3 /* reference.h */,
    770                                 F54F0800030CD22001B5C2EB /* reference_list.h */,
    771                                 F5341394030CF5F8018BE7F3 /* reference_list.cpp */,
    772760                                F692A87B0255597D01FF60F7 /* regexp_object.cpp */,
    773761                                F692A87C0255597D01FF60F7 /* regexp_object.h */,
     
    972960                                932F5B610822A1C700736975 /* JavaScriptCorePrefix.h in Headers */,
    973961                                932F5B620822A1C700736975 /* simple_number.h in Headers */,
    974                                 932F5B630822A1C700736975 /* reference_list.h in Headers */,
    975                                 932F5B640822A1C700736975 /* reference.h in Headers */,
    976962                                932F5B650822A1C700736975 /* completion.h in Headers */,
    977963                                932F5B660822A1C700736975 /* identifier.h in Headers */,
     
    10201006                                93E26C1308B1523D00F85226 /* ucptable.c in Headers */,
    10211007                                93E26CCF08B2921900F85226 /* softlinking.h in Headers */,
    1022                                 652C107F08DA7B1E0020887D /* protected_reference.h in Headers */,
    10231008                                65162EEB08E6A1FE007556CD /* SharedPtr.h in Headers */,
    10241009                                65E217BD08E7EECC0023E5F6 /* Assertions.h in Headers */,
     
    10341019                                6557E8F808EA5D4D0049CDFC /* HashMapPtrSpec.h in Headers */,
    10351020                                65D7D19C08F10B5B0015ABD8 /* FastMallocInternal.h in Headers */,
     1021                                65D6D61E08F2676800958B28 /* IdentifierSequencedSet.h in Headers */,
    10361022                        );
    10371023                        runOnlyForDeploymentPostprocessing = 0;
     
    10691055                                A85D8211087B2822006A9172 /* JavaScriptCorePrefix.h in Headers */,
    10701056                                A85D8212087B2822006A9172 /* simple_number.h in Headers */,
    1071                                 A85D8213087B2822006A9172 /* reference_list.h in Headers */,
    1072                                 A85D8214087B2822006A9172 /* reference.h in Headers */,
    10731057                                A85D8215087B2822006A9172 /* completion.h in Headers */,
    10741058                                A85D8216087B2822006A9172 /* identifier.h in Headers */,
     
    11231107                                A883C7F408EA12860051473E /* TCSpinLock.h in Headers */,
    11241108                                A883C7F608EA12860051473E /* TCSystemAlloc.h in Headers */,
    1125                                 A883C7F708EA12A20051473E /* protected_reference.h in Headers */,
    11261109                                37B800EB08EBB6520035B474 /* HashFunctions.h in Headers */,
    11271110                                37B800EC08EBB6540035B474 /* HashMap.h in Headers */,
     
    11301113                                37B800F008EBB65B0035B474 /* HashTable.h in Headers */,
    11311114                                37B800F108EBB65C0035B474 /* HashTraits.h in Headers */,
     1115                                6512E62B08F3BA8B004A15B6 /* IdentifierSequencedSet.h in Headers */,
    11321116                        );
    11331117                        runOnlyForDeploymentPostprocessing = 0;
     
    16421626                                932F5BA90822A1C700736975 /* value.cpp in Sources */,
    16431627                                932F5BAB0822A1C700736975 /* nodes2string.cpp in Sources */,
    1644                                 932F5BAC0822A1C700736975 /* reference.cpp in Sources */,
    1645                                 932F5BAD0822A1C700736975 /* reference_list.cpp in Sources */,
    16461628                                932F5BAE0822A1C700736975 /* identifier.cpp in Sources */,
    16471629                                932F5BAF0822A1C700736975 /* scope_chain.cpp in Sources */,
     
    16901672                                6541BD7408E80A17002CBEE7 /* TCSystemAlloc.cpp in Sources */,
    16911673                                65DFC93308EA173A00F7300B /* HashTable.cpp in Sources */,
     1674                                65D6D61D08F2676800958B28 /* IdentifierSequencedSet.cpp in Sources */,
    16921675                        );
    16931676                        runOnlyForDeploymentPostprocessing = 0;
     
    17391722                                A85D8259087B2822006A9172 /* value.cpp in Sources */,
    17401723                                A85D825A087B2822006A9172 /* nodes2string.cpp in Sources */,
    1741                                 A85D825B087B2822006A9172 /* reference.cpp in Sources */,
    1742                                 A85D825C087B2822006A9172 /* reference_list.cpp in Sources */,
    17431724                                A85D825D087B2822006A9172 /* identifier.cpp in Sources */,
    17441725                                A85D825E087B2822006A9172 /* scope_chain.cpp in Sources */,
     
    17871768                                A883C7F508EA12860051473E /* TCSystemAlloc.cpp in Sources */,
    17881769                                37B800EF08EBB65B0035B474 /* HashTable.cpp in Sources */,
     1770                                6512E63608F3BADE004A15B6 /* IdentifierSequencedSet.cpp in Sources */,
    17891771                        );
    17901772                        runOnlyForDeploymentPostprocessing = 0;
  • trunk/JavaScriptCore/kjs/array_instance.h

    r10084 r10744  
    4040    virtual bool deleteProperty(ExecState *exec, const Identifier &propertyName);
    4141    virtual bool deleteProperty(ExecState *exec, unsigned propertyName);
    42     virtual ReferenceList propList(ExecState *exec, bool recursive);
     42    virtual void getPropertyNames(ExecState *exec, IdentifierSequencedSet& propertyNames);
    4343
    4444    virtual void mark();
  • trunk/JavaScriptCore/kjs/array_object.cpp

    r10701 r10744  
    2929#include "object.h"
    3030#include "operations.h"
    31 #include "reference_list.h"
    3231#include "types.h"
    3332#include "value.h"
     33#include "IdentifierSequencedSet.h"
    3434
    3535#include "array_object.lut.h"
     
    186186}
    187187
    188 ReferenceList ArrayInstanceImp::propList(ExecState *exec, bool recursive)
    189 {
    190   ReferenceList properties = ObjectImp::propList(exec,recursive);
    191 
     188void ArrayInstanceImp::getPropertyNames(ExecState *exec, IdentifierSequencedSet& propertyNames)
     189{
    192190  // avoid fetching this every time through the loop
    193191  ValueImp *undefined = jsUndefined();
     
    195193  for (unsigned i = 0; i < storageLength; ++i) {
    196194    ValueImp *imp = storage[i];
    197     if (imp && imp != undefined) {
    198       properties.append(Reference(this, i));
    199     }
    200   }
    201   return properties;
     195    if (imp && imp != undefined)
     196      propertyNames.insert(Identifier::from(i));
     197  }
     198
     199  ObjectImp::getPropertyNames(exec, propertyNames);
    202200}
    203201
     
    231229
    232230  if (newLength < length) {
    233     ReferenceList sparseProperties;
    234    
    235     _prop.addSparseArrayPropertiesToReferenceList(sparseProperties, this);
    236    
    237     ReferenceListIterator it = sparseProperties.begin();
    238     while (it != sparseProperties.end()) {
    239       Reference ref = it++;
     231    IdentifierSequencedSet sparseProperties;
     232   
     233    _prop.getSparseArrayPropertyNames(sparseProperties);
     234
     235    IdentifierSequencedSetIterator end = sparseProperties.end();
     236   
     237    for (IdentifierSequencedSetIterator it = sparseProperties.begin(); it != end; ++it) {
     238      Identifier name = *it;
    240239      bool ok;
    241       unsigned index = ref.getPropertyName(exec).toArrayIndex(&ok);
    242       if (ok && index > newLength) {
    243         ref.deleteValue(exec);
    244       }
     240      unsigned index = name.toArrayIndex(&ok);
     241      if (ok && index > newLength)
     242        deleteProperty(exec, name);
    245243    }
    246244  }
     
    349347    }
    350348   
    351     ReferenceList sparseProperties;
    352     _prop.addSparseArrayPropertiesToReferenceList(sparseProperties, this);
    353     unsigned newLength = o + sparseProperties.length();
    354 
    355     if (newLength > storageLength) {
     349    IdentifierSequencedSet sparseProperties;
     350    _prop.getSparseArrayPropertyNames(sparseProperties);
     351    unsigned newLength = o + sparseProperties.size();
     352
     353    if (newLength > storageLength)
    356354      resizeStorage(newLength);
    357     }
    358 
    359     ReferenceListIterator it = sparseProperties.begin();
    360     while (it != sparseProperties.end()) {
    361       Reference ref = it++;
    362       storage[o] = ref.getValue(exec);
    363       ObjectImp::deleteProperty(exec, ref.getPropertyName(exec));
     355
     356    IdentifierSequencedSetIterator end = sparseProperties.end();
     357    for (IdentifierSequencedSetIterator it = sparseProperties.begin(); it != end; ++it) {
     358      Identifier name = *it;
     359      storage[o] = get(exec, name);
     360      ObjectImp::deleteProperty(exec, name);
    364361      o++;
    365362    }
  • trunk/JavaScriptCore/kjs/nodes.cpp

    r10701 r10744  
    4444#include "operations.h"
    4545#include "ustring.h"
    46 #include "reference_list.h"
     46#include "IdentifierSequencedSet.h"
    4747
    4848using namespace KJS;
     
    17811781  ObjectImp *v;
    17821782  Completion c;
    1783   ReferenceList propList;
     1783  IdentifierSequencedSet propertyNames;
    17841784
    17851785  if (varDecl) {
     
    18001800  KJS_CHECKEXCEPTION
    18011801  v = e->toObject(exec);
    1802   propList = v->propList(exec);
    1803 
    1804   ReferenceListIterator propIt = propList.begin();
    1805 
    1806   while (propIt != propList.end()) {
    1807     Identifier name = propIt->getPropertyName(exec);
    1808     if (!v->hasProperty(exec, name)) {
    1809       propIt++;
     1802  v->getPropertyNames(exec, propertyNames);
     1803
     1804  IdentifierSequencedSetIterator end = propertyNames.end();
     1805  for (IdentifierSequencedSetIterator it = propertyNames.begin(); it != end; ++it) {
     1806    const Identifier &name = *it;
     1807    if (!v->hasProperty(exec, name))
    18101808      continue;
    1811     }
    18121809
    18131810    ValueImp *str = jsString(name.ustring());
     
    18711868      }
    18721869    }
    1873 
    1874     propIt++;
    18751870  }
    18761871
  • trunk/JavaScriptCore/kjs/nodes.h

    r10701 r10744  
    3535  class PropertyNode;
    3636  class PropertyValueNode;
    37   class Reference;
    3837  class RegExp;
    3938  class SourceElementsNode;
  • trunk/JavaScriptCore/kjs/object.cpp

    r10728 r10744  
    2929#include "interpreter.h"
    3030#include "lookup.h"
    31 #include "reference_list.h"
     31#include "IdentifierSequencedSet.h"
    3232
    3333#include <assert.h>
     
    375375}
    376376
    377 ReferenceList ObjectImp::propList(ExecState *exec, bool recursive)
    378 {
    379   ReferenceList list;
    380   if (_proto->isObject() && recursive)
    381     list = static_cast<ObjectImp*>(_proto)->propList(exec,recursive);
    382 
    383   _prop.addEnumerablesToReferenceList(list, this);
     377void ObjectImp::getPropertyNames(ExecState *exec, IdentifierSequencedSet &propertyNames)
     378{
     379  _prop.getEnumerablePropertyNames(propertyNames);
    384380
    385381  // Add properties from the static hashtable of properties
     
    390386      const HashEntry *e = info->propHashTable->entries;
    391387      for (int i = 0; i < size; ++i, ++e) {
    392         if ( e->s && !(e->attr & DontEnum) )
    393           list.append(Reference(this, e->s)); /// ######### check for duplicates with the propertymap
     388        if (e->s && !(e->attr & DontEnum))
     389          propertyNames.insert(e->s);
    394390      }
    395391    }
     
    397393  }
    398394
    399   return list;
     395  if (_proto->isObject())
     396    static_cast<ObjectImp*>(_proto)->getPropertyNames(exec, propertyNames);
    400397}
    401398
  • trunk/JavaScriptCore/kjs/object.h

    r10207 r10744  
    4848  class HashEntry;
    4949  class ListImp;
     50  class IdentifierSequencedSet;
    5051
    5152  // ECMA 262-3 8.6.1
     
    423424     *
    424425     * @param exec The current execution state
    425      * @param recursive Whether or not properties in the object's prototype
    426      * chain should be
    427      * included in the list.
    428      * @return A List of References to properties of the object.
     426     * @param propertyNames A list of property names to be filled in by this call
    429427     **/
    430     virtual ReferenceList propList(ExecState *exec, bool recursive = true);
     428    virtual void getPropertyNames(ExecState *exec, IdentifierSequencedSet& propertyNames);
    431429
    432430    /**
  • trunk/JavaScriptCore/kjs/property_map.cpp

    r10701 r10744  
    2626#include "object.h"
    2727#include "protect.h"
    28 #include "reference_list.h"
     28#include "IdentifierSequencedSet.h"
    2929
    3030#include <algorithm>
     
    7575
    7676// lastIndexUsed is an ever-increasing index used to identify the order items
    77 // were inserted into the property map. It's vital that addEnumerablesToReferenceList
     77// were inserted into the property map. It's vital that getEnumerablePropertyNames
    7878// return the properties in the order they were added for compatibility with other
    7979// browsers' JavaScript implementations.
     
    567567}
    568568
    569 void PropertyMap::addEnumerablesToReferenceList(ReferenceList &list, ObjectImp *base) const
     569void PropertyMap::getEnumerablePropertyNames(IdentifierSequencedSet& propertyNames) const
    570570{
    571571    if (!_table) {
     
    573573        UString::Rep *key = _singleEntry.key;
    574574        if (key && !(_singleEntry.attributes & DontEnum))
    575             list.append(Reference(base, Identifier(key)));
     575            propertyNames.insert(Identifier(key));
    576576#endif
    577577        return;
     
    599599    qsort(sortedEnumerables, p - sortedEnumerables, sizeof(sortedEnumerables[0]), comparePropertyMapEntryIndices);
    600600
    601     // Put the keys of the sorted entries into the reference list.
     601    // Put the keys of the sorted entries into the list.
    602602    Entry **q = sortedEnumerables;
    603     while (q != p)
    604         list.append(Reference(base, Identifier((*q++)->key)));
     603    while (q != p) {
     604        propertyNames.insert(Identifier(q[0]->key));
     605        ++q;
     606    }
    605607
    606608    // Deallocate the buffer.
     
    609611}
    610612
    611 void PropertyMap::addSparseArrayPropertiesToReferenceList(ReferenceList &list, ObjectImp *base) const
     613void PropertyMap::getSparseArrayPropertyNames(IdentifierSequencedSet& propertyNames) const
    612614{
    613615    if (!_table) {
     
    619621            k.toUInt32(&fitsInUInt32);
    620622            if (fitsInUInt32)
    621                 list.append(Reference(base, Identifier(key)));
     623                propertyNames.insert(Identifier(key));
    622624        }
    623625#endif
     
    634636            k.toUInt32(&fitsInUInt32);
    635637            if (fitsInUInt32)
    636                 list.append(Reference(base, Identifier(key)));
     638                propertyNames.insert(Identifier(key));
    637639        }
    638640    }
  • trunk/JavaScriptCore/kjs/property_map.h

    r10180 r10744  
    2828namespace KJS {
    2929
     30    class IdentifierSequencedSet;
    3031    class ObjectImp;
    31     class ReferenceList;
    3232    class ValueImp;
    3333   
     
    8282
    8383        void mark() const;
    84         void addEnumerablesToReferenceList(ReferenceList &, ObjectImp *) const;
    85         void addSparseArrayPropertiesToReferenceList(ReferenceList &, ObjectImp *) const;
     84        void getEnumerablePropertyNames(IdentifierSequencedSet&) const;
     85        void getSparseArrayPropertyNames(IdentifierSequencedSet&) const;
    8686
    8787        void save(SavedProperties &) const;
  • trunk/JavaScriptCore/kjs/protect.h

    r10563 r10744  
    2525#define _KJS_PROTECT_H_
    2626
    27 #include "reference.h"
    2827#include "value.h"
    2928#include "protected_values.h"
  • trunk/JavaScriptCore/kjs/ustring.h

    r10701 r10744  
    241241
    242242  public:
     243    typedef Rep Impl;
     244
    243245    /**
    244246     * Constructs a null string.
     
    462464    static void globalClear();
    463465#endif
     466
     467    Impl *impl() const { return rep; }
    464468  private:
    465469    UString(Rep *r) { attach(r); }
  • trunk/JavaScriptCore/kxmlcore/HashSet.h

    r10653 r10744  
    2626#include "HashTable.h"
    2727#include "HashTraits.h"
    28 #include "hashfunctions.h"
     28#include "HashFunctions.h"
    2929
    3030namespace KXMLCore {
Note: See TracChangeset for help on using the changeset viewer.