Add allowKotlinPackage AnalysisFlag

This flag is used internally by EffectSystem as a sign of compiling
stdlib. If this flag is present, then EffectSystem will read contracts
on functions and serialize them into metadata even if corresponding
LanguageFeatures are turned off. This is done solely for building
1.2-runtime with contracts in it without the need to turn on
LanguageFeatures manually.

======
This commit finishes a first series of commits related to effect
system. After it, compiler is ready to work with contracts, but it is
impossible to actually annotate anything, because there are no
contracts DSL in stdlib yet.
This commit is contained in:
Dmitry Savvinov
2017-10-03 15:02:54 +03:00
parent bdbb161cfa
commit eae9923dbe
4 changed files with 10 additions and 2 deletions
@@ -110,6 +110,7 @@ abstract class CommonCompilerArguments : CommonToolArguments() {
return HashMap<AnalysisFlag<*>, Any>().apply {
put(AnalysisFlag.skipMetadataVersionCheck, skipMetadataVersionCheck)
put(AnalysisFlag.multiPlatformDoNotCheckActual, noCheckActual)
put(AnalysisFlag.allowKotlinPackage, allowKotlinPackage)
}
}
@@ -44,7 +44,9 @@ class ContractParsingServices(val languageVersionSettings: LanguageVersionSettin
val contractProvider = ownerDescriptor.getUserData(ContractProviderKey) ?: return
val isFeatureTurnedOn = languageVersionSettings.supportsFeature(LanguageFeature.CallsInPlaceEffect) ||
languageVersionSettings.supportsFeature(LanguageFeature.ReturnsEffect)
languageVersionSettings.supportsFeature(LanguageFeature.ReturnsEffect) ||
// This condition is here for technical purposes of compiling 1.2-runtime with contracts
languageVersionSettings.getFlag(AnalysisFlag.Flags.allowKotlinPackage)
val contractDescriptor = when {
!isFeatureTurnedOn || !isContractDescriptionCallPreciseCheck(expression, trace.bindingContext) -> null
@@ -221,7 +221,9 @@ class FunctionDescriptorResolver(
val emptyContract = LazyContractProvider.createInitialized(null)
val isContractsEnabled = languageVersionSettings.supportsFeature(LanguageFeature.CallsInPlaceEffect) ||
languageVersionSettings.supportsFeature(LanguageFeature.ReturnsEffect)
languageVersionSettings.supportsFeature(LanguageFeature.ReturnsEffect) ||
// We need to enable contracts if we're compiling "kotlin"-package to be able to ship contracts in stdlib in 1.2
languageVersionSettings.getFlag(AnalysisFlag.allowKotlinPackage)
if (!isContractsEnabled || !contractParsingServices.fastCheckIfContractPresent(function)) return emptyContract
@@ -53,5 +53,8 @@ class AnalysisFlag<out T> internal constructor(
@JvmStatic
val jsr305 by Flag.Jsr305StateWarnByDefault
@JvmStatic
val allowKotlinPackage by Flag.Boolean
}
}