From 264e31948784e3e0d0d537a9382aa58af1124072 Mon Sep 17 00:00:00 2001 From: Zalim Bashorov Date: Tue, 27 Dec 2016 01:08:00 +0300 Subject: [PATCH] KJS: type -> kind --- .../js/coroutine/CoroutineFunctionTransformer.kt | 12 +++++++----- js/js.libraries/src/js/rtti.js | 6 +++--- .../jetbrains/kotlin/js/translate/context/Namer.java | 6 ++++++ .../js/translate/declaration/ClassTranslator.kt | 12 ++++++------ 4 files changed, 22 insertions(+), 14 deletions(-) diff --git a/js/js.inliner/src/org/jetbrains/kotlin/js/coroutine/CoroutineFunctionTransformer.kt b/js/js.inliner/src/org/jetbrains/kotlin/js/coroutine/CoroutineFunctionTransformer.kt index 0f583c464a8..8945c38ac4f 100644 --- a/js/js.inliner/src/org/jetbrains/kotlin/js/coroutine/CoroutineFunctionTransformer.kt +++ b/js/js.inliner/src/org/jetbrains/kotlin/js/coroutine/CoroutineFunctionTransformer.kt @@ -118,11 +118,13 @@ class CoroutineFunctionTransformer(private val program: JsProgram, private val f private fun generateCoroutineMetadata(constructorName: JsName): JsStatement { val baseClassRefRef = function.coroutineMetadata!!.baseClassRef.deepCopy() - val metadataObject = JsObjectLiteral(true) - metadataObject.propertyInitializers += JsPropertyInitializer( - JsNameRef("type"), JsNameRef("CLASS", JsNameRef("TYPE", Namer.KOTLIN_NAME))) - metadataObject.propertyInitializers += JsPropertyInitializer(JsNameRef("simpleName"), JsLiteral.NULL) - metadataObject.propertyInitializers += JsPropertyInitializer(JsNameRef("baseClasses"), JsArrayLiteral(listOf(baseClassRefRef))) + val metadataObject = JsObjectLiteral(true).apply { + propertyInitializers += + JsPropertyInitializer(JsNameRef(Namer.METADATA_CLASS_KIND), + JsNameRef(Namer.CLASS_KIND_CLASS, JsNameRef(Namer.CLASS_KIND_ENUM, Namer.KOTLIN_NAME))) + propertyInitializers += JsPropertyInitializer(JsNameRef(Namer.METADATA_SIMPLE_NAME), JsLiteral.NULL) + propertyInitializers += JsPropertyInitializer(JsNameRef(Namer.METADATA_SUPERTYPES), JsArrayLiteral(listOf(baseClassRefRef))) + } return JsAstUtils.assignment(JsNameRef(Namer.METADATA, constructorName.makeRef()), metadataObject).makeStmt() } diff --git a/js/js.libraries/src/js/rtti.js b/js/js.libraries/src/js/rtti.js index fd071d41c4e..d0480ceccbe 100644 --- a/js/js.libraries/src/js/rtti.js +++ b/js/js.libraries/src/js/rtti.js @@ -14,7 +14,7 @@ * limitations under the License. */ -Kotlin.TYPE = { +Kotlin.Kind = { CLASS: "class", INTERFACE: "interface", OBJECT: "object" @@ -99,7 +99,7 @@ Kotlin.isType = function (object, klass) { var constructor = proto != null ? proto.constructor : null; if (constructor != null && "$metadata$" in constructor) { var metadata = constructor.$metadata$; - if (metadata.type === Kotlin.TYPE.OBJECT) { + if (metadata.kind === Kotlin.Kind.OBJECT) { return object === klass; } } @@ -111,7 +111,7 @@ Kotlin.isType = function (object, klass) { return object instanceof klass; } - if (klassMetadata.type === Kotlin.TYPE.INTERFACE && object.constructor != null) { + if (klassMetadata.kind === Kotlin.Kind.INTERFACE && object.constructor != null) { metadata = object.constructor.$metadata$; if (metadata != null) { return isInheritanceFromInterface(metadata, klass); diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/context/Namer.java b/js/js.translator/src/org/jetbrains/kotlin/js/translate/context/Namer.java index c6b0d78e46f..dcb57144a69 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/context/Namer.java +++ b/js/js.translator/src/org/jetbrains/kotlin/js/translate/context/Namer.java @@ -111,6 +111,12 @@ public final class Namer { public static final String LOCAL_MODULE_PREFIX = "$module$"; public static final String METADATA = "$metadata$"; public static final String METADATA_SUPERTYPES = "baseClasses"; + public static final String METADATA_SIMPLE_NAME = "simpleName"; + public static final String METADATA_CLASS_KIND = "kind"; + public static final String CLASS_KIND_ENUM = "Kind"; + public static final String CLASS_KIND_CLASS = "CLASS"; + public static final String CLASS_KIND_INTERFACE = "INTERFACE"; + public static final String CLASS_KIND_OBJECT = "OBJECT"; public static final String OBJECT_INSTANCE_VAR_SUFFIX = "_instance"; public static final String OBJECT_INSTANCE_FUNCTION_SUFFIX = "_getInstance"; diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/declaration/ClassTranslator.kt b/js/js.translator/src/org/jetbrains/kotlin/js/translate/declaration/ClassTranslator.kt index 9c65724bad0..1fc737738e3 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/declaration/ClassTranslator.kt +++ b/js/js.translator/src/org/jetbrains/kotlin/js/translate/declaration/ClassTranslator.kt @@ -171,18 +171,18 @@ class ClassTranslator private constructor( private fun createMetadataRef() = JsNameRef(Namer.METADATA, context().getInnerReference(descriptor)) private fun addMetadataType() { - val kotlinType = JsNameRef("TYPE", Namer.KOTLIN_NAME) + val kotlinType = JsNameRef(Namer.CLASS_KIND_ENUM, Namer.KOTLIN_NAME) val typeRef = when { - DescriptorUtils.isInterface(descriptor) -> JsNameRef("INTERFACE", kotlinType) - DescriptorUtils.isObject(descriptor) -> JsNameRef("OBJECT", kotlinType) - else -> JsNameRef("CLASS", kotlinType) + DescriptorUtils.isInterface(descriptor) -> JsNameRef(Namer.CLASS_KIND_INTERFACE, kotlinType) + DescriptorUtils.isObject(descriptor) -> JsNameRef(Namer.CLASS_KIND_OBJECT, kotlinType) + else -> JsNameRef(Namer.CLASS_KIND_CLASS, kotlinType) } - metadataLiteral.propertyInitializers += JsPropertyInitializer(JsNameRef("type"), typeRef) + metadataLiteral.propertyInitializers += JsPropertyInitializer(JsNameRef(Namer.METADATA_CLASS_KIND), typeRef) val simpleName = descriptor.name if (!simpleName.isSpecial) { - val simpleNameProp = JsPropertyInitializer(JsNameRef("simpleName"), program().getStringLiteral(simpleName.identifier)) + val simpleNameProp = JsPropertyInitializer(JsNameRef(Namer.METADATA_SIMPLE_NAME), program().getStringLiteral(simpleName.identifier)) metadataLiteral.propertyInitializers += simpleNameProp } }