diff --git a/js/js.tests/test/org/jetbrains/k2js/test/semantics/FunctionTest.java b/js/js.tests/test/org/jetbrains/k2js/test/semantics/FunctionTest.java index 8bad2c58326..3d12de19bba 100644 --- a/js/js.tests/test/org/jetbrains/k2js/test/semantics/FunctionTest.java +++ b/js/js.tests/test/org/jetbrains/k2js/test/semantics/FunctionTest.java @@ -150,4 +150,8 @@ public class FunctionTest extends AbstractExpressionTest { public void testInfixCall() throws Exception { checkFooBoxIsOk(); } + + public void testLambdaOrLocalFunInsideEnumMethod() throws Exception { + checkFooBoxIsOk(); + } } diff --git a/js/js.translator/testData/expression/function/cases/lambdaOrLocalFunInsideEnumMethod.kt b/js/js.translator/testData/expression/function/cases/lambdaOrLocalFunInsideEnumMethod.kt new file mode 100644 index 00000000000..80f9167915c --- /dev/null +++ b/js/js.translator/testData/expression/function/cases/lambdaOrLocalFunInsideEnumMethod.kt @@ -0,0 +1,21 @@ +package foo + +enum class Foo { + BAR + + fun test(): () -> String { + fun local() = 29 + val lambda = { "OK" + local() } + + assertEquals(29, local()) + assertEquals("OK29", lambda()) + + return lambda + } +} + +fun box(): String { + assertEquals("OK29", Foo.BAR.test()()) + + return "OK" +} \ No newline at end of file diff --git a/js/js.translator/testData/kotlin_lib_ecma5.js b/js/js.translator/testData/kotlin_lib_ecma5.js index 9493dfedfd6..2e35f6f2798 100644 --- a/js/js.translator/testData/kotlin_lib_ecma5.js +++ b/js/js.translator/testData/kotlin_lib_ecma5.js @@ -227,34 +227,39 @@ var Kotlin = {}; * @param {?=} constructor * @param {function():Object} enumEntries * @param {Object=} properties + * @param {Object=} staticProperties * @returns {*} */ - Kotlin.createEnumClass = function (basesFun, constructor, enumEntries, properties) { - return Kotlin.createClass( - basesFun, constructor, properties, { - object_initializer$: function () { - var enumEntryList = enumEntries() - var i = 0; - var values = []; - for (var entryName in enumEntryList) { - if (enumEntryList.hasOwnProperty(entryName)) { - var entryObject = enumEntryList[entryName]; - values[i] = entryObject; - entryObject.ordinal$ = i; - entryObject.name$ = entryName; - i++; - } + Kotlin.createEnumClass = function (basesFun, constructor, enumEntries, properties, staticProperties) { + staticProperties = staticProperties || {}; + + // TODO use Object.assign + staticProperties.object_initializer$ = function () { + var enumEntryList = enumEntries(); + var i = 0; + var values = []; + for (var entryName in enumEntryList) { + if (enumEntryList.hasOwnProperty(entryName)) { + var entryObject = enumEntryList[entryName]; + values[i] = entryObject; + entryObject.ordinal$ = i; + entryObject.name$ = entryName; + i++; } - enumEntryList.values$ = values; - return enumEntryList; - }, - values: function() { - return this.object.values$; - }, - valueOf_61zpoe$: function(name) { - return this.object[name]; } - }) + enumEntryList.values$ = values; + return enumEntryList; + }; + + staticProperties.values = function () { + return this.object.values$; + }; + + staticProperties.valueOf_61zpoe$ = function (name) { + return this.object[name]; + }; + + return Kotlin.createClass(basesFun, constructor, properties, staticProperties) }; /**