object X1 {
  private constructor() /* primary */ {
    super/*Any*/()
    /* <init>() */

  }

  var x1: Int
    field = 0
    get
    set

  object X2 {
    private constructor() /* primary */ {
      super/*Any*/()
      /* <init>() */

    }

    var x2: Int
      field = 0
      get
      set

    object X3 {
      private constructor() /* primary */ {
        super/*Any*/()
        /* <init>() */

      }

      var x3: Int
        field = 0
        get
        set

    }

  }

}

fun test1(a: IntArray) {
  var i: Int = 0
  { // BLOCK
    val tmp_0: IntArray = a
    val tmp_1: Int = { // BLOCK
      val tmp_2: Int = i
      i = tmp_2.inc()
      tmp_2
    }
    val tmp_3: Int = tmp_0.get(index = tmp_1)
    tmp_0.set(index = tmp_1, value = tmp_3.inc())
    tmp_3
  } /*~> Unit */
}

fun test2() {
  { // BLOCK
    val tmp_4: X1 = X1
    { // BLOCK
      val tmp_5: Int = tmp_4.<get-x1>()
      tmp_4.<set-x1>(<set-?> = tmp_5.inc())
      tmp_5
    }
  } /*~> Unit */
  { // BLOCK
    val tmp_6: X2 = X2
    { // BLOCK
      val tmp_7: Int = tmp_6.<get-x2>()
      tmp_6.<set-x2>(<set-?> = tmp_7.inc())
      tmp_7
    }
  } /*~> Unit */
  { // BLOCK
    val tmp_8: X3 = X3
    { // BLOCK
      val tmp_9: Int = tmp_8.<get-x3>()
      tmp_8.<set-x3>(<set-?> = tmp_9.inc())
      tmp_9
    }
  } /*~> Unit */
}

class B {
  constructor(s: Int = 0) /* primary */ {
    super/*Any*/()
    /* <init>() */

  }

  var s: Int
    field = s
    get
    set

}

object Host {
  private constructor() /* primary */ {
    super/*Any*/()
    /* <init>() */

  }

  operator fun B.plusAssign(b: B) {
    { // BLOCK
      val tmp_10: B = <this>
      tmp_10.<set-s>(<set-?> = tmp_10.<get-s>().plus(other = b.<get-s>()))
    }
  }

}

fun Host.test3(v: B) {
  (<this>, v).plusAssign(b = B(s = 1000))
}
