// CHECK:
//   Mangled name: Circle
//   Public signature: /Circle|null[0]
class Circle : Shape {
  // CHECK:
  //   Mangled name: Circle#<init>(){}
  //   Public signature: /Circle.<init>|-5645683436151566731[0]
  //   Public signature debug description: <init>(){}
  constructor() /* primary */

  // CHECK JVM_IR:
  //   Mangled name: Circle#draw!Canvas(){}kotlin.String
  //   Public signature: /Circle.draw|-6733499063990640842[0]
  //   Public signature debug description: draw!Canvas(){}kotlin.String
  // CHECK JS_IR NATIVE:
  //   Mangled name: Circle#draw!Canvas(){}
  //   Public signature: /Circle.draw|4876755509620013985[0]
  //   Public signature debug description: draw!Canvas(){}
  override fun draw($context_receiver_0: Canvas): String

}

// CHECK:
//   Mangled name: Canvas
//   Public signature: /Canvas|null[0]
interface Canvas {

  // CHECK:
  //   Mangled name: Canvas{}suffix
  //   Public signature: /Canvas.suffix|-3301965527200666288[0]
  //   Public signature debug description: {}suffix
  abstract val suffix: String
    // CHECK JVM_IR:
    //   Mangled name: Canvas#<get-suffix>(){}kotlin.String
    //   Public signature: /Canvas.suffix.<get-suffix>|8958072538558116778[0]
    //   Public signature debug description: <get-suffix>(){}kotlin.String
    // CHECK JS_IR NATIVE:
    //   Mangled name: Canvas#<get-suffix>(){}
    //   Public signature: /Canvas.suffix.<get-suffix>|-7634976832113083262[0]
    //   Public signature debug description: <get-suffix>(){}
    abstract get

}

// CHECK:
//   Mangled name: Shape
//   Public signature: /Shape|null[0]
interface Shape {

  // CHECK JVM_IR:
  //   Mangled name: Shape#draw!Canvas(){}kotlin.String
  //   Public signature: /Shape.draw|-6733499063990640842[0]
  //   Public signature debug description: draw!Canvas(){}kotlin.String
  // CHECK JS_IR NATIVE:
  //   Mangled name: Shape#draw!Canvas(){}
  //   Public signature: /Shape.draw|4876755509620013985[0]
  //   Public signature debug description: draw!Canvas(){}
  abstract fun draw($context_receiver_0: Canvas): String

}

// CHECK:
//   Mangled name: MyCanvas
//   Public signature: /MyCanvas|null[0]
object MyCanvas : Canvas {
  // CHECK:
  //   Mangled name: MyCanvas{}suffix
  //   Public signature: /MyCanvas.suffix|-3301965527200666288[0]
  //   Public signature debug description: {}suffix
  override val suffix: String
    // CHECK JVM_IR:
    //   Mangled name: MyCanvas#<get-suffix>(){}kotlin.String
    //   Public signature: /MyCanvas.suffix.<get-suffix>|8958072538558116778[0]
    //   Public signature debug description: <get-suffix>(){}kotlin.String
    // CHECK JS_IR NATIVE:
    //   Mangled name: MyCanvas#<get-suffix>(){}
    //   Public signature: /MyCanvas.suffix.<get-suffix>|-7634976832113083262[0]
    //   Public signature debug description: <get-suffix>(){}
    override get

  // CHECK:
  //   Mangled name: MyCanvas#<init>(){}
  //   Public signature: /MyCanvas.<init>|-5645683436151566731[0]
  //   Public signature debug description: <init>(){}
  private constructor() /* primary */

}

// CHECK JVM_IR:
//   Mangled name: #box(){}kotlin.String
//   Public signature: /box|-9347091776561469[0]
//   Public signature debug description: box(){}kotlin.String
// CHECK JS_IR NATIVE:
//   Mangled name: #box(){}
//   Public signature: /box|2173511048851971368[0]
//   Public signature debug description: box(){}
fun box(): String

