~ JsCode unsupported function kind
diff --git a/compiler/testData/diagnostics/wasmTests/jsInterop/jsCode.kt b/compiler/testData/diagnostics/wasmTests/jsInterop/jsCode.kt
index 655d938..75fe270 100644
--- a/compiler/testData/diagnostics/wasmTests/jsInterop/jsCode.kt
+++ b/compiler/testData/diagnostics/wasmTests/jsInterop/jsCode.kt
@@ -59,3 +59,15 @@
fun withDefault(x: Int = <!JSCODE_WRONG_CONTEXT!>js<!>("1")) {
println(x)
}
+
+suspend fun suspendFun(): Int = <!JSCODE_UNSUPPORTED_FUNCTION_KIND!>js<!>("1")
+
+inline fun inlineFun(f: () -> Int): Int = <!JSCODE_UNSUPPORTED_FUNCTION_KIND!>js<!>("f()")
+
+fun Int.extensionFun(): Int = <!JSCODE_UNSUPPORTED_FUNCTION_KIND!>js<!>("1")
+
+var propertyWithAccessors: Int
+ get(): Int = <!JSCODE_WRONG_CONTEXT!>js<!>("1")
+ set(<!UNUSED_PARAMETER!>value<!>: Int) {
+ <!JSCODE_WRONG_CONTEXT!>js<!>("console.log(value);")
+ }
diff --git a/wasm/wasm.frontend/src/org/jetbrains/kotlin/wasm/resolve/diagnostics/DefaultErrorMessagesWasm.kt b/wasm/wasm.frontend/src/org/jetbrains/kotlin/wasm/resolve/diagnostics/DefaultErrorMessagesWasm.kt
index c434bf1..377f0041 100644
--- a/wasm/wasm.frontend/src/org/jetbrains/kotlin/wasm/resolve/diagnostics/DefaultErrorMessagesWasm.kt
+++ b/wasm/wasm.frontend/src/org/jetbrains/kotlin/wasm/resolve/diagnostics/DefaultErrorMessagesWasm.kt
@@ -5,6 +5,7 @@
package org.jetbrains.kotlin.wasm.resolve.diagnostics
+import org.jetbrains.kotlin.diagnostics.rendering.CommonRenderers
import org.jetbrains.kotlin.diagnostics.rendering.DefaultErrorMessages
import org.jetbrains.kotlin.diagnostics.rendering.DiagnosticFactoryToRendererMap
import org.jetbrains.kotlin.diagnostics.rendering.Renderers
@@ -30,6 +31,11 @@
ErrorsWasm.JSCODE_WRONG_CONTEXT,
"Calls to js(code) should be a single expression inside a top-level function body or a property initializer in Kotlin/Wasm"
)
+ put(
+ ErrorsWasm.JSCODE_UNSUPPORTED_FUNCTION_KIND,
+ "Calls to js(code) are not supported in {0} in Kotlin/Wasm",
+ CommonRenderers.STRING
+ )
}
}
diff --git a/wasm/wasm.frontend/src/org/jetbrains/kotlin/wasm/resolve/diagnostics/ErrorsWasm.java b/wasm/wasm.frontend/src/org/jetbrains/kotlin/wasm/resolve/diagnostics/ErrorsWasm.java
index e7b87f8..0ec3255 100644
--- a/wasm/wasm.frontend/src/org/jetbrains/kotlin/wasm/resolve/diagnostics/ErrorsWasm.java
+++ b/wasm/wasm.frontend/src/org/jetbrains/kotlin/wasm/resolve/diagnostics/ErrorsWasm.java
@@ -29,6 +29,7 @@
DiagnosticFactory0<PsiElement> WRONG_JS_FUN_TARGET = DiagnosticFactory0.create(ERROR);
DiagnosticFactory0<PsiElement> JSCODE_WRONG_CONTEXT = DiagnosticFactory0.create(ERROR);
+ DiagnosticFactory1<PsiElement, String> JSCODE_UNSUPPORTED_FUNCTION_KIND = DiagnosticFactory1.create(ERROR);
@SuppressWarnings("UnusedDeclaration")
Object _initializer = new Object() {
diff --git a/wasm/wasm.frontend/src/org/jetbrains/kotlin/wasm/resolve/diagnostics/WasmJsCodeCallsChecker.kt b/wasm/wasm.frontend/src/org/jetbrains/kotlin/wasm/resolve/diagnostics/WasmJsCodeCallsChecker.kt
index e76d5a3..eee1238 100644
--- a/wasm/wasm.frontend/src/org/jetbrains/kotlin/wasm/resolve/diagnostics/WasmJsCodeCallsChecker.kt
+++ b/wasm/wasm.frontend/src/org/jetbrains/kotlin/wasm/resolve/diagnostics/WasmJsCodeCallsChecker.kt
@@ -50,6 +50,16 @@
is FunctionDescriptor -> {
if (!containingDeclaration.hasValidJsCodeBody(context.trace.bindingContext)) {
context.trace.report(ErrorsWasm.JSCODE_WRONG_CONTEXT.on(reportOn))
+ } else {
+ if (containingDeclaration.isSuspend) {
+ context.trace.report(ErrorsWasm.JSCODE_UNSUPPORTED_FUNCTION_KIND.on(reportOn, "suspend function"))
+ }
+ if (containingDeclaration.isInline) {
+ context.trace.report(ErrorsWasm.JSCODE_UNSUPPORTED_FUNCTION_KIND.on(reportOn, "inline function"))
+ }
+ if (containingDeclaration.extensionReceiverParameter != null) {
+ context.trace.report(ErrorsWasm.JSCODE_UNSUPPORTED_FUNCTION_KIND.on(reportOn, "function with extension receiver"))
+ }
}
}
is PropertyDescriptor -> {