diff options
Diffstat (limited to 'Source/JavaScriptCore/runtime/JSObject.h')
-rw-r--r-- | Source/JavaScriptCore/runtime/JSObject.h | 32 |
1 files changed, 24 insertions, 8 deletions
diff --git a/Source/JavaScriptCore/runtime/JSObject.h b/Source/JavaScriptCore/runtime/JSObject.h index bb59eb32b..16efeba5e 100644 --- a/Source/JavaScriptCore/runtime/JSObject.h +++ b/Source/JavaScriptCore/runtime/JSObject.h @@ -172,6 +172,15 @@ namespace JSC { JS_EXPORT_PRIVATE static void put(JSCell*, ExecState*, PropertyName, JSValue, PutPropertySlot&); JS_EXPORT_PRIVATE static void putByIndex(JSCell*, ExecState*, unsigned propertyName, JSValue, bool shouldThrow); + void putByIndexInline(ExecState* exec, unsigned propertyName, JSValue value, bool shouldThrow) + { + if (canSetIndexQuickly(propertyName)) { + setIndexQuickly(exec->globalData(), propertyName, value); + return; + } + methodTable()->putByIndex(this, exec, propertyName, value, shouldThrow); + } + // This is similar to the putDirect* methods: // - the prototype chain is not consulted // - accessors are not called. @@ -179,7 +188,7 @@ namespace JSC { // This method creates a property with attributes writable, enumerable and configurable all set to true. bool putDirectIndex(ExecState* exec, unsigned propertyName, JSValue value, unsigned attributes, PutDirectIndexMode mode) { - if (!attributes && canSetIndexQuickly(propertyName)) { + if (!attributes && canSetIndexQuicklyForPutDirect(propertyName)) { setIndexQuickly(exec->globalData(), propertyName, value); return true; } @@ -191,7 +200,7 @@ namespace JSC { } // A non-throwing version of putDirect and putDirectIndex. - void putDirectMayBeIndex(ExecState*, PropertyName, JSValue); + JS_EXPORT_PRIVATE void putDirectMayBeIndex(ExecState*, PropertyName, JSValue); bool canGetIndexQuickly(unsigned i) { @@ -235,6 +244,19 @@ namespace JSC { } } + bool canSetIndexQuicklyForPutDirect(unsigned i) + { + switch (structure()->indexingType()) { + case ALL_BLANK_INDEXING_TYPES: + return false; + case ALL_ARRAY_STORAGE_INDEXING_TYPES: + return i < m_butterfly->arrayStorage()->vectorLength(); + default: + ASSERT_NOT_REACHED(); + return false; + } + } + void setIndexQuickly(JSGlobalData& globalData, unsigned i, JSValue v) { switch (structure()->indexingType()) { @@ -321,7 +343,6 @@ namespace JSC { // NOTE: JSObject and its subclasses must be able to gracefully handle ExecState* = 0, // because this call may come from inside the compiler. JS_EXPORT_PRIVATE static JSObject* toThisObject(JSCell*, ExecState*); - JSObject* unwrappedObject(); bool getPropertySpecificValue(ExecState*, PropertyName, JSCell*& specificFunction) const; @@ -460,11 +481,6 @@ namespace JSC { return structure()->globalObject(); } - // Does everything possible to return the global object. If it encounters an object - // that does not have a global object, it returns 0 instead (for example - // JSNotAnObject). - JSGlobalObject* unwrappedGlobalObject(); - void switchToSlowPutArrayStorage(JSGlobalData&); // The receiver is the prototype in this case. The following: |