Upgrade V8 to version 4.9.385.28

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

Change-Id: I4b2e74289d4bf3667f2f3dc8aa2e541f63e26eb4
diff --git a/test/mjsunit/es6/iteration-semantics.js b/test/mjsunit/es6/iteration-semantics.js
index 544c94d..6466ac5 100644
--- a/test/mjsunit/es6/iteration-semantics.js
+++ b/test/mjsunit/es6/iteration-semantics.js
@@ -25,7 +25,7 @@
 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-// Flags: --harmony-scoping --harmony-proxies
+// Flags: --harmony-proxies
 
 // Test for-of semantics.
 
@@ -200,9 +200,11 @@
                            // Done.
                            { value: 4, done: 42 }])));
 // Results that are not objects.
-assertEquals([undefined, undefined, undefined],
-             fold(append, [],
-                  results([10, "foo", /qux/, { value: 37, done: true }])));
+assertThrows(function() {
+  assertEquals([undefined, undefined, undefined],
+               fold(append, [],
+                    results([10, "foo", /qux/, { value: 37, done: true }])));
+}, TypeError);
 // Getters (shudder).
 assertEquals([1, 2],
              fold(append, [],
@@ -305,32 +307,55 @@
              try_control(integers_until(10),
                          function(x) { return (x == 5) ? x : "continue" }));
 
+// TODO(neis,cbruni): Enable once the corresponding traps work again.
 // Proxy results, with getters.
-function transparent_proxy(x) {
-  return Proxy.create({
-    get: function(receiver, name) { return x[name]; }
-  });
-}
-assertEquals([1, 2],
-             fold(append, [],
-                  results([one_time_getter({ value: 1 }, 'done', false),
-                           one_time_getter({ done: false }, 'value', 2),
-                           { value: 37, done: true },
-                           never_getter(never_getter({}, 'done'), 'value')]
-                          .map(transparent_proxy))));
+// function transparent_proxy(x) {
+//   return new Proxy({}, {
+//     get: function(receiver, name) { return x[name]; }
+//   });
+// }
+// assertEquals([1, 2],
+//              fold(append, [],
+//                   results([one_time_getter({ value: 1 }, 'done', false),
+//                            one_time_getter({ done: false }, 'value', 2),
+//                            { value: 37, done: true },
+//                            never_getter(never_getter({}, 'done'), 'value')]
+//                           .map(transparent_proxy))));
 
 // Proxy iterators.
-function poison_proxy_after(iterable, n) {
-  var iterator = iterable[Symbol.iterator]();
-  return wrap_iterator(Proxy.create({
-    get: function(receiver, name) {
-      if (name == 'next' && n-- < 0) throw "unreachable";
-      return iterator[name];
-    },
-    // Needed for integers_until(10)'s this.n++.
-    set: function(receiver, name, val) {
-      return iterator[name] = val;
-    }
-  }));
+// function poison_proxy_after(iterable, n) {
+//   var iterator = iterable[Symbol.iterator]();
+//   return wrap_iterator(new Proxy({}, {
+//     get: function(receiver, name) {
+//       if (name == 'next' && n-- < 0) throw "unreachable";
+//       return iterator[name];
+//     },
+//     // Needed for integers_until(10)'s this.n++.
+//     set: function(receiver, name, val) {
+//       return iterator[name] = val;
+//     }
+//   }));
+// }
+// assertEquals(45, fold(sum, 0, poison_proxy_after(integers_until(10), 10)));
+
+
+function test_iterator_result_object_non_object(value, descr) {
+  var arr = [];
+  var ex;
+  var message = 'Iterator result ' + (descr || value) + ' is not an object';
+  try {
+    fold(append, arr,
+         results([{value: 1}, {}, value, {value: 2}, {done: true}]));
+  } catch (e) {
+    ex = e;
+  }
+  assertInstanceof(ex, TypeError);
+  assertEquals(message, ex.message);
+  assertArrayEquals([1, undefined], arr);
 }
-assertEquals(45, fold(sum, 0, poison_proxy_after(integers_until(10), 10)));
+test_iterator_result_object_non_object(null);
+test_iterator_result_object_non_object(undefined);
+test_iterator_result_object_non_object(42);
+test_iterator_result_object_non_object('abc');
+test_iterator_result_object_non_object(false);
+test_iterator_result_object_non_object(Symbol('x'), 'Symbol(x)');