X-Git-Url: https://git.saurik.com/apple/javascriptcore.git/blobdiff_plain/14957cd040308e3eeec43d26bae5d76da13fcd85..2656c66b5b30d5597e842a751c7f19ad6c2fe31a:/runtime/PropertyNameArray.h diff --git a/runtime/PropertyNameArray.h b/runtime/PropertyNameArray.h index 0da930f..bfbddaa 100644 --- a/runtime/PropertyNameArray.h +++ b/runtime/PropertyNameArray.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2006, 2008 Apple Inc. All rights reserved. + * Copyright (C) 2006, 2008, 2012 Apple Inc. All rights reserved. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public @@ -24,7 +24,6 @@ #include "CallFrame.h" #include "Identifier.h" #include -#include #include namespace JSC { @@ -52,25 +51,27 @@ namespace JSC { // FIXME: Rename to PropertyNameArrayBuilder. class PropertyNameArray { public: - PropertyNameArray(JSGlobalData* globalData) + PropertyNameArray(VM* vm) : m_data(PropertyNameArrayData::create()) - , m_globalData(globalData) - , m_shouldCache(true) + , m_vm(vm) + , m_numCacheableSlots(0) + , m_baseObject(0) { } PropertyNameArray(ExecState* exec) : m_data(PropertyNameArrayData::create()) - , m_globalData(&exec->globalData()) - , m_shouldCache(true) + , m_vm(&exec->vm()) + , m_numCacheableSlots(0) + , m_baseObject(0) { } - JSGlobalData* globalData() { return m_globalData; } + VM* vm() { return m_vm; } void add(const Identifier& identifier) { add(identifier.impl()); } - void add(StringImpl*); - void addKnownUnique(StringImpl* identifier) { m_data->propertyNameVector().append(Identifier(m_globalData, identifier)); } + JS_EXPORT_PRIVATE void add(StringImpl*); + void addKnownUnique(StringImpl* identifier) { m_data->propertyNameVector().append(Identifier(m_vm, identifier)); } Identifier& operator[](unsigned i) { return m_data->propertyNameVector()[i]; } const Identifier& operator[](unsigned i) const { return m_data->propertyNameVector()[i]; } @@ -85,13 +86,28 @@ namespace JSC { const_iterator begin() const { return m_data->propertyNameVector().begin(); } const_iterator end() const { return m_data->propertyNameVector().end(); } + size_t numCacheableSlots() const { return m_numCacheableSlots; } + void setNumCacheableSlotsForObject(JSObject* object, size_t numCacheableSlots) + { + if (object != m_baseObject) + return; + m_numCacheableSlots = numCacheableSlots; + } + void setBaseObject(JSObject* object) + { + if (m_baseObject) + return; + m_baseObject = object; + } + private: - typedef HashSet > IdentifierSet; + typedef HashSet> IdentifierSet; RefPtr m_data; IdentifierSet m_set; - JSGlobalData* m_globalData; - bool m_shouldCache; + VM* m_vm; + size_t m_numCacheableSlots; + JSObject* m_baseObject; }; } // namespace JSC