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#include "JSObject.h" 30#include "ScopeChain.h" 31 32namespace JSC { 33 34#if ENABLE(JIT) 35void StructureStubInfo::deref() 36{ 37 switch (accessType) { 38 case access_get_by_id_self_list: { 39 PolymorphicAccessStructureList* polymorphicStructures = u.getByIdSelfList.structureList; 40 delete polymorphicStructures; 41 return; 42 } 43 case access_get_by_id_proto_list: { 44 PolymorphicAccessStructureList* polymorphicStructures = u.getByIdProtoList.structureList; 45 delete polymorphicStructures; 46 return; 47 } 48 case access_get_by_id_self: 49 case access_get_by_id_proto: 50 case access_get_by_id_chain: 51 case access_put_by_id_transition: 52 case access_put_by_id_replace: 53 case access_get_by_id: 54 case access_put_by_id: 55 case access_get_by_id_generic: 56 case access_put_by_id_generic: 57 case access_get_array_length: 58 case access_get_string_length: 59 // These instructions don't have to release any allocated memory 60 return; 61 default: 62 ASSERT_NOT_REACHED(); 63 } 64} 65 66void StructureStubInfo::markAggregate(MarkStack& markStack) 67{ 68 switch (accessType) { 69 case access_get_by_id_self: 70 markStack.append(&u.getByIdSelf.baseObjectStructure); 71 return; 72 case access_get_by_id_proto: 73 markStack.append(&u.getByIdProto.baseObjectStructure); 74 markStack.append(&u.getByIdProto.prototypeStructure); 75 return; 76 case access_get_by_id_chain: 77 markStack.append(&u.getByIdChain.baseObjectStructure); 78 markStack.append(&u.getByIdChain.chain); 79 return; 80 case access_get_by_id_self_list: { 81 PolymorphicAccessStructureList* polymorphicStructures = u.getByIdSelfList.structureList; 82 polymorphicStructures->markAggregate(markStack, u.getByIdSelfList.listSize); 83 return; 84 } 85 case access_get_by_id_proto_list: { 86 PolymorphicAccessStructureList* polymorphicStructures = u.getByIdProtoList.structureList; 87 polymorphicStructures->markAggregate(markStack, u.getByIdProtoList.listSize); 88 return; 89 } 90 case access_put_by_id_transition: 91 markStack.append(&u.putByIdTransition.previousStructure); 92 markStack.append(&u.putByIdTransition.structure); 93 markStack.append(&u.putByIdTransition.chain); 94 return; 95 case access_put_by_id_replace: 96 markStack.append(&u.putByIdReplace.baseObjectStructure); 97 return; 98 case access_get_by_id: 99 case access_put_by_id: 100 case access_get_by_id_generic: 101 case access_put_by_id_generic: 102 case access_get_array_length: 103 case access_get_string_length: 104 // These instructions don't need to mark anything 105 return; 106 default: 107 ASSERT_NOT_REACHED(); 108 } 109} 110#endif 111 112} // namespace JSC 113