JS: enable release coroutines
diff --git a/js/js.frontend/src/org/jetbrains/kotlin/js/config/JsConfig.java b/js/js.frontend/src/org/jetbrains/kotlin/js/config/JsConfig.java
index 4ebc2af..ed09cf6 100644
--- a/js/js.frontend/src/org/jetbrains/kotlin/js/config/JsConfig.java
+++ b/js/js.frontend/src/org/jetbrains/kotlin/js/config/JsConfig.java
@@ -87,8 +87,6 @@
             @Nullable Set<String> librariesToSkip) {
         this.project = project;
         this.configuration = configuration.copy();
-        CommonConfigurationKeysKt.setLanguageVersionSettings(this.configuration, new ReleaseCoroutinesDisabledLanguageVersionSettings(
-                CommonConfigurationKeysKt.getLanguageVersionSettings(this.configuration)));
         this.metadataCache = metadataCache;
         this.librariesToSkip = librariesToSkip;
     }
diff --git a/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/KotlinJavascriptSerializationUtil.kt b/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/KotlinJavascriptSerializationUtil.kt
index 05bf219..82b5acc 100644
--- a/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/KotlinJavascriptSerializationUtil.kt
+++ b/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/KotlinJavascriptSerializationUtil.kt
@@ -101,7 +101,7 @@
         val module = jsDescriptor.data
 
         for (fqName in getPackagesFqNames(module).sortedBy { it.asString() }) {
-            val fragment = serializePackageFragment(bindingContext, module, fqName)
+            val fragment = serializePackageFragment(bindingContext, module, fqName, languageVersionSettings)
 
             if (!fragment.isEmpty()) {
                 serializedFragments[fqName] = fragment
@@ -178,16 +178,28 @@
         }
     }
 
