// FIR_DIFFERENCE
// The diagnostic cannot be implemented with the FIR frontend checker because it requires constant evaluation over FIR.
// The diagnostic is implemented as a klib check over IR.
// IGNORE_FIR_DIAGNOSTICS

// IGNORE_BACKEND_K1: JS_IR
val a = "1"

fun nonConst(): String = "1"

fun test() {
    val b = "b"

    js(<!JSCODE_ARGUMENT_NON_CONST_EXPRESSION, JSCODE_CAN_NOT_VERIFY_JAVASCRIPT!>a<!>)
    js((<!JSCODE_ARGUMENT_NON_CONST_EXPRESSION, JSCODE_CAN_NOT_VERIFY_JAVASCRIPT!>b<!>))
    js(("c"))
    js(<!ARGUMENT_TYPE_MISMATCH, JSCODE_ARGUMENT_NON_CONST_EXPRESSION, JSCODE_CAN_NOT_VERIFY_JAVASCRIPT!>3<!>)
    js(<!ARGUMENT_TYPE_MISMATCH, JSCODE_ARGUMENT_NON_CONST_EXPRESSION, JSCODE_CAN_NOT_VERIFY_JAVASCRIPT!>3 + 2<!>)
    js(<!ARGUMENT_TYPE_MISMATCH, JSCODE_ARGUMENT_NON_CONST_EXPRESSION, JSCODE_CAN_NOT_VERIFY_JAVASCRIPT!>1.0f<!>)
    js(<!ARGUMENT_TYPE_MISMATCH, JSCODE_ARGUMENT_NON_CONST_EXPRESSION, JSCODE_CAN_NOT_VERIFY_JAVASCRIPT!>true<!>)
    js(<!JSCODE_CAN_NOT_VERIFY_JAVASCRIPT!>"$<!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>a<!>"<!>)
    js("${1}")
    js(<!JSCODE_CAN_NOT_VERIFY_JAVASCRIPT!>"$<!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>b<!>;"<!>)
    js(<!JSCODE_CAN_NOT_VERIFY_JAVASCRIPT!>"${<!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>b<!>}bb"<!>)
    js(<!JSCODE_CAN_NOT_VERIFY_JAVASCRIPT!><!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>a<!> + <!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>a<!><!>)
    js("a" + "a")
    js("ccc")

    js(<!JSCODE_ARGUMENT_NON_CONST_EXPRESSION, JSCODE_CAN_NOT_VERIFY_JAVASCRIPT!>nonConst()<!>)
}
