| Index: src/v8natives.js
 | 
| diff --git a/src/v8natives.js b/src/v8natives.js
 | 
| index 39bb2ba631c72cb8779debded6b03f65f256ebb4..552e42664a9bd78124433ad2d3618d3a8293e8fb 100644
 | 
| --- a/src/v8natives.js
 | 
| +++ b/src/v8natives.js
 | 
| @@ -682,14 +682,19 @@ function DefineObjectProperty(obj, p, desc, should_throw) {
 | 
|          }
 | 
|          // Step 10a
 | 
|          if (IsDataDescriptor(current) && IsDataDescriptor(desc)) {
 | 
| -          if (!current.isWritable() && desc.isWritable()) {
 | 
| -            if (should_throw) {
 | 
| -              throw MakeTypeError(kRedefineDisallowed, p);
 | 
| -            } else {
 | 
| -              return false;
 | 
| +          var currentIsWritable = current.isWritable();
 | 
| +          if (currentIsWritable != desc.isWritable()) {
 | 
| +            if (!currentIsWritable || IS_STRONG(obj)) {
 | 
| +              if (should_throw) {
 | 
| +                throw currentIsWritable
 | 
| +                    ? MakeTypeError(kStrongRedefineDisallowed, obj, p)
 | 
| +                    : MakeTypeError(kRedefineDisallowed, p);
 | 
| +              } else {
 | 
| +                return false;
 | 
| +              }
 | 
|              }
 | 
|            }
 | 
| -          if (!current.isWritable() && desc.hasValue() &&
 | 
| +          if (!currentIsWritable && desc.hasValue() &&
 | 
|                !$sameValue(desc.getValue(), current.getValue())) {
 | 
|              if (should_throw) {
 | 
|                throw MakeTypeError(kRedefineDisallowed, p);
 | 
| @@ -1223,7 +1228,10 @@ function ObjectSealJS(obj) {
 | 
|  function ObjectFreezeJS(obj) {
 | 
|    if (!IS_SPEC_OBJECT(obj)) return obj;
 | 
|    var isProxy = %_IsJSProxy(obj);
 | 
| -  if (isProxy || %HasSloppyArgumentsElements(obj) || %IsObserved(obj)) {
 | 
| +  // TODO(conradw): Investigate modifying the fast path to accommodate strong
 | 
| +  // objects.
 | 
| +  if (isProxy || %HasSloppyArgumentsElements(obj) || %IsObserved(obj) ||
 | 
| +      IS_STRONG(obj)) {
 | 
|      if (isProxy) {
 | 
|        ProxyFix(obj);
 | 
|      }
 | 
| 
 |