text: /*
   * Copyright (C) 2013 Samsung Electronics Corporation. All rights reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided the following conditions
   * are met:
   *
   * 1.  Redistributions of source code must retain the above copyright
   *     notice, this list of conditions and the following disclaimer.
   *
   * 2.  Redistributions in binary form must reproduce the above copyright
   *     notice, this list of conditions and the following disclaimer in the
   *     documentation and/or other materials provided with the distribution.
   *
   * THIS SOFTWARE IS PROVIDED BY SAMSUNG ELECTRONICS CORPORATION AND ITS
   * CONTRIBUTORS "AS IS", AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING
   * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
   * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SAMSUNG
   * ELECTRONICS CORPORATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
   * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES(INCLUDING
   * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
   * DATA, OR PROFITS, OR BUSINESS INTERRUPTION), HOWEVER CAUSED AND ON ANY THEORY
   * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT(INCLUDING
   * NEGLIGENCE OR OTHERWISE ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
   * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
   */
  
  // Author: Koushik Sen
  
  
  function foo() {
      console.log("foo");
      return 1;
  }
  
  var x = {};
  
  try {
      x.bar(foo());
  } catch(e) {
      console.log("foo should be printed");
  }
  
  x.y += foo();
  console.log('foo should be printed');
  
  var y;
  
  try {
      y.bar(foo());
  } catch(e) {
      console.log("foo should be printed again");
  }
  
  try {
      y.z += foo();
  } catch(e) {
      console.log("foo should not be printed");
  }
  
  function id(e1,e2) {
      console.log('id');
  }
  
  try {
      id(z,"bar")(foo());
  } catch(e) {
      console.log("foo should not be printed");
  }
  
  try {
      z.bar(foo());
  } catch(e) {
      console.log("foo should not be printed");
  }
  