18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*
28e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *  Copyright (C) 2006, 2008 Apple Inc. All rights reserved.
38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *  This library is free software; you can redistribute it and/or
58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *  modify it under the terms of the GNU Library General Public
68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *  License as published by the Free Software Foundation; either
78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *  version 2 of the License, or (at your option) any later version.
88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *  This library is distributed in the hope that it will be useful,
108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *  but WITHOUT ANY WARRANTY; without even the implied warranty of
118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *  Library General Public License for more details.
138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *  You should have received a copy of the GNU Library General Public License
158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *  along with this library; see the file COPYING.LIB.  If not, write to
168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *  the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *  Boston, MA 02110-1301, USA.
188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "config.h"
228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "PropertyNameArray.h"
238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
242bde8e466a4451c7319e3a072d118917957d6554Steve Block#include "JSObject.h"
2581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#include "ScopeChain.h"
26cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block#include "Structure.h"
27cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block#include "StructureChain.h"
28cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block
298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace JSC {
308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatic const size_t setThreshold = 20;
328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
33f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrickvoid PropertyNameArray::add(StringImpl* identifier)
348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
35f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick    ASSERT(!identifier || identifier == StringImpl::empty() || identifier->isIdentifier());
368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    size_t size = m_data->propertyNameVector().size();
388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (size < setThreshold) {
398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        for (size_t i = 0; i < size; ++i) {
40f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick            if (identifier == m_data->propertyNameVector()[i].impl())
418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                return;
428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        }
438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    } else {
448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        if (m_set.isEmpty()) {
458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            for (size_t i = 0; i < size; ++i)
46f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick                m_set.add(m_data->propertyNameVector()[i].impl());
478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        }
488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        if (!m_set.add(identifier).second)
498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return;
508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
52cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    addKnownUnique(identifier);
538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} // namespace JSC
56