JS: decomposition of "if"

This commit is contained in:
Alexey Tsvetkov
2015-04-10 18:14:24 +03:00
parent c0111d6e33
commit 71ea487828
2 changed files with 29 additions and 1 deletions
@@ -314,7 +314,12 @@ private open class JsExpressionVisitor() : JsVisitorWithContextImpl() {
// where init and test do not contain inline calls.
override fun visit(x: JsFor, ctx: JsContext<*>): Boolean = false
override fun visit(x: JsIf, ctx: JsContext<*>): Boolean = false
override fun visit(x: JsIf, ctx: JsContext<*>): Boolean {
val test = x.getIfExpression()
x.setIfExpression(accept(test))
return false
}
override fun visit(x: JsWhile, ctx: JsContext<*>): Boolean = false
override fun visit(x: JsDoWhile, ctx: JsContext<*>): Boolean = false
@@ -0,0 +1,23 @@
package foo
fun test(x: Boolean, y: Boolean): Boolean {
if (fizz(x) && buzz(y)) {
return true
}
return false
}
fun box(): String {
assertEquals(false, test(false, true))
assertEquals("fizz(false);", pullLog())
assertEquals(false, test(true, false))
assertEquals("fizz(true);buzz(false);", pullLog())
assertEquals(true, test(true, true))
assertEquals("fizz(true);buzz(true);", pullLog())
return "OK"
}