Fix duplicate stdlib import redefinition

This commit is contained in:
Sergey Chernov 2026-04-11 19:24:08 +03:00
parent a1ea09440d
commit 6171b0d95f
2 changed files with 49 additions and 1 deletions

View File

@ -0,0 +1,44 @@
package net.sergeych
import kotlinx.coroutines.runBlocking
import java.nio.file.Files
import kotlin.io.path.writeText
import kotlin.test.Test
class CliLocalModuleImportRegressionJvmTest {
@Test
fun localModuleUsingLaunchAndNetImportsWithoutStdlibRedefinition() = runBlocking {
val root = Files.createTempDirectory("lyng-cli-import-regression")
try {
val packageDir = Files.createDirectories(root.resolve("package1"))
val mainFile = root.resolve("main.lyng")
val alphaFile = packageDir.resolve("alpha.lyng")
mainFile.writeText(
"""
import package1.alpha
println("ok")
""".trimIndent()
)
alphaFile.writeText(
"""
import lyng.io.net
class Alpha {
fn startListen(port, host) {
launch {
println(port, host)
}
}
}
""".trimIndent()
)
executeFile(mainFile.toString(), emptyList())
} finally {
root.toFile().deleteRecursively()
}
}
}

View File

@ -94,7 +94,11 @@ class ModuleScope(
if (newName != null) {
val existing = scope.objects[newName]
if (existing != null) {
if (existing.importedFrom != record.importedFrom)
val sameBinding =
existing === record ||
existing.importedFrom == record.importedFrom ||
existing.value === record.value
if (!sameBinding)
scope.raiseError("symbol ${existing.importedFrom?.packageName}.$newName already exists, redefinition on import is not allowed")
// already imported
} else {