0e3f48314a
Don't search for box function in the generated code; instead, stop the execution right before calling it. This makes stepping tests more accurate.
81 lines
1.6 KiB
Kotlin
Vendored
81 lines
1.6 KiB
Kotlin
Vendored
// TARGET_BACKEND: JS_IR
|
|
|
|
// FILE: a.kt
|
|
@JsExport
|
|
fun exclamate(a: String) =
|
|
"$a!"
|
|
|
|
@Suppress("INVISIBLE_MEMBER", "INVISIBLE_REFERENCE")
|
|
@JsFun("""
|
|
function (a, b) {
|
|
return _.exclamate(a) +
|
|
_.exclamate(b);
|
|
}
|
|
""")
|
|
external fun exclamateAndConcat(a: String, b: String): String
|
|
|
|
@Suppress("INVISIBLE_MEMBER", "INVISIBLE_REFERENCE")
|
|
@JsPolyfill("""
|
|
if (typeof String.prototype.myAwesomePolyfill === "undefined") {
|
|
Object.defineProperty(String.prototype, "myAwesomePolyfill", {
|
|
value: function () {
|
|
return this + "!";
|
|
}
|
|
});
|
|
}
|
|
""")
|
|
internal inline fun String.myAwesomePolyfill(): Boolean =
|
|
asDynamic()
|
|
.myAwesomePolyfill()
|
|
|
|
val walter1VarDecl = "var walter1 = _.exclamate('Walter');"
|
|
val jesse1VarDecl = "var jesse1 = _.exclamate(jesse);"
|
|
|
|
// FILE: test.kt
|
|
|
|
|
|
|
|
fun box() {
|
|
|
|
exclamateAndConcat(
|
|
"hello",
|
|
"world")
|
|
val jesse = "Jesse"
|
|
js(
|
|
"_.exclamate(jesse);") // Local variable is captured
|
|
js(
|
|
"_.exclamate('Walter');") // No local variables captured
|
|
js(
|
|
walter1VarDecl +
|
|
"_.exclamate(walter1);")
|
|
js(
|
|
jesse1VarDecl +
|
|
"_.exclamate(jesse1);")
|
|
|
|
"foo".myAwesomePolyfill()
|
|
}
|
|
|
|
// EXPECTATIONS
|
|
// test.kt:41 box
|
|
// test.kt:42 box
|
|
// a.kt:11 box
|
|
// a.kt:6 exclamate
|
|
// a.kt:12 box
|
|
// a.kt:6 exclamate
|
|
// test.kt:43 box
|
|
// test.kt:45 box
|
|
// a.kt:6 exclamate
|
|
// test.kt:47 box
|
|
// a.kt:6 exclamate
|
|
// test.kt:49 box
|
|
// a.kt:6 exclamate
|
|
// test.kt:49 box
|
|
// a.kt:6 exclamate
|
|
// test.kt:52 box
|
|
// a.kt:6 exclamate
|
|
// test.kt:52 box
|
|
// a.kt:6 exclamate
|
|
// a.kt:29 box
|
|
// a.kt:22 value
|
|
// test.kt:56 box
|