6633a9edc0
If an accessor is not available at runtime we fall back to the property access. This is useful in cases when JS objects are casted to Kotlin classes implicitly. This pattern did work in the old BE, which lead to a significant amount of code which doesn't work anymore.
41 lines
1.5 KiB
Kotlin
41 lines
1.5 KiB
Kotlin
/*
|
|
* Copyright 2010-2018 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
|
|
|
|
@PublishedApi
|
|
internal fun <T : Enum<T>> enumValuesIntrinsic(): Array<T> =
|
|
throw IllegalStateException("Should be replaced by compiler")
|
|
|
|
@PublishedApi
|
|
internal fun <T : Enum<T>> enumValueOfIntrinsic(@Suppress("UNUSED_PARAMETER") name: String): T =
|
|
throw IllegalStateException("Should be replaced by compiler")
|
|
|
|
@PublishedApi
|
|
internal fun safePropertyGet(self: dynamic, getterName: String, propName: String): dynamic {
|
|
val getter = self[getterName]
|
|
return if (getter != null) getter.call(self) else self[propName]
|
|
}
|
|
|
|
@PublishedApi
|
|
internal fun safePropertySet(self: dynamic, setterName: String, propName: String, value: dynamic) {
|
|
val setter = self[setterName]
|
|
if (setter != null) setter.call(self, value) else self[propName] = value
|
|
}
|
|
|
|
/**
|
|
* Implements annotated function in JavaScript.
|
|
* [code] string must contain JS expression that evaluates to JS function with signature that matches annotated kotlin function
|
|
*
|
|
* For example, a function that adds two Doubles:
|
|
*
|
|
* @JsFun("(x, y) => x + y")
|
|
* fun jsAdd(x: Double, y: Double): Double =
|
|
* error("...")
|
|
*
|
|
* Code gets inserted as is without syntax verification.
|
|
*/
|
|
@Target(AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY_GETTER, AnnotationTarget.PROPERTY_SETTER)
|
|
internal annotation class JsFun(val code: String) |