Upgrade V8 to version 4.9.385.28

https://chromium.googlesource.com/v8/v8/+/4.9.385.28

FPIIM-449

Change-Id: I4b2e74289d4bf3667f2f3dc8aa2e541f63e26eb4
diff --git a/test/mjsunit/object-freeze.js b/test/mjsunit/object-freeze.js
index 5d1f8b7..23f5af0 100644
--- a/test/mjsunit/object-freeze.js
+++ b/test/mjsunit/object-freeze.js
@@ -25,33 +25,20 @@
 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-// Tests the Object.freeze and Object.isFrozen methods - ES 15.2.3.9 and
-// ES 15.2.3.12
+// Tests the Object.freeze and Object.isFrozen methods - ES 19.1.2.5 and
+// ES 19.1.2.12
 
 // Flags: --allow-natives-syntax
 
-// Test that we throw an error if an object is not passed as argument.
-var non_objects = new Array(undefined, null, 1, -1, 0, 42.43);
+// Test that we return obj if non-object is passed as argument
+var non_objects = new Array(undefined, null, 1, -1, 0, 42.43, Symbol("test"));
 for (var key in non_objects) {
-  var exception = false;
-  try {
-    Object.freeze(non_objects[key]);
-  } catch(e) {
-    exception = true;
-    assertTrue(/Object.freeze called on non-object/.test(e));
-  }
-  assertTrue(exception);
+  assertSame(non_objects[key], Object.freeze(non_objects[key]));
 }
 
+// Test that isFrozen always returns true for non-objects
 for (var key in non_objects) {
-  exception = false;
-  try {
-    Object.isFrozen(non_objects[key]);
-  } catch(e) {
-    exception = true;
-    assertTrue(/Object.isFrozen called on non-object/.test(e));
-  }
-  assertTrue(exception);
+  assertTrue(Object.isFrozen(non_objects[key]));
 }
 
 // Test normal data properties.
@@ -348,3 +335,64 @@
 Object.freeze(obj);
 assertTrue(Object.isSealed(obj));
 assertTrue(Object.isFrozen(obj));
+
+
+(function propertiesOfFrozenObjectNotFrozen() {
+  function Frozen() {}
+  Object.freeze(Frozen);
+  assertDoesNotThrow(function() { return new Frozen(); });
+  Frozen.prototype.prototypeExists = true;
+  assertTrue((new Frozen()).prototypeExists);
+})();
+
+
+(function frozenPrototypePreventsPUT() {
+  // A read-only property on the prototype should prevent a [[Put]] .
+  function Constructor() {}
+  Constructor.prototype.foo = 1;
+  Object.freeze(Constructor.prototype);
+  var obj = new Constructor();
+  obj.foo = 2;
+  assertSame(1, obj.foo);
+})();
+
+
+(function frozenFunctionSloppy() {
+  // Check that freezing a function works correctly.
+  var func = Object.freeze(function foo(){});
+  assertTrue(Object.isFrozen(func));
+  func.prototype = 42;
+  assertFalse(func.prototype === 42);
+  assertFalse(Object.getOwnPropertyDescriptor(func, "prototype").writable);
+})();
+
+
+(function frozenFunctionStrict() {
+  // Check that freezing a strict function works correctly.
+  var func = Object.freeze(function foo(){ "use strict"; });
+  assertTrue(Object.isFrozen(func));
+  func.prototype = 42;
+  assertFalse(func.prototype === 42);
+  assertFalse(Object.getOwnPropertyDescriptor(func, "prototype").writable);
+})();
+
+
+(function frozenArrayObject() {
+  // Check that freezing array objects works correctly.
+  var array = Object.freeze([0,1,2]);
+  assertTrue(Object.isFrozen(array));
+  array[0] = 3;
+  assertEquals(0, array[0]);
+  assertFalse(Object.getOwnPropertyDescriptor(array, "length").writable);
+})();
+
+
+(function frozenArgumentsObject() {
+  // Check that freezing arguments objects works correctly.
+  var args = Object.freeze((function(){ return arguments; })(0,1,2));
+  assertTrue(Object.isFrozen(args));
+  args[0] = 3;
+  assertEquals(0, args[0]);
+  assertFalse(Object.getOwnPropertyDescriptor(args, "length").writable);
+  assertFalse(Object.getOwnPropertyDescriptor(args, "callee").writable);
+})();