| // TARGET_BACKEND: WASM | |
| // see DIRECTIVES at start of functions | |
| // The debugger view in chrome sorts by name (lexicographically by ascii to be precise). | |
| // To sort away internal/synthetic local vars, they are renamed with a tilde ~ at the start. | |
| // This test checks that certain locals are and others aren't renamed. | |
| // WASM_CHECK_LOCAL_IN_FUNCTION: name=iShouldNotBeRenamed inFunction=dontRenameNormal | |
| fun dontRenameNormal(): Int{ | |
| val iShouldNotBeRenamed = 42 | |
| return iShouldNotBeRenamed | |
| } | |
| // should be renamed to ~inductionVariable | |
| // WASM_CHECK_LOCAL_IN_FUNCTION: name="~inductionVariable" inFunction=inductionVar | |
| // WASM_CHECK_LOCAL_NOT_IN_FUNCTION: name=inductionVariable inFunction=inductionVar | |
| fun inductionVar(): Int { | |
| var x = 0 | |
| // x = (6*7/2)*2 | |
| for (i in 0..6) // uses `inductionVariable` as a local internal variable | |
| x+=i | |
| x*=2 | |
| return x | |
| } | |
| // shouldn't rename any of these | |
| // WASM_CHECK_LOCAL_IN_FUNCTION: name=explicitLambdaParameter inFunction=lambdas | |
| // WASM_CHECK_LOCAL_IN_FUNCTION: name=it inFunction=lambdas | |
| // WASM_CHECK_LOCAL_IN_FUNCTION: name=explicitNested inFunction=lambdas | |
| fun lambdas() : Int { | |
| val lam1 = {explicitLambdaParameter:Int -> | |
| explicitLambdaParameter*2+1 | |
| } | |
| val lam2:(Int) -> Int = {//implicit it | |
| it*2+1 | |
| } | |
| val lam3 = { | |
| val nestedLam = {explicitNested:Int -> | |
| 0 | |
| } | |
| nestedLam(42) | |
| } | |
| return lam1(10) + lam2(10) + lam3() | |
| } | |
| fun box(): String { | |
| if(dontRenameNormal() != 42 | |
| || inductionVar() != 42 | |
| || lambdas() != 42) | |
| return "NOT OK" | |
| return "OK" | |
| } |