diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/export/ExportModelGenerator.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/export/ExportModelGenerator.kt index abf43464ce6..f9ca28e810b 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/export/ExportModelGenerator.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/export/ExportModelGenerator.kt @@ -588,7 +588,7 @@ class ExportModelGenerator( val name = function.getExportedIdentifier() // TODO: Use [] syntax instead of prohibiting - if (name in allReservedWords) + if (parentClass == null && name in allReservedWords) return Exportability.Prohibited("Name is a reserved word") return Exportability.Allowed diff --git a/js/js.translator/testData/typescript-export/declarations/declarations.d.ts b/js/js.translator/testData/typescript-export/declarations/declarations.d.ts index 794974ca5b4..30d43fb1a76 100644 --- a/js/js.translator/testData/typescript-export/declarations/declarations.d.ts +++ b/js/js.translator/testData/typescript-export/declarations/declarations.d.ts @@ -162,5 +162,10 @@ declare namespace JS_TESTS { get ordinal(): 0 | 1; } } + class KT38262 { + constructor(); + then(): number; + catch(): number; + } } } diff --git a/js/js.translator/testData/typescript-export/declarations/declarations.kt b/js/js.translator/testData/typescript-export/declarations/declarations.kt index 2f04aff32f0..c6fe3cfc3a0 100644 --- a/js/js.translator/testData/typescript-export/declarations/declarations.kt +++ b/js/js.translator/testData/typescript-export/declarations/declarations.kt @@ -213,4 +213,10 @@ class OuterClass { A, B } +} + +@JsExport +class KT38262 { + fun then(): Int = 42 + fun catch(): Int = 24 } \ No newline at end of file diff --git a/js/js.translator/testData/typescript-export/declarations/declarations__main.js b/js/js.translator/testData/typescript-export/declarations/declarations__main.js index 4a654d8bff2..abdfaa20d01 100644 --- a/js/js.translator/testData/typescript-export/declarations/declarations__main.js +++ b/js/js.translator/testData/typescript-export/declarations/declarations__main.js @@ -30,6 +30,7 @@ var TestEnumClass = JS_TESTS.foo.TestEnumClass; var TestInterfaceImpl = JS_TESTS.foo.TestInterfaceImpl; var processInterface = JS_TESTS.foo.processInterface; var OuterClass = JS_TESTS.foo.OuterClass; +var KT38262 = JS_TESTS.foo.KT38262; function assert(condition) { if (!condition) { throw "Assertion failed"; @@ -126,5 +127,7 @@ function box() { assert(OuterClass.NestedEnum.B.name === "B"); assert(OuterClass.NestedEnum.A.ordinal === 0); assert(OuterClass.NestedEnum.B.ordinal === 1); + assert(new KT38262().then() == 42); + assert(new KT38262().catch() == 24); return "OK"; } diff --git a/js/js.translator/testData/typescript-export/declarations/declarations__main.ts b/js/js.translator/testData/typescript-export/declarations/declarations__main.ts index 2e7804e611a..3d1d4050029 100644 --- a/js/js.translator/testData/typescript-export/declarations/declarations__main.ts +++ b/js/js.translator/testData/typescript-export/declarations/declarations__main.ts @@ -30,6 +30,7 @@ import TestEnumClass = JS_TESTS.foo.TestEnumClass; import TestInterfaceImpl = JS_TESTS.foo.TestInterfaceImpl; import processInterface = JS_TESTS.foo.processInterface; import OuterClass = JS_TESTS.foo.OuterClass; +import KT38262 = JS_TESTS.foo.KT38262; function assert(condition: boolean) { if (!condition) { @@ -152,5 +153,8 @@ function box(): string { assert(OuterClass.NestedEnum.A.ordinal === 0) assert(OuterClass.NestedEnum.B.ordinal === 1) + assert(new KT38262().then() == 42) + assert(new KT38262().catch() == 24) + return "OK"; } \ No newline at end of file