From fb4dcc6a6a50b809cb5a48014a9ee8733c203fdb Mon Sep 17 00:00:00 2001 From: Zalim Bashorov Date: Mon, 5 Dec 2022 16:18:36 +0100 Subject: [PATCH] [Sourcemap] Introduce `getCurrentColumn` and stop using `TextOutput` directly The general goal is remove dependency on TextOutput and make it simpler to use for wasm backend. --- .../jetbrains/kotlin/cli/js/internal/JSStdlibLinker.kt | 2 +- .../js/transformers/irToJs/IrModuleToJsTransformer.kt | 2 +- .../org/jetbrains/kotlin/js/dce/DeadCodeElimination.kt | 2 +- .../jetbrains/kotlin/js/sourceMap/SourceMap3Builder.kt | 9 ++++++--- .../kotlin/js/test/handlers/JsSourceMapHandler.kt | 2 +- .../org/jetbrains/kotlin/js/facade/TranslationResult.kt | 2 +- 6 files changed, 11 insertions(+), 8 deletions(-) diff --git a/compiler/cli/cli-js/src/org/jetbrains/kotlin/cli/js/internal/JSStdlibLinker.kt b/compiler/cli/cli-js/src/org/jetbrains/kotlin/cli/js/internal/JSStdlibLinker.kt index b5944688fd8..863193ba558 100644 --- a/compiler/cli/cli-js/src/org/jetbrains/kotlin/cli/js/internal/JSStdlibLinker.kt +++ b/compiler/cli/cli-js/src/org/jetbrains/kotlin/cli/js/internal/JSStdlibLinker.kt @@ -75,7 +75,7 @@ private fun mergeStdlibParts(outputFile: File, wrapperFile: File, baseDir: File, val sourceMapFile = File(outputFile.parentFile, outputFile.name + ".map") val textOutput = TextOutputImpl() - val sourceMapBuilder = SourceMap3Builder(outputFile, textOutput, "") + val sourceMapBuilder = SourceMap3Builder(outputFile, textOutput::getColumn, "") val consumer = SourceMapBuilderConsumer( File("."), sourceMapBuilder, diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/IrModuleToJsTransformer.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/IrModuleToJsTransformer.kt index f8845599f27..91c559cbef0 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/IrModuleToJsTransformer.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/IrModuleToJsTransformer.kt @@ -461,7 +461,7 @@ fun generateSingleWrappedModuleBody( val sourceMapBuilderConsumer: SourceLocationConsumer if (sourceMapsInfo != null) { val sourceMapPrefix = sourceMapsInfo.sourceMapPrefix - sourceMapBuilder = SourceMap3Builder(null, jsCode, sourceMapPrefix) + sourceMapBuilder = SourceMap3Builder(null, jsCode::getColumn, sourceMapPrefix) val pathResolver = SourceFilePathResolver.create(sourceMapsInfo.sourceRoots, sourceMapPrefix, sourceMapsInfo.outputDir) diff --git a/js/js.dce/src/org/jetbrains/kotlin/js/dce/DeadCodeElimination.kt b/js/js.dce/src/org/jetbrains/kotlin/js/dce/DeadCodeElimination.kt index 536f517ec4c..1f0ce6a7b3a 100644 --- a/js/js.dce/src/org/jetbrains/kotlin/js/dce/DeadCodeElimination.kt +++ b/js/js.dce/src/org/jetbrains/kotlin/js/dce/DeadCodeElimination.kt @@ -117,7 +117,7 @@ class DeadCodeElimination( val sourceMapFile = File(file.outputPath + ".map") val textOutput = TextOutputImpl() val outputFile = File(file.outputPath) - val sourceMapBuilder = SourceMap3Builder(outputFile, textOutput, "") + val sourceMapBuilder = SourceMap3Builder(outputFile, textOutput::getColumn, "") val inputFile = File(file.resource.name) val sourceBaseDir = if (inputFile.exists()) inputFile.parentFile else File(".") diff --git a/js/js.sourcemap/src/org/jetbrains/kotlin/js/sourceMap/SourceMap3Builder.kt b/js/js.sourcemap/src/org/jetbrains/kotlin/js/sourceMap/SourceMap3Builder.kt index d7984f35ce5..ffe03aaed8b 100644 --- a/js/js.sourcemap/src/org/jetbrains/kotlin/js/sourceMap/SourceMap3Builder.kt +++ b/js/js.sourcemap/src/org/jetbrains/kotlin/js/sourceMap/SourceMap3Builder.kt @@ -13,7 +13,7 @@ import java.util.function.Supplier class SourceMap3Builder( private val generatedFile: File?, - private val textOutput: TextOutput, + private val getCurrentOutputColumn: () -> Int, private val pathPrefix: String ) : SourceMapBuilder { @@ -169,13 +169,16 @@ class SourceMap3Builder( if (newGroupStarted) { previousGeneratedColumn = 0 } - val columnDiff = textOutput.column - previousGeneratedColumn + + val column = getCurrentOutputColumn() + + val columnDiff = column - previousGeneratedColumn if (!newGroupStarted) { out.append(',') } if (columnDiff > 0 || newGroupStarted) { Base64VLQ.encode(out, columnDiff) - previousGeneratedColumn = textOutput.column + previousGeneratedColumn = column previousMappingOffset = out.length previousPreviousSourceIndex = previousSourceIndex diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/handlers/JsSourceMapHandler.kt b/js/js.tests/test/org/jetbrains/kotlin/js/test/handlers/JsSourceMapHandler.kt index 5bc645932f9..69b95e3d6bf 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/js/test/handlers/JsSourceMapHandler.kt +++ b/js/js.tests/test/org/jetbrains/kotlin/js/test/handlers/JsSourceMapHandler.kt @@ -59,7 +59,7 @@ class JsSourceMapHandler(testServices: TestServices) : JsBinaryArtifactHandler(t val output = TextOutputImpl() val pathResolver = SourceFilePathResolver(mutableListOf(File(".")), null) - val sourceMapBuilder = SourceMap3Builder(outputFile, output, "") + val sourceMapBuilder = SourceMap3Builder(outputFile, output::getColumn, "") generatedProgram.accept( JsToStringGenerationVisitor( output, SourceMapBuilderConsumer(File("."), sourceMapBuilder, pathResolver, false, false) diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/facade/TranslationResult.kt b/js/js.translator/src/org/jetbrains/kotlin/js/facade/TranslationResult.kt index 39c2a2d65ff..b89414e74f5 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/facade/TranslationResult.kt +++ b/js/js.translator/src/org/jetbrains/kotlin/js/facade/TranslationResult.kt @@ -117,7 +117,7 @@ abstract class TranslationResult protected constructor(val diagnostics: Diagnost override fun getOutputFiles(outputFile: File, outputPrefixFile: File?, outputPostfixFile: File?): OutputFileCollection { val output = TextOutputImpl() - val sourceMapBuilder = SourceMap3Builder(outputFile, output, config.sourceMapPrefix) + val sourceMapBuilder = SourceMap3Builder(outputFile, output::getColumn, config.sourceMapPrefix) val sourceMapBuilderConsumer = if (config.configuration.getBoolean(JSConfigurationKeys.SOURCE_MAP)) { val sourceMapContentEmbedding = config.sourceMapContentEmbedding