diff --git a/src/org/mozilla/javascript/ScriptableObject.java b/src/org/mozilla/javascript/ScriptableObject.java index bd23ccd1f6..e9be363686 100644 --- a/src/org/mozilla/javascript/ScriptableObject.java +++ b/src/org/mozilla/javascript/ScriptableObject.java @@ -2804,20 +2804,18 @@ private boolean putImpl(Object key, int index, Scriptable start, { // This method is very hot (basically called on each assignment) // so we inline the extensible/sealed checks below. - if (!isExtensible) { - Context cx = Context.getContext(); - if (cx.isStrictMode()) { - throw ScriptRuntime.typeError0("msg.not.extensible"); - } - } Slot slot; if (this != start) { slot = slotMap.query(key, index); + if(!isExtensible && Context.getContext().isStrictMode() && (slot == null || !(slot instanceof GetterSlot))) + throw ScriptRuntime.typeError0("msg.not.extensible"); if (slot == null) { return false; } } else if (!isExtensible) { slot = slotMap.query(key, index); + if(Context.getContext().isStrictMode() && (slot == null || !(slot instanceof GetterSlot))) + throw ScriptRuntime.typeError0("msg.not.extensible"); if (slot == null) { return true; } diff --git a/testsrc/test262.properties b/testsrc/test262.properties index c07c295d50..a54cfe3639 100644 --- a/testsrc/test262.properties +++ b/testsrc/test262.properties @@ -481,9 +481,6 @@ built-ins/Object ! entries/tamper-with-object-keys.js ! freeze/15.2.3.9-2-a-12.js ! freeze/15.2.3.9-2-a-8.js - ! freeze/15.2.3.9-2-c-2.js - ! freeze/15.2.3.9-2-c-3.js - ! freeze/15.2.3.9-2-c-4.js ! freeze/15.2.3.9-2-d-3.js ! freeze/frozen-object-contains-symbol-properties-non-strict.js ! getOwnPropertyDescriptor/15.2.3.3-3-14.js