text: /*
   *  With statement (E5 Section 12.10).
   */
  
  var obj;
  
  /*===
  undefined
  10
  ===*/
  
  /* Since 'with' does not alter the variable environment (which is
   * used for variable declarations), any declarations should go to
   * the function level instead.
   */
  
  obj = { x: 100 };
  
  function f_decl1() {
      with (obj) {
          eval("var foo = 10;");  /* created in function */
      }
      print(obj.foo);  // -> undefined
      print(foo);      // 10
  }
  
  try {
      f_decl1();
  } catch (e) {
      print(e.name);
  }
  
  /*===
  100
  undefined
  ===*/
  
  /* Since 'with' delete operations walk through the lexical environment
   * (same as variable lookup) and not the variable environment (for
   * declarations), deleting properties of the bound object should be
   * possible.
   */
  
  obj = { x: 100 };
  
  function f_del1() {
      var x = 200;  /* should not affect anything */
      print(obj.x);
      with (obj) {
          delete x;
      }
      print(obj.x);
  }
  
  try {
      f_del1();
  } catch (e) {
      print(e.name);
  }
  
  
  