feat(Escaped Identifiers): add ability to use any symbol wrapped in back ticks.

This commit is contained in:
Artem Kobzar
2021-10-29 17:55:59 +00:00
committed by Space
parent ea10b4a781
commit 979e9f94ef
59 changed files with 1260 additions and 159 deletions
@@ -0,0 +1,47 @@
// IGNORE_BACKEND: JS
// !LANGUAGE: +JsAllowInvalidCharsIdentifiersEscaping
package foo
interface IA {
fun `run•invalid@test`(): Int
fun `run@invalid@test`(): Int
fun run_invalid_test(): Int
}
@JsExport()
class A : IA {
override fun `run•invalid@test`(): Int = 41
override fun `run@invalid@test`(): Int = 34
override fun run_invalid_test(): Int = 23
}
class B : IA {
override fun `run•invalid@test`(): Int = 42
override fun `run@invalid@test`(): Int = 35
override fun run_invalid_test(): Int = 24
}
fun box(): String {
val a: IA = A()
val b: IA = B()
assertEquals(23, a.run_invalid_test())
assertEquals(24, b.run_invalid_test())
assertEquals(34, a.`run@invalid@test`())
assertEquals(35, b.`run@invalid@test`())
assertEquals(41, a.`runinvalid@test`())
assertEquals(42, b.`runinvalid@test`())
assertEquals("function", js("typeof a['run•invalid@test']"))
assertEquals(41, js("a['run•invalid@test']()"))
assertEquals(js("undefined"), js("b['run•invalid@test']"))
assertEquals("function", js("typeof a['run@invalid@test']"))
assertEquals(34, js("a['run@invalid@test']()"))
assertEquals(js("undefined"), js("b['run@invalid@test']"))
return "OK"
}