JS backend: support for while/do while with complex conditions

This commit is contained in:
Michael Nedzelsky
2014-08-20 14:46:55 +04:00
parent 53f0e6dcd2
commit d969e58b88
6 changed files with 193 additions and 6 deletions
@@ -0,0 +1,32 @@
package foo
var global: String = ""
fun box(): String {
var i:Int = 0
i = 0
global = ""
do i++ while(try { global += "A"; i } finally {} < 3)
assertEquals("AAA", global)
assertEquals(3, i)
i = 0
global = ""
do {
if (i==3) break
i++
} while(try { global += "A"; i } finally {} < 10)
assertEquals("AAA", global)
assertEquals(3, i)
i = 0
global = ""
do
try { global += "B"; i++} finally {}
while( try { global += "A"; i } finally{} < 3)
assertEquals("BABABA", global)
assertEquals(3, i)
return "OK"
}
@@ -0,0 +1,41 @@
package foo
var global: String = ""
fun box(): String {
var i = 0
i = 0
global = ""
do {
if (i<3) {i++; continue}
break
} while(try { global += "A"; i } finally {} < 10)
assertEquals("AAA", global)
assertEquals(3, i)
i = 0
global = ""
@labelA do {
if (i<3) {i++; continue@labelA}
break
} while(try { global += "A"; i } finally {} < 10)
assertEquals("AAA", global)
assertEquals(3, i)
i = 0
var j = 0
global = ""
@outer do {
j = 0
while( try {global += "B"; j++ } finally {} < 2) {
if (j==1) continue@outer
}
} while(try { global += "A"; i++ } finally {} < 3)
assertEquals("BABABABA", global)
assertEquals(4, i)
assertEquals(1, j)
return "OK"
}
@@ -0,0 +1,31 @@
package foo
var global: String = ""
fun box(): String {
var i:Int = 0
i = 0
global = ""
while(try { global += "A"; i } finally {} < 3)
i++
assertEquals("AAAA", global)
assertEquals(3, i)
i = 0
global = ""
while(try { global += "A"; i } finally {} < 10) {
if (i==3) break
i++
}
assertEquals("AAAA", global)
assertEquals(3, i)
i = 0
global = ""
while( try { global += "A"; i } finally{} < 3)
try { global += "B"; i++} finally {}
assertEquals("ABABABA", global)
return "OK"
}
@@ -0,0 +1,41 @@
package foo
var global: String = ""
fun box(): String {
var i = 0
i = 0
global = ""
while(try { global += "A"; i } finally {} < 10) {
if (i<3) {i++; continue}
break
}
assertEquals("AAAA", global)
assertEquals(3, i)
i = 0
global = ""
@labelA while(try { global += "A"; i } finally {} < 10) {
if (i<3) {i++; continue@labelA}
break
}
assertEquals("AAAA", global)
assertEquals(3, i)
i = 0
var j = 0
global = ""
@outer while(try { global += "A"; i++ } finally {} < 3) {
j = 0
while( try {global += "B"; j++ } finally {} < 2) {
if (j==1) continue@outer
}
}
assertEquals("ABABABA", global)
assertEquals(4, i)
assertEquals(1, j)
return "OK"
}