2  * Copyright (C) 2008 Apple Inc. All rights reserved. 
   4  * Redistribution and use in source and binary forms, with or without 
   5  * modification, are permitted provided that the following conditions 
   7  * 1. Redistributions of source code must retain the above copyright 
   8  *    notice, this list of conditions and the following disclaimer. 
   9  * 2. Redistributions in binary form must reproduce the above copyright 
  10  *    notice, this list of conditions and the following disclaimer in the 
  11  *    documentation and/or other materials provided with the distribution. 
  13  * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY 
  14  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
  15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 
  16  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR 
  17  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 
  18  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 
  19  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 
  20  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 
  21  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
  22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
  23  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  
  27 #include "StructureStubInfo.h" 
  30 #include "PolymorphicPutByIdList.h" 
  36 void StructureStubInfo::deref() 
  39     case access_get_by_id_self_list
: { 
  40         PolymorphicAccessStructureList
* polymorphicStructures 
= u
.getByIdSelfList
.structureList
; 
  41         delete polymorphicStructures
; 
  44     case access_get_by_id_proto_list
: { 
  45         PolymorphicAccessStructureList
* polymorphicStructures 
= u
.getByIdProtoList
.structureList
; 
  46         delete polymorphicStructures
; 
  49     case access_put_by_id_list
: 
  50         delete u
.putByIdList
.list
; 
  52     case access_get_by_id_self
: 
  53     case access_get_by_id_proto
: 
  54     case access_get_by_id_chain
: 
  55     case access_put_by_id_transition_normal
: 
  56     case access_put_by_id_transition_direct
: 
  57     case access_put_by_id_replace
: 
  59     case access_get_by_id_generic
: 
  60     case access_put_by_id_generic
: 
  61     case access_get_array_length
: 
  62     case access_get_string_length
: 
  63         // These instructions don't have to release any allocated memory 
  66         RELEASE_ASSERT_NOT_REACHED(); 
  70 bool StructureStubInfo::visitWeakReferences() 
  73     case access_get_by_id_self
: 
  74         if (!Heap::isMarked(u
.getByIdSelf
.baseObjectStructure
.get())) 
  77     case access_get_by_id_proto
: 
  78         if (!Heap::isMarked(u
.getByIdProto
.baseObjectStructure
.get()) 
  79             || !Heap::isMarked(u
.getByIdProto
.prototypeStructure
.get())) 
  82     case access_get_by_id_chain
: 
  83         if (!Heap::isMarked(u
.getByIdChain
.baseObjectStructure
.get()) 
  84             || !Heap::isMarked(u
.getByIdChain
.chain
.get())) 
  87     case access_get_by_id_self_list
: { 
  88         PolymorphicAccessStructureList
* polymorphicStructures 
= u
.getByIdSelfList
.structureList
; 
  89         if (!polymorphicStructures
->visitWeak(u
.getByIdSelfList
.listSize
)) 
  93     case access_get_by_id_proto_list
: { 
  94         PolymorphicAccessStructureList
* polymorphicStructures 
= u
.getByIdProtoList
.structureList
; 
  95         if (!polymorphicStructures
->visitWeak(u
.getByIdProtoList
.listSize
)) 
  99     case access_put_by_id_transition_normal
: 
 100     case access_put_by_id_transition_direct
: 
 101         if (!Heap::isMarked(u
.putByIdTransition
.previousStructure
.get()) 
 102             || !Heap::isMarked(u
.putByIdTransition
.structure
.get()) 
 103             || !Heap::isMarked(u
.putByIdTransition
.chain
.get())) 
 106     case access_put_by_id_replace
: 
 107         if (!Heap::isMarked(u
.putByIdReplace
.baseObjectStructure
.get())) 
 110     case access_put_by_id_list
: 
 111         if (!u
.putByIdList
.list
->visitWeak()) 
 115         // The rest of the instructions don't require references, so there is no need to