JS backend: fixed crash when use lambda or local function inside enum method.
This commit is contained in:
@@ -150,4 +150,8 @@ public class FunctionTest extends AbstractExpressionTest {
|
||||
public void testInfixCall() throws Exception {
|
||||
checkFooBoxIsOk();
|
||||
}
|
||||
|
||||
public void testLambdaOrLocalFunInsideEnumMethod() throws Exception {
|
||||
checkFooBoxIsOk();
|
||||
}
|
||||
}
|
||||
|
||||
+21
@@ -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"
|
||||
}
|
||||
@@ -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)
|
||||
};
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user