/* * Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ package kotlin.js // TODO: Remove this file after bootstrap internal fun setMetadataFor( ctor: Ctor, name: String?, metadataConstructor: (name: String?, defaultConstructor: dynamic, associatedObjectKey: Number?, associatedObjects: dynamic, suspendArity: Array?) -> Metadata, parent: Ctor?, interfaces: Array?, defaultConstructor: dynamic, associatedObjectKey: Number?, associatedObjects: dynamic, suspendArity: Array? ) { if (parent != null) { js(""" ctor.prototype = Object.create(parent.prototype) ctor.prototype.constructor = ctor; """) } val metadata = metadataConstructor(name, defaultConstructor, associatedObjectKey, associatedObjects, suspendArity ?: js("[]")) ctor.`$metadata$` = metadata if (interfaces != null) { val receiver = if (metadata.iid != null) ctor else ctor.prototype receiver.`$imask$` = implement(interfaces) } } internal fun interfaceMeta( name: String?, defaultConstructor: dynamic, associatedObjectKey: Number?, associatedObjects: dynamic, suspendArity: Array? ): Metadata { return createMetadata(METADATA_KIND_INTERFACE, name, defaultConstructor, associatedObjectKey, associatedObjects, suspendArity) } internal fun objectMeta( name: String?, defaultConstructor: dynamic, associatedObjectKey: Number?, associatedObjects: dynamic, suspendArity: Array? ): Metadata { return createMetadata(METADATA_KIND_OBJECT, name, defaultConstructor, associatedObjectKey, associatedObjects, suspendArity) } internal fun classMeta( name: String?, defaultConstructor: dynamic, associatedObjectKey: Number?, associatedObjects: dynamic, suspendArity: Array? ): Metadata { return createMetadata(METADATA_KIND_CLASS, name, defaultConstructor, associatedObjectKey, associatedObjects, suspendArity) }