1 /* 2 * Copyright (C) 2008 Apple Inc. All rights reserved. 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions 6 * are met: 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. 12 * 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. 24 */ 25 26 #include "config.h" 27 #include "StructureStubInfo.h" 28 29 namespace JSC { 30 31 #if ENABLE(JIT) 32 void StructureStubInfo::deref() 33 { 34 switch (accessType) { 35 case access_get_by_id_self: 36 u.getByIdSelf.baseObjectStructure->deref(); 37 return; 38 case access_get_by_id_proto: 39 u.getByIdProto.baseObjectStructure->deref(); 40 u.getByIdProto.prototypeStructure->deref(); 41 return; 42 case access_get_by_id_chain: 43 u.getByIdChain.baseObjectStructure->deref(); 44 u.getByIdChain.chain->deref(); 45 return; 46 case access_get_by_id_self_list: { 47 PolymorphicAccessStructureList* polymorphicStructures = u.getByIdSelfList.structureList; 48 polymorphicStructures->derefStructures(u.getByIdSelfList.listSize); 49 delete polymorphicStructures; 50 return; 51 } 52 case access_get_by_id_proto_list: { 53 PolymorphicAccessStructureList* polymorphicStructures = u.getByIdProtoList.structureList; 54 polymorphicStructures->derefStructures(u.getByIdProtoList.listSize); 55 delete polymorphicStructures; 56 return; 57 } 58 case access_put_by_id_transition: 59 u.putByIdTransition.previousStructure->deref(); 60 u.putByIdTransition.structure->deref(); 61 u.putByIdTransition.chain->deref(); 62 return; 63 case access_put_by_id_replace: 64 u.putByIdReplace.baseObjectStructure->deref(); 65 return; 66 case access_get_by_id: 67 case access_put_by_id: 68 case access_get_by_id_generic: 69 case access_put_by_id_generic: 70 case access_get_array_length: 71 case access_get_string_length: 72 // These instructions don't ref their Structures. 73 return; 74 default: 75 ASSERT_NOT_REACHED(); 76 } 77 } 78 #endif 79 80 } // namespace JSC 81