// TARGET_BACKEND: JVM_IR
// IGNORE_BACKEND_K1: JS_IR, JS_IR_ES6
// LANGUAGE: -SkipStandaloneScriptsInSourceRoots
// WITH_STDLIB
// JVM_ABI_K1_K2_DIFF: KT-63963, KT-63960

// Although this test works in K1 just fine, it is named with the suffix K2 to show that the demonstrated method is the only one
// available so far to call a script from another module.
// In K1 one can do it directly, but this is not the functionality we want to retain

// MODULE: lib
// FILE: script.kts

fun ok() = "OK"

// MODULE: main(lib)
// FILE: test.kt

fun runScriptMethod(name: String, method: String): Any {
    val klass = Thread.currentThread().contextClassLoader.loadClass(name)
    val constructor = klass.constructors.single()
    val instance = constructor.newInstance(emptyArray<String>())
    val method = klass.getMethod(method)
    return method.invoke(instance)
}

fun box(): String =
    runScriptMethod("Script", "ok") as String
