From c78d0704558bc7e2c3be07ce15c4d31318ae4f44 Mon Sep 17 00:00:00 2001 From: Vasily Levchenko Date: Fri, 17 Aug 2018 11:06:38 +0300 Subject: [PATCH] [compiler][update] 1.3-M2-eap-33 / build: 1.3-M1-eap-77 --- Interop/Indexer/build.gradle | 6 ++ Interop/Runtime/build.gradle | 6 ++ Interop/StubGenerator/build.gradle | 7 ++ backend.native/build.gradle | 2 +- .../cli/bc/K2NativeCompilerArguments.kt | 1 + .../konan/EnumSpecialDescriptorsFactory.kt | 1 - .../KonanDescriptorSerializer.kt | 74 ++++++++++--------- backend.native/tests/build.gradle | 2 +- buildSrc/build.gradle | 9 +++ buildSrc/plugins/build.gradle | 3 + buildSrc/shared/build.gradle | 7 ++ extracted/konan.descriptors/build.gradle | 6 ++ .../konan.metadata.serializer/build.gradle | 6 ++ extracted/konan.metadata/build.gradle | 6 ++ gradle.properties | 9 ++- gradle/kotlinGradlePlugin.gradle | 10 ++- klib/build.gradle | 6 ++ performance/build.gradle | 2 +- platformLibs/build.gradle | 2 +- .../coroutines/SafeContinuationNative.kt | 36 +++++++++ .../coroutines/intrinsics/IntrinsicsNative.kt | 37 ++++++++++ .../src/main/kotlin/kotlin/random/Random.kt | 21 ++++-- .../main/kotlin/kotlin/text/StringBuilder.kt | 8 ++ samples/androidNativeActivity/build.gradle | 3 + samples/build.gradle | 3 + samples/calculator/ios/build.gradle | 1 + samples/curl/build.gradle | 3 + samples/tensorflow/build.gradle | 5 +- samples/torch/build.gradle | 5 +- shared/build.gradle | 2 +- shared/buildSrc/build.gradle | 3 + .../kotlin-native-gradle-plugin/build.gradle | 3 +- .../test/MultiplatformSpecification.groovy | 7 ++ utilities/build.gradle | 6 ++ 34 files changed, 253 insertions(+), 55 deletions(-) create mode 100644 runtime/src/main/kotlin/kotlin/coroutines/SafeContinuationNative.kt create mode 100644 runtime/src/main/kotlin/kotlin/coroutines/intrinsics/IntrinsicsNative.kt diff --git a/Interop/Indexer/build.gradle b/Interop/Indexer/build.gradle index 39a033eb830..fca3a94c5ad 100644 --- a/Interop/Indexer/build.gradle +++ b/Interop/Indexer/build.gradle @@ -108,6 +108,12 @@ sourceSets { } } +repositories { + maven { + url buildKotlinCompilerRepo + } +} + dependencies { compile "org.jetbrains.kotlin:kotlin-stdlib:$buildKotlinVersion" compile project(':Interop:Runtime') diff --git a/Interop/Runtime/build.gradle b/Interop/Runtime/build.gradle index 7a2a5cf4e38..4a6446108f3 100644 --- a/Interop/Runtime/build.gradle +++ b/Interop/Runtime/build.gradle @@ -59,6 +59,12 @@ model { } } +repositories { + maven { + url buildKotlinCompilerRepo + } +} + dependencies { compile "org.jetbrains.kotlin:kotlin-stdlib:$buildKotlinVersion" compile "org.jetbrains.kotlin:kotlin-reflect:$buildKotlinVersion" diff --git a/Interop/StubGenerator/build.gradle b/Interop/StubGenerator/build.gradle index 83b9967133e..c03109ffe79 100644 --- a/Interop/StubGenerator/build.gradle +++ b/Interop/StubGenerator/build.gradle @@ -23,6 +23,13 @@ apply plugin: 'application' mainClassName = "org.jetbrains.kotlin.native.interop.gen.jvm.MainKt" +repositories { + maven { + url buildKotlinCompilerRepo + } +} + + dependencies { compile "org.jetbrains.kotlin:kotlin-stdlib:$buildKotlinVersion" compile "org.jetbrains.kotlin:kotlin-compiler:$buildKotlinVersion" diff --git a/backend.native/build.gradle b/backend.native/build.gradle index e4ff0341ea3..9367a31d87a 100644 --- a/backend.native/build.gradle +++ b/backend.native/build.gradle @@ -32,7 +32,7 @@ apply plugin: org.jetbrains.kotlin.NativeInteropPlugin // (gets applied to this project and all its subprojects) allprojects { repositories { - maven { url kotlinCompilerRepo } + maven { url buildKotlinCompilerRepo } } } diff --git a/backend.native/cli.bc/src/org/jetbrains/kotlin/cli/bc/K2NativeCompilerArguments.kt b/backend.native/cli.bc/src/org/jetbrains/kotlin/cli/bc/K2NativeCompilerArguments.kt index bc364e0e146..fece1508f7b 100644 --- a/backend.native/cli.bc/src/org/jetbrains/kotlin/cli/bc/K2NativeCompilerArguments.kt +++ b/backend.native/cli.bc/src/org/jetbrains/kotlin/cli/bc/K2NativeCompilerArguments.kt @@ -152,6 +152,7 @@ class K2NativeCompilerArguments : CommonCompilerArguments() { override fun configureLanguageFeatures(collector: MessageCollector) = super.configureLanguageFeatures(collector).also { it[LanguageFeature.InlineClasses] = LanguageFeature.State.ENABLED // TODO: remove after updating to 1.3. + it[LanguageFeature.ReleaseCoroutines] = LanguageFeature.State.DISABLED } } diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/EnumSpecialDescriptorsFactory.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/EnumSpecialDescriptorsFactory.kt index a2c998b6ed7..65f5a888db2 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/EnumSpecialDescriptorsFactory.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/EnumSpecialDescriptorsFactory.kt @@ -19,7 +19,6 @@ package org.jetbrains.kotlin.backend.konan import org.jetbrains.kotlin.backend.common.ir.addSimpleDelegatingConstructor import org.jetbrains.kotlin.backend.konan.descriptors.synthesizedName import org.jetbrains.kotlin.backend.konan.descriptors.enumEntries -import org.jetbrains.kotlin.backend.konan.irasdescriptors.typeWith import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.descriptors.annotations.Annotations import org.jetbrains.kotlin.descriptors.impl.* diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/serialization/KonanDescriptorSerializer.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/serialization/KonanDescriptorSerializer.kt index 37bbf2bcac5..d5e7c34dd4d 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/serialization/KonanDescriptorSerializer.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/serialization/KonanDescriptorSerializer.kt @@ -27,6 +27,7 @@ import org.jetbrains.kotlin.builtins.transformSuspendFunctionToRuntimeFunctionTy import org.jetbrains.kotlin.config.LanguageFeature import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.descriptors.annotations.Annotated +import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor import org.jetbrains.kotlin.metadata.ProtoBuf import org.jetbrains.kotlin.metadata.deserialization.Flags import org.jetbrains.kotlin.metadata.deserialization.VersionRequirement @@ -160,9 +161,9 @@ class KonanDescriptorSerializer private constructor( builder.typeTable = typeTableProto } - val requirement = serializeVersionRequirement(classDescriptor) + val requirement = serializeVersionRequirements(classDescriptor) if (requirement != null) { - builder.versionRequirement = requirement + builder.addAllVersionRequirement(requirement) } val versionRequirementTableProto = versionRequirementTable.serialize() @@ -254,12 +255,12 @@ class KonanDescriptorSerializer private constructor( } } - val requirement = serializeVersionRequirement(descriptor) + val requirement = serializeVersionRequirements(descriptor) if (requirement != null) { - builder.versionRequirement = requirement + builder.addAllVersionRequirement(requirement) } else if (descriptor.isSuspendOrHasSuspendTypesInSignature()) { - builder.versionRequirement = writeVersionRequirement(LanguageFeature.Coroutines) + builder.addVersionRequirement(writeVersionRequirementDependingOnCoroutinesVersion()) } extension.serializeProperty(descriptor, builder, versionRequirementTable) @@ -337,12 +338,12 @@ class KonanDescriptorSerializer private constructor( } } - val requirement = serializeVersionRequirement(descriptor) + val requirement = serializeVersionRequirements(descriptor) if (requirement != null) { - builder.versionRequirement = requirement + builder.addAllVersionRequirement(requirement) } else if (descriptor.isSuspendOrHasSuspendTypesInSignature()) { - builder.versionRequirement = writeVersionRequirement(LanguageFeature.Coroutines) + builder.addVersionRequirement(writeVersionRequirementDependingOnCoroutinesVersion()) } // TODO: K/N & Contracts??? @@ -375,12 +376,12 @@ class KonanDescriptorSerializer private constructor( builder.addValueParameter(local.valueParameter(valueParameterDescriptor)) } - val requirement = serializeVersionRequirement(descriptor) + val requirement = serializeVersionRequirements(descriptor) if (requirement != null) { - builder.versionRequirement = requirement + builder.addAllVersionRequirement(requirement) } else if (descriptor.isSuspendOrHasSuspendTypesInSignature()) { - builder.versionRequirement = writeVersionRequirement(LanguageFeature.Coroutines) + builder.addVersionRequirement(writeVersionRequirementDependingOnCoroutinesVersion()) } extension.serializeConstructor(descriptor, builder) @@ -435,9 +436,9 @@ class KonanDescriptorSerializer private constructor( builder.setExpandedType(local.type(expandedType)) } - val requirement = serializeVersionRequirement(descriptor) + val requirement = serializeVersionRequirements(descriptor) if (requirement != null) { - builder.versionRequirement = requirement + builder.addVersionRequirement(writeVersionRequirementDependingOnCoroutinesVersion()) } builder.addAllAnnotation(descriptor.annotations.map { extension.annotationSerializer.serializeAnnotation(it) }) @@ -521,7 +522,7 @@ class KonanDescriptorSerializer private constructor( } /* Konan needs public modifier */ - public fun typeId(type: KotlinType) = typeTable[type(type)] + fun typeId(type: KotlinType) = typeTable[type(type)] internal fun type(type: KotlinType): ProtoBuf.Type.Builder { val builder = ProtoBuf.Type.newBuilder() @@ -674,9 +675,29 @@ class KonanDescriptorSerializer private constructor( return versionRequirementTable[requirement] } - // Returns index into versionRequirementTable, or null if there's no @RequireKotlin on the descriptor - private fun serializeVersionRequirement(descriptor: DeclarationDescriptor): Int? { - val annotation = descriptor.annotations.findAnnotation(RequireKotlinNames.FQ_NAME) ?: return null + private fun getClassifierId(descriptor: ClassifierDescriptorWithTypeParameters): Int = + stringTable.getFqNameIndex(descriptor) + + private fun getSimpleNameIndex(name: Name): Int = + stringTable.getStringIndex(name.asString()) + + private fun getTypeParameterId(descriptor: TypeParameterDescriptor): Int = + typeParameters.intern(descriptor) + + private fun getAccessorFlags(accessor: PropertyAccessorDescriptor): Int = Flags.getAccessorFlags( + hasAnnotations(accessor), + ProtoEnumFlags.visibility(normalizeVisibility(accessor)), + ProtoEnumFlags.modality(accessor.modality), + !accessor.isDefault, + accessor.isExternal, + accessor.isInline + ) + private fun serializeVersionRequirements(descriptor: DeclarationDescriptor): List = + descriptor.annotations + .filter { it.fqName == RequireKotlinNames.FQ_NAME } + .mapNotNull(::serializeVersionRequirementFromRequireKotlin) + + private fun serializeVersionRequirementFromRequireKotlin(annotation: AnnotationDescriptor): Int? { val args = annotation.allValueArguments val versionString = (args[RequireKotlinNames.VERSION] as? StringValue)?.value ?: return null @@ -721,23 +742,8 @@ class KonanDescriptorSerializer private constructor( return versionRequirementTable[proto] } - private fun getClassifierId(descriptor: ClassifierDescriptorWithTypeParameters): Int = - stringTable.getFqNameIndex(descriptor) - - private fun getSimpleNameIndex(name: Name): Int = - stringTable.getStringIndex(name.asString()) - - private fun getTypeParameterId(descriptor: TypeParameterDescriptor): Int = - typeParameters.intern(descriptor) - - private fun getAccessorFlags(accessor: PropertyAccessorDescriptor): Int = Flags.getAccessorFlags( - hasAnnotations(accessor), - ProtoEnumFlags.visibility(normalizeVisibility(accessor)), - ProtoEnumFlags.modality(accessor.modality), - !accessor.isDefault, - accessor.isExternal, - accessor.isInline - ) + private fun writeVersionRequirementDependingOnCoroutinesVersion(): Int = + writeVersionRequirement(if (this.extension.releaseCoroutines()) LanguageFeature.ReleaseCoroutines else LanguageFeature.Coroutines) companion object { @JvmStatic diff --git a/backend.native/tests/build.gradle b/backend.native/tests/build.gradle index edc0239f20d..9a57f0fe36e 100644 --- a/backend.native/tests/build.gradle +++ b/backend.native/tests/build.gradle @@ -24,7 +24,7 @@ buildscript { url 'https://cache-redirector.jetbrains.com/maven-central' } maven { - url kotlinCompilerRepo + url buildKotlinCompilerRepo } } diff --git a/buildSrc/build.gradle b/buildSrc/build.gradle index 54b9a18a581..9876b352d60 100644 --- a/buildSrc/build.gradle +++ b/buildSrc/build.gradle @@ -14,8 +14,17 @@ * limitations under the License. */ +buildscript { + ext.rootBuildDirectory = "$rootDir/.." + apply from: "$rootBuildDirectory/gradle/loadRootProperties.gradle" + apply from: "$rootBuildDirectory/gradle/kotlinGradlePlugin.gradle" +} + allprojects { repositories { + maven { + url buildKotlinCompilerRepo + } maven { url 'https://cache-redirector.jetbrains.com/maven-central' } diff --git a/buildSrc/plugins/build.gradle b/buildSrc/plugins/build.gradle index 4d3167c1073..8624a9bfd20 100644 --- a/buildSrc/plugins/build.gradle +++ b/buildSrc/plugins/build.gradle @@ -25,6 +25,9 @@ buildscript { apply plugin: 'kotlin' repositories { + maven { + url buildKotlinCompilerRepo + } maven { url 'https://cache-redirector.jetbrains.com/maven-central' } diff --git a/buildSrc/shared/build.gradle b/buildSrc/shared/build.gradle index 1c91b22068c..47fe9338f1d 100644 --- a/buildSrc/shared/build.gradle +++ b/buildSrc/shared/build.gradle @@ -19,6 +19,8 @@ buildscript { gradleProperties = new Properties() gradleProperties.load(new FileInputStream("$projectDir/../../gradle.properties")) buildKotlinVersion = gradleProperties."buildKotlinVersion" + buildKotlinCompilerRepo = gradleProperties."buildKotlinCompilerRepo" + } apply from: '../../gradle/kotlinGradlePlugin.gradle' @@ -29,6 +31,11 @@ apply plugin: 'kotlin' // We reuse the source code from the Project in buildSrc. sourceSets.main.kotlin.srcDirs = ["$projectDir/../../shared/src/main/kotlin"] +repositories { + maven { + url buildKotlinCompilerRepo + } +} dependencies { compile "org.jetbrains.kotlin:kotlin-stdlib:$buildKotlinVersion" } diff --git a/extracted/konan.descriptors/build.gradle b/extracted/konan.descriptors/build.gradle index 79ab93707f7..da31815d4ab 100644 --- a/extracted/konan.descriptors/build.gradle +++ b/extracted/konan.descriptors/build.gradle @@ -27,6 +27,12 @@ jar { archiveName = "${project.name}.jar" } +repositories { + maven { + url buildKotlinCompilerRepo + } +} + dependencies { compile "org.jetbrains.kotlin:kotlin-stdlib:$buildKotlinVersion" compile "org.jetbrains.kotlin:kotlin-native-shared:$konanVersion" diff --git a/extracted/konan.metadata.serializer/build.gradle b/extracted/konan.metadata.serializer/build.gradle index 39c6f022f94..578969ddeaa 100644 --- a/extracted/konan.metadata.serializer/build.gradle +++ b/extracted/konan.metadata.serializer/build.gradle @@ -27,6 +27,12 @@ jar { archiveName = "${project.name}.jar" } +repositories { + maven { + url buildKotlinCompilerRepo + } +} + dependencies { compile "org.jetbrains.kotlin:konan.descriptors:$konanVersion" compile "org.jetbrains.kotlin:konan.metadata:$konanVersion" diff --git a/extracted/konan.metadata/build.gradle b/extracted/konan.metadata/build.gradle index 6c4e8402ac6..e9f59969141 100644 --- a/extracted/konan.metadata/build.gradle +++ b/extracted/konan.metadata/build.gradle @@ -37,6 +37,12 @@ jar { archiveName = "${project.name}.jar" } +repositories { + maven { + url buildKotlinCompilerRepo + } +} + dependencies { compile "org.jetbrains.kotlin:kotlin-compiler:${kotlinVersion}" compile "com.google.protobuf:protobuf-java:${protobufVersion}" diff --git a/gradle.properties b/gradle.properties index 7e85a9fa3a5..7ca168fd005 100644 --- a/gradle.properties +++ b/gradle.properties @@ -15,11 +15,12 @@ # # A version of the Kotlin "toolchain" (compiler, runtime, stdlib etc) used by the build script. -buildKotlinVersion=1.2.50 +buildKotlinVersion=1.3-M1-eap-77 +buildKotlinCompilerRepo=https://teamcity.jetbrains.com/guestAuth/app/rest/builds/buildType:(id:Kotlin_13M1_Compiler),number:1.3-M1-eap-77,branch:default:any/artifacts/content/maven/ remoteRoot=konan_tests -kotlinCompilerRepo=https://teamcity.jetbrains.com/guestAuth/app/rest/builds/buildType:(id:Kotlin_dev_CompilerAllPlugins),number:1.2.70-dev-1218,tag:kotlin-native,pinned:true/artifacts/content/maven -kotlinVersion=1.2.70-dev-1218 +testDataVersion=1226829:id +kotlinCompilerRepo=https://teamcity.jetbrains.com/guestAuth/app/rest/builds/buildType:(id:Kotlin_13M2_CompilerAllPlugins),number:1.3-M2-eap-33,tag:kotlin-native,pinned:true/artifacts/content/maven +kotlinVersion=1.3-M2-eap-33 testKotlinVersion=1.2.70-dev-1327 konanVersion=0.9 org.gradle.jvmargs='-Dfile.encoding=UTF-8' - diff --git a/gradle/kotlinGradlePlugin.gradle b/gradle/kotlinGradlePlugin.gradle index 0877679be69..8f239670e82 100644 --- a/gradle/kotlinGradlePlugin.gradle +++ b/gradle/kotlinGradlePlugin.gradle @@ -2,9 +2,17 @@ if (!hasProperty('buildKotlinVersion')) { throw new GradleException('Please ensure the "buildKotlinVersion" property is defined before applying this script.') } +if (!hasProperty('buildKotlinCompilerRepo')) { + throw new GradleException('Please ensure the "buildKotlinCompilerRepo" property is defined before applying this script.') +} + project.buildscript.repositories { + maven { - url = 'https://cache-redirector.jetbrains.com/maven-central' + url buildKotlinCompilerRepo + } + maven { + url 'https://cache-redirector.jetbrains.com/maven-central' } } diff --git a/klib/build.gradle b/klib/build.gradle index 970cd4d1aa6..a686cc5064d 100644 --- a/klib/build.gradle +++ b/klib/build.gradle @@ -46,6 +46,12 @@ konanArtifacts { } } +repositories { + maven { + url buildKotlinCompilerRepo + } +} + dependencies { compile "org.jetbrains.kotlin:kotlin-stdlib:$buildKotlinVersion" compile project(path: ':backend.native', configuration: 'cli_bc') diff --git a/performance/build.gradle b/performance/build.gradle index c8ed393222b..601ea4e4ddf 100644 --- a/performance/build.gradle +++ b/performance/build.gradle @@ -4,7 +4,7 @@ buildscript { url 'https://cache-redirector.jetbrains.com/maven-central' } maven { - url kotlinCompilerRepo + url buildKotlinCompilerRepo } } diff --git a/platformLibs/build.gradle b/platformLibs/build.gradle index 1b4f5e0211b..381fdb52076 100644 --- a/platformLibs/build.gradle +++ b/platformLibs/build.gradle @@ -13,7 +13,7 @@ buildscript { url 'https://cache-redirector.jetbrains.com/maven-central' } maven { - url kotlinCompilerRepo + url buildKotlinCompilerRepo } } diff --git a/runtime/src/main/kotlin/kotlin/coroutines/SafeContinuationNative.kt b/runtime/src/main/kotlin/kotlin/coroutines/SafeContinuationNative.kt new file mode 100644 index 00000000000..e35bcac4b1e --- /dev/null +++ b/runtime/src/main/kotlin/kotlin/coroutines/SafeContinuationNative.kt @@ -0,0 +1,36 @@ +/* + * Copyright 2010-2018 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package kotlin.coroutines + +// TODO: implement them right. +//@PublishedApi +@SinceKotlin("1.3") +/* actual */ class SafeContinuation +/* actual */ constructor( + private val delegate: Continuation, + initialResult: Any? +) : Continuation { + + override val context: CoroutineContext + get() = TODO("unimplemented") + /* actual */ constructor(delegate: Continuation) : this(delegate, /*UNDECIDED*/ null) + + @PublishedApi + internal fun getOrThrow(): Any? = TODO("unimplemented") + + override fun resumeWith(result: SuccessOrFailure):Unit = TODO("unimplemented") +} \ No newline at end of file diff --git a/runtime/src/main/kotlin/kotlin/coroutines/intrinsics/IntrinsicsNative.kt b/runtime/src/main/kotlin/kotlin/coroutines/intrinsics/IntrinsicsNative.kt new file mode 100644 index 00000000000..e6793b8f4c2 --- /dev/null +++ b/runtime/src/main/kotlin/kotlin/coroutines/intrinsics/IntrinsicsNative.kt @@ -0,0 +1,37 @@ +/* + * Copyright 2010-2018 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package kotlin.coroutines.intrinsics + +import kotlin.coroutines.* +// TODO: implement them right. +@SinceKotlin("1.3") +public /* actual */ fun (suspend () -> T).createCoroutineUnintercepted( + completion: Continuation +): Continuation { + TODO("Unimplemented") +} + +@SinceKotlin("1.3") +public /* actual */ fun (suspend R.() -> T).createCoroutineUnintercepted( + receiver: R, + completion: Continuation +): Continuation { + TODO("Unimplemented") +} + +@SinceKotlin("1.3") +public /* actual */ fun Continuation.intercepted(): Continuation = TODO("unimplemented") diff --git a/runtime/src/main/kotlin/kotlin/random/Random.kt b/runtime/src/main/kotlin/kotlin/random/Random.kt index 7201eb9e5ed..2520a6a6b92 100644 --- a/runtime/src/main/kotlin/kotlin/random/Random.kt +++ b/runtime/src/main/kotlin/kotlin/random/Random.kt @@ -18,12 +18,7 @@ package kotlin.random import kotlin.native.worker.AtomicLong import kotlin.system.getTimeNanos -abstract class Random { - abstract fun nextInt(): Int - abstract fun nextInt(bound: Int): Int - - abstract fun nextLong(): Long - +abstract class NativeRandom { /** * A default pseudo-random linear congruential generator. */ @@ -74,5 +69,17 @@ abstract class Random { * Returns a pseudo-random Long number. */ override fun nextLong(): Long = (nextInt().toLong() shl 32) + nextInt().toLong() + + override fun nextBits(bitCount: Int): Int = TODO("unimplemented") } -} \ No newline at end of file +} + + +internal actual fun defaultPlatformRandom(): Random = NativeRandom +internal actual fun fastLog2(value: Int): Int = TODO("unimplemented") +internal actual fun doubleFromParts(hi26: Int, low27: Int): Double = TODO("unimplemented") + +// TODO: common stdlib Random hasn't got seed, this is workaround for running K/N tests. +var Random.seed:Long + get() = NativeRandom.seed + set(value) { NativeRandom.seed = value } \ No newline at end of file diff --git a/runtime/src/main/kotlin/kotlin/text/StringBuilder.kt b/runtime/src/main/kotlin/kotlin/text/StringBuilder.kt index 89d3a62d7a2..d0f1f7fe59a 100644 --- a/runtime/src/main/kotlin/kotlin/text/StringBuilder.kt +++ b/runtime/src/main/kotlin/kotlin/text/StringBuilder.kt @@ -24,6 +24,14 @@ fun fromUtf8Array(array: ByteArray, start: Int, size: Int) = array.stringFromUtf @Deprecated("Use String.toUtf8()", ReplaceWith("string.toUtf8(start, end)")) fun toUtf8Array(string: String, start: Int, size: Int) : ByteArray = string.toUtf8(start, size) +/** + * Clears the content of this string builder making it empty. + * + * @sample samples.text.Strings.clearStringBuilder + */ +@SinceKotlin("1.3") +public actual fun StringBuilder.clear(): StringBuilder = apply { setLength(0) } + /** * Converts an UTF-8 array into a [String]. Replaces invalid input sequences with a default character. */ diff --git a/samples/androidNativeActivity/build.gradle b/samples/androidNativeActivity/build.gradle index af7bde516eb..85c150e474c 100644 --- a/samples/androidNativeActivity/build.gradle +++ b/samples/androidNativeActivity/build.gradle @@ -6,6 +6,9 @@ buildscript { maven { url "https://dl.bintray.com/jetbrains/kotlin-native-dependencies" } + maven { + url "https://teamcity.jetbrains.com/guestAuth/app/rest/builds/buildType:(id:Kotlin_13M1_Compiler),number:1.3-M1-eap-77,branch:default:any/artifacts/content/maven/" + } } dependencies { classpath "org.jetbrains.kotlin:kotlin-native-gradle-plugin:${project.property('konan.plugin.version')}" diff --git a/samples/build.gradle b/samples/build.gradle index 75330ee4a8a..f4ff483ec79 100644 --- a/samples/build.gradle +++ b/samples/build.gradle @@ -7,6 +7,9 @@ subprojects { maven { url "https://dl.bintray.com/jetbrains/kotlin-native-dependencies" } + maven { + url "https://teamcity.jetbrains.com/guestAuth/app/rest/builds/buildType:(id:Kotlin_13M1_Compiler),number:1.3-M1-eap-77,branch:default:any/artifacts/content/maven/" + } } dependencies { diff --git a/samples/calculator/ios/build.gradle b/samples/calculator/ios/build.gradle index c2b151aa897..1c2d8b3b01e 100644 --- a/samples/calculator/ios/build.gradle +++ b/samples/calculator/ios/build.gradle @@ -2,6 +2,7 @@ buildscript { repositories { mavenCentral() maven { url "https://dl.bintray.com/jetbrains/kotlin-native-dependencies" } + maven { url "https://teamcity.jetbrains.com/guestAuth/app/rest/builds/buildType:(id:Kotlin_13M1_Compiler),number:1.3-M1-eap-77,branch:default:any/artifacts/content/maven/" } } dependencies { diff --git a/samples/curl/build.gradle b/samples/curl/build.gradle index b87dea00306..73df93f247c 100644 --- a/samples/curl/build.gradle +++ b/samples/curl/build.gradle @@ -6,6 +6,9 @@ buildscript { maven { url "https://dl.bintray.com/jetbrains/kotlin-native-dependencies" } + maven { + url "https://teamcity.jetbrains.com/guestAuth/app/rest/builds/buildType:(id:Kotlin_13M1_Compiler),number:1.3-M1-eap-77,branch:default:any/artifacts/content/maven/" + } } dependencies { diff --git a/samples/tensorflow/build.gradle b/samples/tensorflow/build.gradle index 08f9487c27f..68d9dc18ae1 100644 --- a/samples/tensorflow/build.gradle +++ b/samples/tensorflow/build.gradle @@ -6,6 +6,9 @@ buildscript { maven { url "https://dl.bintray.com/jetbrains/kotlin-native-dependencies" } + maven { + url "https://teamcity.jetbrains.com/guestAuth/app/rest/builds/buildType:(id:Kotlin_13M1_Compiler),number:1.3-M1-eap-77,branch:default:any/artifacts/content/maven/" + } } dependencies { @@ -47,4 +50,4 @@ task warning { println "Note: You may need to specify LD_LIBRARY_PATH or DYLD_LIBRARY_PATH env variables to $tensorflowHome/lib if the TensorFlow dynamic library cannot be found." } -} \ No newline at end of file +} diff --git a/samples/torch/build.gradle b/samples/torch/build.gradle index 309eadbd8a9..bc853cd59f7 100644 --- a/samples/torch/build.gradle +++ b/samples/torch/build.gradle @@ -6,6 +6,9 @@ buildscript { maven { url "https://dl.bintray.com/jetbrains/kotlin-native-dependencies" } + maven { + url "https://teamcity.jetbrains.com/guestAuth/app/rest/builds/buildType:(id:Kotlin_13M1_Compiler),number:1.3-M1-eap-77,branch:default:any/artifacts/content/maven/" + } } dependencies { @@ -47,4 +50,4 @@ task warning { println "Note: You may need to specify LD_LIBRARY_PATH or DYLD_LIBRARY_PATH env variables to $torchHome/lib if the ATen dynamic library cannot be found." } -} \ No newline at end of file +} diff --git a/shared/build.gradle b/shared/build.gradle index be8c25f7a0e..2085f650cda 100644 --- a/shared/build.gradle +++ b/shared/build.gradle @@ -30,7 +30,7 @@ version = konanVersion repositories { mavenCentral() maven { - url kotlinCompilerRepo + url buildKotlinCompilerRepo } } diff --git a/shared/buildSrc/build.gradle b/shared/buildSrc/build.gradle index 1ef7f192ef7..322e6303591 100644 --- a/shared/buildSrc/build.gradle +++ b/shared/buildSrc/build.gradle @@ -24,6 +24,9 @@ buildscript { apply plugin: 'kotlin' repositories { + maven { + url buildKotlinCompilerRepo + } mavenCentral() } diff --git a/tools/kotlin-native-gradle-plugin/build.gradle b/tools/kotlin-native-gradle-plugin/build.gradle index a3d7544cf74..66b1ebef670 100644 --- a/tools/kotlin-native-gradle-plugin/build.gradle +++ b/tools/kotlin-native-gradle-plugin/build.gradle @@ -57,7 +57,7 @@ version = KonanVersion.Companion.CURRENT.toString() repositories { mavenCentral() maven { - url kotlinCompilerRepo + url buildKotlinCompilerRepo } } @@ -104,6 +104,7 @@ pluginUnderTestMetadata { test { systemProperty("kotlin.version", buildKotlinVersion) + systemProperty("kotlin.repo", buildKotlinCompilerRepo) if (project.hasProperty("konan.home")) { systemProperty("konan.home", project.property("konan.home")) } else { diff --git a/tools/kotlin-native-gradle-plugin/src/test/groovy/org/jetbrains/kotlin/gradle/plugin/test/MultiplatformSpecification.groovy b/tools/kotlin-native-gradle-plugin/src/test/groovy/org/jetbrains/kotlin/gradle/plugin/test/MultiplatformSpecification.groovy index 7bfe92a715f..e7233a9b990 100644 --- a/tools/kotlin-native-gradle-plugin/src/test/groovy/org/jetbrains/kotlin/gradle/plugin/test/MultiplatformSpecification.groovy +++ b/tools/kotlin-native-gradle-plugin/src/test/groovy/org/jetbrains/kotlin/gradle/plugin/test/MultiplatformSpecification.groovy @@ -22,9 +22,13 @@ import java.nio.file.Paths class MultiplatformSpecification extends BaseKonanSpecification { public static final String KOTLIN_VERSION = System.getProperty("kotlin.version") + public static final String KOTLIN_REPO = System.getProperty("kotlin.repo") public static final String DEFAULT_COMMON_BUILD_FILE_CONTENT = """\ buildscript { repositories { + maven { + url = '$KOTLIN_REPO' + } maven { url = 'https://cache-redirector.jetbrains.com/jcenter' } @@ -37,6 +41,9 @@ class MultiplatformSpecification extends BaseKonanSpecification { apply plugin: 'kotlin-platform-common' repositories { + maven { + url = '$KOTLIN_REPO' + } maven { url = 'https://cache-redirector.jetbrains.com/jcenter' } diff --git a/utilities/build.gradle b/utilities/build.gradle index 755721ac1e8..6b48679b183 100644 --- a/utilities/build.gradle +++ b/utilities/build.gradle @@ -20,6 +20,12 @@ buildscript { apply plugin: 'kotlin' +repositories { + maven { + url buildKotlinCompilerRepo + } +} + dependencies { compile "org.jetbrains.kotlin:kotlin-stdlib:$buildKotlinVersion" compile project(':backend.native')