expected = '';

function g(code) {
  f = Function(code);
  gen = f();
  gen.next();
  try { gen.next(); } catch (ex) { expected = ex.toString() }
}

g("\
  yield this.__defineGetter__('x', function(){ return z }); \
  let z = new String('hi'); \
  ");

eval();
gc();

str = x;

assertEq(expected, "[object StopIteration]");
assertEq(str.toString(), "hi");