1635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project/* 2635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * Copyright (C) 2008 Apple Inc. All rights reserved. 3635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * 4635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * Redistribution and use in source and binary forms, with or without 5635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * modification, are permitted provided that the following conditions 6635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * are met: 7635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * 1. Redistributions of source code must retain the above copyright 8635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * notice, this list of conditions and the following disclaimer. 9635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright 10635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * notice, this list of conditions and the following disclaimer in the 11635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * documentation and/or other materials provided with the distribution. 12635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * 13635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY 14635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 15635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 16635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR 17635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 18635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 19635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 20635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 21635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 22635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 23635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 24635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project */ 25635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 26635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "config.h" 27635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "StructureStubInfo.h" 28635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 292bde8e466a4451c7319e3a072d118917957d6554Steve Block#include "JSObject.h" 3081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#include "ScopeChain.h" 3181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 32635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectnamespace JSC { 33635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 34635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#if ENABLE(JIT) 35635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectvoid StructureStubInfo::deref() 36635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{ 370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch switch (accessType) { 380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch case access_get_by_id_self_list: { 39635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project PolymorphicAccessStructureList* polymorphicStructures = u.getByIdSelfList.structureList; 40635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project delete polymorphicStructures; 41635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return; 42635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project } 430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch case access_get_by_id_proto_list: { 44635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project PolymorphicAccessStructureList* polymorphicStructures = u.getByIdProtoList.structureList; 45635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project delete polymorphicStructures; 46635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return; 47635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project } 482daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch case access_get_by_id_self: 492daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch case access_get_by_id_proto: 502daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch case access_get_by_id_chain: 510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch case access_put_by_id_transition: 520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch case access_put_by_id_replace: 530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch case access_get_by_id: 540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch case access_put_by_id: 550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch case access_get_by_id_generic: 560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch case access_put_by_id_generic: 570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch case access_get_array_length: 580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch case access_get_string_length: 592daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch // These instructions don't have to release any allocated memory 60635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return; 61635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project default: 62635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project ASSERT_NOT_REACHED(); 63635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project } 64635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 652bde8e466a4451c7319e3a072d118917957d6554Steve Block 662bde8e466a4451c7319e3a072d118917957d6554Steve Blockvoid StructureStubInfo::markAggregate(MarkStack& markStack) 672bde8e466a4451c7319e3a072d118917957d6554Steve Block{ 682bde8e466a4451c7319e3a072d118917957d6554Steve Block switch (accessType) { 692bde8e466a4451c7319e3a072d118917957d6554Steve Block case access_get_by_id_self: 702daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch markStack.append(&u.getByIdSelf.baseObjectStructure); 712bde8e466a4451c7319e3a072d118917957d6554Steve Block return; 722bde8e466a4451c7319e3a072d118917957d6554Steve Block case access_get_by_id_proto: 732daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch markStack.append(&u.getByIdProto.baseObjectStructure); 742daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch markStack.append(&u.getByIdProto.prototypeStructure); 752bde8e466a4451c7319e3a072d118917957d6554Steve Block return; 762bde8e466a4451c7319e3a072d118917957d6554Steve Block case access_get_by_id_chain: 772daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch markStack.append(&u.getByIdChain.baseObjectStructure); 782daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch markStack.append(&u.getByIdChain.chain); 792bde8e466a4451c7319e3a072d118917957d6554Steve Block return; 802bde8e466a4451c7319e3a072d118917957d6554Steve Block case access_get_by_id_self_list: { 812bde8e466a4451c7319e3a072d118917957d6554Steve Block PolymorphicAccessStructureList* polymorphicStructures = u.getByIdSelfList.structureList; 822bde8e466a4451c7319e3a072d118917957d6554Steve Block polymorphicStructures->markAggregate(markStack, u.getByIdSelfList.listSize); 832bde8e466a4451c7319e3a072d118917957d6554Steve Block return; 842bde8e466a4451c7319e3a072d118917957d6554Steve Block } 852bde8e466a4451c7319e3a072d118917957d6554Steve Block case access_get_by_id_proto_list: { 862bde8e466a4451c7319e3a072d118917957d6554Steve Block PolymorphicAccessStructureList* polymorphicStructures = u.getByIdProtoList.structureList; 872bde8e466a4451c7319e3a072d118917957d6554Steve Block polymorphicStructures->markAggregate(markStack, u.getByIdProtoList.listSize); 882bde8e466a4451c7319e3a072d118917957d6554Steve Block return; 892bde8e466a4451c7319e3a072d118917957d6554Steve Block } 902bde8e466a4451c7319e3a072d118917957d6554Steve Block case access_put_by_id_transition: 912daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch markStack.append(&u.putByIdTransition.previousStructure); 922daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch markStack.append(&u.putByIdTransition.structure); 932daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch markStack.append(&u.putByIdTransition.chain); 942bde8e466a4451c7319e3a072d118917957d6554Steve Block return; 952bde8e466a4451c7319e3a072d118917957d6554Steve Block case access_put_by_id_replace: 962daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch markStack.append(&u.putByIdReplace.baseObjectStructure); 972bde8e466a4451c7319e3a072d118917957d6554Steve Block return; 982bde8e466a4451c7319e3a072d118917957d6554Steve Block case access_get_by_id: 992bde8e466a4451c7319e3a072d118917957d6554Steve Block case access_put_by_id: 1002bde8e466a4451c7319e3a072d118917957d6554Steve Block case access_get_by_id_generic: 1012bde8e466a4451c7319e3a072d118917957d6554Steve Block case access_put_by_id_generic: 1022bde8e466a4451c7319e3a072d118917957d6554Steve Block case access_get_array_length: 1032bde8e466a4451c7319e3a072d118917957d6554Steve Block case access_get_string_length: 1042daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch // These instructions don't need to mark anything 1052bde8e466a4451c7319e3a072d118917957d6554Steve Block return; 1062bde8e466a4451c7319e3a072d118917957d6554Steve Block default: 1072bde8e466a4451c7319e3a072d118917957d6554Steve Block ASSERT_NOT_REACHED(); 1082bde8e466a4451c7319e3a072d118917957d6554Steve Block } 1092bde8e466a4451c7319e3a072d118917957d6554Steve Block} 110635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#endif 111635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 112635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} // namespace JSC 113