X-Git-Url: https://git.saurik.com/apple/javascriptcore.git/blobdiff_plain/6fe7ccc865dc7d7541b93c5bcaf6368d2c98a174..refs/heads/master:/bytecode/StructureStubInfo.cpp diff --git a/bytecode/StructureStubInfo.cpp b/bytecode/StructureStubInfo.cpp index f66860a..5ea530c 100644 --- a/bytecode/StructureStubInfo.cpp +++ b/bytecode/StructureStubInfo.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008 Apple Inc. All rights reserved. + * Copyright (C) 2008, 2014 Apple Inc. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -27,8 +27,8 @@ #include "StructureStubInfo.h" #include "JSObject.h" +#include "PolymorphicGetByIdList.h" #include "PolymorphicPutByIdList.h" -#include "ScopeChain.h" namespace JSC { @@ -36,63 +36,39 @@ namespace JSC { void StructureStubInfo::deref() { switch (accessType) { - case access_get_by_id_self_list: { - PolymorphicAccessStructureList* polymorphicStructures = u.getByIdSelfList.structureList; - delete polymorphicStructures; - return; - } - case access_get_by_id_proto_list: { - PolymorphicAccessStructureList* polymorphicStructures = u.getByIdProtoList.structureList; - delete polymorphicStructures; + case access_get_by_id_list: { + delete u.getByIdList.list; return; } case access_put_by_id_list: delete u.putByIdList.list; return; + case access_in_list: { + PolymorphicAccessStructureList* polymorphicStructures = u.inList.structureList; + delete polymorphicStructures; + return; + } case access_get_by_id_self: - case access_get_by_id_proto: - case access_get_by_id_chain: case access_put_by_id_transition_normal: case access_put_by_id_transition_direct: case access_put_by_id_replace: case access_unset: - case access_get_by_id_generic: - case access_put_by_id_generic: - case access_get_array_length: - case access_get_string_length: // These instructions don't have to release any allocated memory return; default: - ASSERT_NOT_REACHED(); + RELEASE_ASSERT_NOT_REACHED(); } } -bool StructureStubInfo::visitWeakReferences() +bool StructureStubInfo::visitWeakReferences(RepatchBuffer& repatchBuffer) { switch (accessType) { case access_get_by_id_self: if (!Heap::isMarked(u.getByIdSelf.baseObjectStructure.get())) return false; break; - case access_get_by_id_proto: - if (!Heap::isMarked(u.getByIdProto.baseObjectStructure.get()) - || !Heap::isMarked(u.getByIdProto.prototypeStructure.get())) - return false; - break; - case access_get_by_id_chain: - if (!Heap::isMarked(u.getByIdChain.baseObjectStructure.get()) - || !Heap::isMarked(u.getByIdChain.chain.get())) - return false; - break; - case access_get_by_id_self_list: { - PolymorphicAccessStructureList* polymorphicStructures = u.getByIdSelfList.structureList; - if (!polymorphicStructures->visitWeak(u.getByIdSelfList.listSize)) - return false; - break; - } - case access_get_by_id_proto_list: { - PolymorphicAccessStructureList* polymorphicStructures = u.getByIdProtoList.structureList; - if (!polymorphicStructures->visitWeak(u.getByIdProtoList.listSize)) + case access_get_by_id_list: { + if (!u.getByIdList.list->visitWeak(repatchBuffer)) return false; break; } @@ -108,9 +84,15 @@ bool StructureStubInfo::visitWeakReferences() return false; break; case access_put_by_id_list: - if (!u.putByIdList.list->visitWeak()) + if (!u.putByIdList.list->visitWeak(repatchBuffer)) + return false; + break; + case access_in_list: { + PolymorphicAccessStructureList* polymorphicStructures = u.inList.structureList; + if (!polymorphicStructures->visitWeak(u.inList.listSize)) return false; break; + } default: // The rest of the instructions don't require references, so there is no need to // do anything.