-    private fun serializePackageFragment(bindingContext: BindingContext, module: ModuleDescriptor, fqName: FqName): ProtoBuf.PackageFragment {
+    private fun serializePackageFragment(
+        bindingContext: BindingContext,
+        module: ModuleDescriptor,
+        fqName: FqName,
+        languageVersionSettings: LanguageVersionSettings
+    ): ProtoBuf.PackageFragment {
         val packageView = module.getPackage(fqName)
-        return serializeDescriptors(bindingContext, module, packageView.memberScope.getContributedDescriptors(), fqName)
+        return serializeDescriptors(
+            bindingContext,
+            module,
+            packageView.memberScope.getContributedDescriptors(),
+            fqName,
+            languageVersionSettings
+        )
     }
 
     fun serializeDescriptors(
-            bindingContext: BindingContext,
-            module: ModuleDescriptor,
-            scope: Collection<DeclarationDescriptor>,
-            fqName: FqName
+        bindingContext: BindingContext,
+        module: ModuleDescriptor,
+        scope: Collection<DeclarationDescriptor>,
+        fqName: FqName,
+        languageVersionSettings: LanguageVersionSettings
     ): ProtoBuf.PackageFragment {
         val builder = ProtoBuf.PackageFragment.newBuilder()
 
@@ -203,7 +215,7 @@
         }
 
         val fileRegistry = KotlinFileRegistry()
-        val extension = KotlinJavascriptSerializerExtension(fileRegistry)
+        val extension = KotlinJavascriptSerializerExtension(fileRegistry, languageVersionSettings)
 
         val classDescriptors = scope.filterIsInstance<ClassDescriptor>().sortedBy { it.fqNameSafe.asString() }
 
@@ -232,8 +244,8 @@
         builder.`package` = DescriptorSerializer.createTopLevel(extension).packagePartProto(fqName, members).build()
 
         builder.setExtension(
-                JsProtoBuf.packageFragmentFiles,
-                serializeFiles(fileRegistry, bindingContext, AnnotationSerializer(stringTable))
+            JsProtoBuf.packageFragmentFiles,
+            serializeFiles(fileRegistry, bindingContext, AnnotationSerializer(stringTable))
         )
 
         val (strings, qualifiedNames) = stringTable.buildProto()
diff --git a/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/KotlinJavascriptSerializerExtension.kt b/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/KotlinJavascriptSerializerExtension.kt
index 42f0989..92a1d19 100644
--- a/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/KotlinJavascriptSerializerExtension.kt
+++ b/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/KotlinJavascriptSerializerExtension.kt
@@ -16,6 +16,8 @@
 
 package org.jetbrains.kotlin.serialization.js
 
+import org.jetbrains.kotlin.config.LanguageFeature
+import org.jetbrains.kotlin.config.LanguageVersionSettings
 import org.jetbrains.kotlin.descriptors.*
 import org.jetbrains.kotlin.metadata.ProtoBuf
 import org.jetbrains.kotlin.metadata.js.JsProtoBuf
@@ -30,7 +32,8 @@
 import org.jetbrains.kotlin.types.FlexibleType
 
 class KotlinJavascriptSerializerExtension(
-        private val fileRegistry: KotlinFileRegistry
+        private val fileRegistry: KotlinFileRegistry,
+        private val languageVersionSettings: LanguageVersionSettings
 ) : KotlinSerializerExtensionBase(JsSerializerProtocol) {
     override val stringTable = JavaScriptStringTable()
 
@@ -77,6 +80,8 @@
         val psiFile = file.psiFile
         return (psiFile as? KtFile)?.let { fileRegistry.lookup(KotlinPsiFileMetadata(it)) }
     }
+
+    override fun releaseCoroutines() = languageVersionSettings.supportsFeature(LanguageFeature.ReleaseCoroutines)
 }
 
 object JsSerializerProtocol : SerializerExtensionProtocol(
diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/facade/K2JSTranslator.java b/js/js.translator/src/org/jetbrains/kotlin/js/facade/K2JSTranslator.java
index cc06701..4040481 100644
--- a/js/js.translator/src/org/jetbrains/kotlin/js/facade/K2JSTranslator.java
+++ b/js/js.translator/src/org/jetbrains/kotlin/js/facade/K2JSTranslator.java
@@ -177,7 +177,8 @@
                 List<DeclarationDescriptor> scope = translationResult.getFileMemberScopes().get(file);
                 assert scope != null : "Could not find descriptors for file: " + file;
                 ProtoBuf.PackageFragment packagePart = serializationUtil.serializeDescriptors(
-                        bindingTrace.getBindingContext(), moduleDescriptor, scope, file.getPackageFqName());
+                        bindingTrace.getBindingContext(), moduleDescriptor, scope, file.getPackageFqName(),
+                        CommonConfigurationKeysKt.getLanguageVersionSettings(config.getConfiguration()));
 
                 File ioFile = VfsUtilCore.virtualToIoFile(file.getVirtualFile());
                 incrementalResults.processPackagePart(ioFile, packagePart.toByteArray(), binaryAst);
diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/reference/ReferenceTranslator.java b/js/js.translator/src/org/jetbrains/kotlin/js/translate/reference/ReferenceTranslator.java
index ac9205f..4cdbc09 100644
--- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/reference/ReferenceTranslator.java
+++ b/js/js.translator/src/org/jetbrains/kotlin/js/translate/reference/ReferenceTranslator.java
@@ -49,7 +49,7 @@
 import static org.jetbrains.kotlin.js.translate.utils.PsiUtils.getSelectorAsSimpleName;
 
 public final class ReferenceTranslator {
-    private static final Set<FqNameUnsafe> DECLARATIONS_WITHOUT_SIZE_EFFECTS = new HashSet<>(Arrays.asList(
+    private static final Set<FqNameUnsafe> DECLARATIONS_WITHOUT_SIDE_EFFECTS = new HashSet<>(Arrays.asList(
             new FqNameUnsafe("kotlin.coroutines.experimental.intrinsics.COROUTINE_SUSPENDED"),
             new FqNameUnsafe("kotlin.coroutines.intrinsics.COROUTINE_SUSPENDED"),
             KotlinBuiltIns.FQ_NAMES.unit
@@ -145,7 +145,7 @@
     }
 
     private static boolean isValueWithoutSideEffect(@NotNull DeclarationDescriptor descriptor) {
-        return DECLARATIONS_WITHOUT_SIZE_EFFECTS.contains(DescriptorUtils.getFqName(descriptor));
+        return DECLARATIONS_WITHOUT_SIDE_EFFECTS.contains(DescriptorUtils.getFqName(descriptor));
     }
 
     @NotNull