object Test extends AnyRef with App {
  val x = 1;

  def try1 = {
    Console.print("1 + 1 = ");
    Console.println(1 + (
      try {
        x;
      } catch {
        case _: Error => 1;
      }
    ));
  }

  def try2 = {
    Console.print("1 + 1 = ");
    Console.println(
      (try { x } catch {
        case _: Error => 1;
      })
      +
      (try { x } catch {
        case _: Error => 1;
      })
    );
  }

  var n = 0;

  def try3 = {
    Console.print("1 + 1 = ");
    val x = try { 1 } catch {
      case e: Error => 1;
    }
    this.n = try { 1 } catch {
      case e: Error => 1;
    }
    Console.println(x + n);
  }

  var instance: AnyRef = null;

  def try4 = {
    if (instance == null) {
      instance = try {
        "" //new String();
      } catch {
        case _: Throwable =>
          val cs = "aaa";
          if (cs.length() > 0) {
            "" //new String();
          } else {
            throw new Error("fatal error");
            null
          }
      }
    }
  }

  def try5 = try {
    Console.print("1 + 1 = ");
    try {
      if (true)
        sys.error("exit");
      1+1;
      ()
    } catch {
      case _: Throwable =>
        Console.println("2");
        sys.error("for good");
    }
    Console.println("a");
  } catch {
    case _: Throwable => ();
  }

  class A {
    private val result = {
      val y = try { x } catch {
          case _: Error => 1;
        };
      x + y
    }
    Console.print("1 + 1 = ");
    Console.println(result);
  }

  // ticket #981
  def try6 {
   class SekwencjaArray {
    def get = null
   }

   var sekw : SekwencjaArray =
     try {
       null
     } catch {
       case _: Throwable => null
     }

    new AnyRef {
      def getValueAt(row:Int, col:Int) = sekw.get
    }
  }

/*
  def finally1 = {
    Console.print("1 + 1 = ");
    Console.println(1 + (
      try {
        x
      } finally {
        ()
      }
    ));
  }

*/

  try1;
  try2;
  try3;
  try4;
  try5;
  try6;
  Console.println;
  new A();
  ()
}
