// Copyright 2014 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// Flags: --allow-natives-syntax --expose-natives-as=builtins --expose-gc

var SetIterator = builtins.ImportNow("SetIterator");
var MapIterator = builtins.ImportNow("MapIterator");
var __v_7 = [];
var __v_8 = {};
var __v_10 = {};
var __v_11 = this;
var __v_12 = {};
var __v_13 = {};
var __v_14 = "";
var __v_15 = {};
try {
__v_1 = {x:0};
%OptimizeFunctionOnNextCall(__f_1);
assertEquals("good", __f_1());
delete __v_1.x;
assertEquals("good", __f_1());
} catch(e) { print("Caught: " + e); }
try {
__v_3 = new Set();
__v_5 = new SetIterator(__v_3, -12);
__v_4 = new Map();
__v_6 = new MapIterator(__v_4, 2);
__f_3(Array);
} catch(e) { print("Caught: " + e); }
function __f_4(__v_8, filter) {
  function __f_6(v) {
    for (var __v_4 in v) {
      for (var __v_4 in v) {}
    }
    %OptimizeFunctionOnNextCall(filter);
    return filter(v);
  }
  var __v_7 = eval(__v_8);
  gc();
  return __f_6(__v_7);
}
function __f_5(__v_6) {
  var __v_5 = new Array(__v_6);
  for (var __v_4 = 0; __v_4 < __v_6; __v_4++) __v_5.push('{}');
  return __v_5;
}
try {
try {
  __v_8.test("\x80");
  assertUnreachable();
} catch (e) {
}
gc();
} catch(e) { print("Caught: " + e); }
