KT-11030 Initialization order of enum entries in JS now conforms to JVM backend
This commit is contained in:
@@ -0,0 +1,33 @@
|
||||
package foo
|
||||
|
||||
enum class E {
|
||||
A,
|
||||
B {
|
||||
init {
|
||||
log("init B")
|
||||
}
|
||||
},
|
||||
C;
|
||||
|
||||
init {
|
||||
log("init E")
|
||||
}
|
||||
}
|
||||
|
||||
var l = ""
|
||||
fun log(s: String) {
|
||||
l += s + ";"
|
||||
}
|
||||
|
||||
fun box(): String {
|
||||
log("get Ea.A")
|
||||
E.A.toString()
|
||||
log("get E.B")
|
||||
E.B.toString()
|
||||
log("get E.C")
|
||||
E.C.toString()
|
||||
|
||||
if (l != "get Ea.A;init E;init E;init B;init E;get E.B;get E.C;") return "fail: '$l'"
|
||||
|
||||
return "OK"
|
||||
}
|
||||
+11
-17
@@ -256,27 +256,21 @@ var Kotlin = {};
|
||||
var values = [];
|
||||
for (var entryName in enumEntryList) {
|
||||
if (enumEntryList.hasOwnProperty(entryName)) {
|
||||
var entryObject = enumEntryList[entryName];
|
||||
var entryFactory = enumEntryList[entryName];
|
||||
values.push(entryName);
|
||||
if (typeof entryObject === 'function' && entryObject.type === Kotlin.TYPE.INIT_FUN) {
|
||||
entryObject.className = entryName;
|
||||
Object.defineProperty(cls, entryName, {
|
||||
get: function(ordinal, name, obj) {
|
||||
return function() {
|
||||
var result = obj.apply(this);
|
||||
result.ordinal$ = ordinal;
|
||||
result.name$ = name;
|
||||
return result;
|
||||
}
|
||||
}(i++, entryName, entryObject),
|
||||
configurable: true
|
||||
})
|
||||
|
||||
var entryObject;
|
||||
if (typeof entryFactory === 'function' && entryFactory.type === Kotlin.TYPE.INIT_FUN) {
|
||||
entryFactory.className = entryName;
|
||||
entryObject = entryFactory.apply(cls);
|
||||
}
|
||||
else {
|
||||
entryObject.ordinal$ = i++;
|
||||
entryObject.name$ = entryName;
|
||||
cls[entryName] = entryObject;
|
||||
entryObject = entryFactory();
|
||||
}
|
||||
|
||||
entryObject.ordinal$ = i++;
|
||||
entryObject.name$ = entryName;
|
||||
cls[entryName] = entryObject;
|
||||
}
|
||||
}
|
||||
cls.valuesNames$ = values;
|
||||
|
||||
Reference in New Issue
Block a user