diff --git a/compiler/src/prog8/compiler/Compiler.kt b/compiler/src/prog8/compiler/Compiler.kt index 084eca94e..8e64f8be7 100644 --- a/compiler/src/prog8/compiler/Compiler.kt +++ b/compiler/src/prog8/compiler/Compiler.kt @@ -62,7 +62,9 @@ fun compileProgram(args: CompilerArguments): CompilationResult { val totalTime = measureTimeMillis { // import main module and everything it needs val (programresult, compilationOptions, imported) = parseImports(args.filepath, args.errors, compTarget, args.sourceDirs) - println("${args.filepath} parsed.\u001B[0K") + print("Parsed ${args.filepath}") + ModuleImporter.ansiEraseRestOfLine(true) + with(compilationOptions) { slowCodegenWarnings = args.slowCodegenWarnings optimize = args.optimize @@ -175,7 +177,7 @@ fun parseImports(filepath: Path, errors: IErrorReporter, compTarget: ICompilationTarget, sourceDirs: List): Triple> { - println("Compiler target: ${compTarget.name}. Parsing...") + println("Compiler target: ${compTarget.name}") val bf = BuiltinFunctionsFacade(BuiltinFunctions) val program = Program(filepath.nameWithoutExtension, bf, compTarget, compTarget) bf.program = program diff --git a/compiler/src/prog8/compiler/ModuleImporter.kt b/compiler/src/prog8/compiler/ModuleImporter.kt index c03d153df..88e8e9569 100644 --- a/compiler/src/prog8/compiler/ModuleImporter.kt +++ b/compiler/src/prog8/compiler/ModuleImporter.kt @@ -39,9 +39,8 @@ class ModuleImporter(private val program: Program, else -> candidates.first() // when more candiates, pick the one from the first location } - print(" importing '${filePath.nameWithoutExtension}' (from file $srcPath)\r") - val module = importModule(SourceCode.File(srcPath)) - return Ok(module) + val source = SourceCode.File(srcPath) + return Ok(importModule(source)) } fun importLibraryModule(name: String): Module? { @@ -52,6 +51,7 @@ class ModuleImporter(private val program: Program, } private fun importModule(src: SourceCode) : Module { + printImportingMessage(src.name, src.origin) val moduleAst = Prog8Parser.parseModule(src) program.addModule(moduleAst) @@ -89,7 +89,6 @@ class ModuleImporter(private val program: Program, val importedModule = moduleResourceSrc.fold( success = { - print(" importing '$moduleName' (from internal ${it.origin})\r") importModule(it) }, failure = { @@ -97,7 +96,6 @@ class ModuleImporter(private val program: Program, val moduleSrc = getModuleFromFile(moduleName, importingModule) moduleSrc.fold( success = { - print(" importing '$moduleName' (from file ${it.origin})\r") importModule(it) }, failure = { @@ -150,4 +148,18 @@ class ModuleImporter(private val program: Program, return Err(NoSuchFileException(File("name"))) } + + fun printImportingMessage(module: String, origin: String) { + print(" importing '$module' (from ${origin})") + ansiEraseRestOfLine(false) + print("\r") + } + + companion object { + fun ansiEraseRestOfLine(newline: Boolean) { + print("\u001b[0K") + if(newline) + println() + } + } } diff --git a/compilerAst/src/prog8/parser/SourceCode.kt b/compilerAst/src/prog8/parser/SourceCode.kt index b74d6f7d0..1d30b8fd2 100644 --- a/compilerAst/src/prog8/parser/SourceCode.kt +++ b/compilerAst/src/prog8/parser/SourceCode.kt @@ -4,7 +4,9 @@ import java.io.File import java.io.IOException import java.nio.file.Path import kotlin.io.path.Path +import kotlin.io.path.name import kotlin.io.path.readText +import kotlin.io.path.toPath /** * Encapsulates - and ties together - actual source code (=text) and its [origin]. @@ -21,6 +23,11 @@ sealed class SourceCode { */ abstract val isFromFilesystem: Boolean + /** + * The logical name of the source code unit. Usually the module's name. + */ + abstract val name: String + /** * Where this [SourceCode] instance came from. * This can be one of the following: @@ -61,6 +68,7 @@ sealed class SourceCode { override val isFromResources = false override val isFromFilesystem = false override val origin = "$stringSourcePrefix${System.identityHashCode(text).toString(16)}>" + override val name = "" } /** @@ -74,6 +82,7 @@ sealed class SourceCode { class File(path: Path): SourceCode() { override val text: String override val origin: String + override val name: String override val isFromResources = false override val isFromFilesystem = true @@ -82,6 +91,7 @@ sealed class SourceCode { origin = relative(normalized).toString() try { text = normalized.readText() + name = normalized.toFile().nameWithoutExtension } catch (nfx: java.nio.file.NoSuchFileException) { throw NoSuchFileException(normalized.toFile()).also { it.initCause(nfx) } } catch (iox: IOException) { @@ -100,6 +110,7 @@ sealed class SourceCode { override val isFromFilesystem = false override val origin = "$libraryFilePrefix$normalized" override val text: String + override val name: String init { val rscURL = object {}.javaClass.getResource(normalized) @@ -112,6 +123,7 @@ sealed class SourceCode { } val stream = object {}.javaClass.getResourceAsStream(normalized) text = stream!!.reader().use { it.readText() } + name = Path.of(pathString).toFile().nameWithoutExtension } } @@ -122,6 +134,7 @@ sealed class SourceCode { override val isFromResources: Boolean = false override val isFromFilesystem: Boolean = false override val origin: String = name + override val name: String = name override val text: String = "" } }