diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/handlers/JsAstHandler.kt b/js/js.tests/test/org/jetbrains/kotlin/js/test/handlers/JsAstHandler.kt index 5edfbe9ed9c..73549953b0e 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/js/test/handlers/JsAstHandler.kt +++ b/js/js.tests/test/org/jetbrains/kotlin/js/test/handlers/JsAstHandler.kt @@ -6,12 +6,10 @@ package org.jetbrains.kotlin.js.test.handlers import org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.TranslationMode -import org.jetbrains.kotlin.js.backend.ast.JsExpressionStatement -import org.jetbrains.kotlin.js.backend.ast.JsNullLiteral -import org.jetbrains.kotlin.js.backend.ast.JsProgram -import org.jetbrains.kotlin.js.backend.ast.RecursiveJsVisitor +import org.jetbrains.kotlin.js.backend.ast.* import org.jetbrains.kotlin.js.facade.TranslationResult import org.jetbrains.kotlin.js.testOld.utils.DirectiveTestUtils +import org.jetbrains.kotlin.js.translate.utils.name import org.jetbrains.kotlin.test.TargetBackend import org.jetbrains.kotlin.test.backend.handlers.JsBinaryArtifactHandler import org.jetbrains.kotlin.test.model.BinaryArtifacts @@ -35,21 +33,26 @@ class JsAstHandler(testServices: TestServices) : JsBinaryArtifactHandler(testSer private fun processJsProgram(program: JsProgram, psiFiles: List, targetBackend: TargetBackend) { psiFiles.forEach { DirectiveTestUtils.processDirectives(program, it, targetBackend) } - - // TODO: For now the IR backend generates JS code that doesn't pass verification, - // TODO: so we temporarily disabled AST verification. - if (targetBackend == TargetBackend.JS) { - program.verifyAst() - } + program.verifyAst(targetBackend) } - private fun JsProgram.verifyAst() { + private fun JsProgram.verifyAst(targetBackend: TargetBackend) { accept(object : RecursiveJsVisitor() { override fun visitExpressionStatement(x: JsExpressionStatement) { - when (x.expression) { - is JsNullLiteral -> testServices.assertions.fail { "Expression statement contains `null` literal" } - else -> super.visitExpressionStatement(x) + val expression = x.expression + + // FIXME: The code generated by the IR BE contains null statements. Remove this check when that is fixed. + if (targetBackend == TargetBackend.JS) { + if (expression is JsNullLiteral) { + testServices.assertions.fail { "Expression statement contains `null` literal" } + } } + + if (expression is JsInvocation && expression.name?.ident == "Unit_getInstance" && expression.arguments.isEmpty()) { + testServices.assertions.fail { "Unit_getInstance() statements should be eliminated" } + } + + super.visitExpressionStatement(x) } }) }