// a host-bindings syntax experiment
@binding(BindingCall.NEW, [ BindingType.STRING ], BindingType.OBJECT_HANDLE)
export class ExternalString {

  @binding(BindingCall.FUNCTION, [ BindingType.U32, BindingType.U32 ], BindingType.OBJECT_HANDLE)
  static fromCharCode(char: u16, schar: u16 = <u16>-1): String { return unreachable(); }

  @binding(BindingCall.FUNCTION, [ BindingType.U32 ], BindingType.OBJECT_HANDLE)
  static fromCodePoint(codepoint: u32): String { return unreachable(); }

  @binding(BindingCall.THIS, [ BindingType.U32 ], BindingType.OBJECT_HANDLE)
  charAt(index: u32): String { return unreachable(); }

  @binding(BindingCall.THIS, [ BindingType.U32 ], BindingType.PASS_THRU)
  charCodeAt(index: u32): u16 { return unreachable(); }

  @binding(BindingCall.THIS, [ BindingType.U32 ], BindingType.PASS_THRU)
  codePointAt(index: u32): u32 { return unreachable(); }

  @binding(BindingCall.THIS, [ BindingType.OBJECT_HANDLE ], BindingType.OBJECT_HANDLE)
  @operator("+")
  concat(other: String): String { return unreachable(); }

  @binding(BindingCall.THIS, [ BindingType.OBJECT_HANDLE ], BindingType.PASS_THRU)
  endsWith(other: String): bool { return unreachable(); }

  @binding(BindingCall.THIS, [ BindingType.OBJECT_HANDLE ], BindingType.PASS_THRU)
  indexOf(other: String): i32 { return unreachable(); }

  @binding(BindingCall.THIS, [ BindingType.OBJECT_HANDLE ], BindingType.PASS_THRU)
  startsWith(other: String): bool { return unreachable(); }

  @binding(BindingCall.THIS, [ BindingType.U32, BindingType.U32 ], BindingType.OBJECT_HANDLE)
  substr(start: i32, length: i32): String { return unreachable(); }

  @binding(BindingCall.THIS, [ BindingType.U32, BindingType.U32 ], BindingType.OBJECT_HANDLE)
  substring(start: i32, end: i32): String { return unreachable(); }

  @binding(BindingCall.THIS, [], BindingType.OBJECT_HANDLE)
  trim(): String { return unreachable(); }

  @binding(BindingCall.THIS, [], BindingType.OBJECT_HANDLE)
  trimStart(): String { return unreachable(); }

  @binding(BindingCall.THIS, [], BindingType.OBJECT_HANDLE)
  trimEnd(): String { return unreachable(); }

  @binding(BindingCall.THIS, [ BindingType.OBJECT_HANDLE ], BindingType.PASS_THRU)
  @operator("==")
  equals(other: String): bool { return unreachable(); }
}
