Multiple fixes of JS source maps
- elvis expression with complex RHS - destructuring declarations - decomposition of `var` statement (for example, in case of inline destructuring functions) - `is` LHS &&/|| inline fun RHS - argument assignment to temporary var on inline call site - assignment of `next()` result to temporary var in `for` expression - rethrow statement in exception handler
This commit is contained in:
@@ -81,7 +81,7 @@ internal class ExpressionDecomposer private constructor(
|
||||
|
||||
for (jsVar in vars) {
|
||||
if (jsVar in containsExtractable && prevVars.isNotEmpty()) {
|
||||
addStatement(JsVars(prevVars, x.isMultiline))
|
||||
addStatement(JsVars(prevVars, x.isMultiline).apply { source = prevVars.first().source })
|
||||
prevVars = SmartList<JsVars.JsVar>()
|
||||
}
|
||||
|
||||
@@ -89,8 +89,11 @@ internal class ExpressionDecomposer private constructor(
|
||||
prevVars.add(jsVar)
|
||||
}
|
||||
|
||||
vars.clear()
|
||||
vars.addAll(prevVars)
|
||||
if (vars.size != prevVars.size) {
|
||||
vars.clear()
|
||||
vars.addAll(prevVars)
|
||||
x.source = prevVars.first().source
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
@@ -168,7 +171,7 @@ internal class ExpressionDecomposer private constructor(
|
||||
additionalStatements.toStatement()
|
||||
}
|
||||
|
||||
addStatement(JsIf(test, arg2Eval))
|
||||
addStatement(JsIf(test, arg2Eval).also { it.source = source })
|
||||
ctx.replaceMe(tmp.nameRef)
|
||||
}
|
||||
|
||||
|
||||
@@ -50,7 +50,7 @@ private constructor(
|
||||
val parameters = getParameters()
|
||||
|
||||
removeDefaultInitializers(arguments, parameters, body)
|
||||
aliasArgumentsIfNeeded(namingContext, arguments, parameters)
|
||||
aliasArgumentsIfNeeded(namingContext, arguments, parameters, call.source)
|
||||
renameLocalNames(namingContext, invokedFunction)
|
||||
processReturns()
|
||||
|
||||
@@ -89,7 +89,7 @@ private constructor(
|
||||
val namingContext = inliningContext.newNamingContext()
|
||||
val arguments = call.arguments
|
||||
val parameters = outer.parameters
|
||||
aliasArgumentsIfNeeded(namingContext, arguments, parameters)
|
||||
aliasArgumentsIfNeeded(namingContext, arguments, parameters, call.source)
|
||||
namingContext.applyRenameTo(inner)
|
||||
}
|
||||
|
||||
@@ -100,7 +100,7 @@ private constructor(
|
||||
if (thisReplacement == null || thisReplacement is JsThisRef) return
|
||||
|
||||
val thisName = JsScope.declareTemporaryName(getThisAlias())
|
||||
namingContext.newVar(thisName, thisReplacement)
|
||||
namingContext.newVar(thisName, thisReplacement, source = call.source)
|
||||
thisReplacement = thisName.makeRef()
|
||||
|
||||
replaceThisReference(block, thisReplacement)
|
||||
@@ -121,7 +121,7 @@ private constructor(
|
||||
|
||||
val resultName = JsScope.declareTemporaryName(getResultLabel())
|
||||
this.resultName = resultName
|
||||
namingContext.newVar(resultName, null)
|
||||
namingContext.newVar(resultName, source = call.source)
|
||||
return resultName.makeRef()
|
||||
}
|
||||
|
||||
|
||||
@@ -45,9 +45,10 @@ class NamingContext(private val statementContext: JsContext<JsStatement>) {
|
||||
renamings.put(name, replacement)
|
||||
}
|
||||
|
||||
fun newVar(name: JsName, value: JsExpression? = null) {
|
||||
fun newVar(name: JsName, value: JsExpression? = null, source: Any?) {
|
||||
val vars = JsAstUtils.newVar(name, value)
|
||||
vars.synthetic = true
|
||||
vars.source = source
|
||||
declarations.add(vars)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -25,7 +25,8 @@ import org.jetbrains.kotlin.js.inline.util.rewriters.LabelNameRefreshingVisitor
|
||||
fun aliasArgumentsIfNeeded(
|
||||
context: NamingContext,
|
||||
arguments: List<JsExpression>,
|
||||
parameters: List<JsParameter>
|
||||
parameters: List<JsParameter>,
|
||||
source: Any?
|
||||
) {
|
||||
require(arguments.size <= parameters.size) { "arguments.size (${arguments.size}) should be less or equal to parameters.size (${parameters.size})" }
|
||||
|
||||
@@ -34,9 +35,10 @@ fun aliasArgumentsIfNeeded(
|
||||
|
||||
val replacement = JsScope.declareTemporaryName(paramName.ident).apply {
|
||||
staticRef = arg
|
||||
context.newVar(this, arg.deepCopy())
|
||||
context.newVar(this, arg.deepCopy(), source = source)
|
||||
}.makeRef()
|
||||
|
||||
replacement.source = arg.source
|
||||
context.replaceName(paramName, replacement)
|
||||
}
|
||||
|
||||
@@ -45,7 +47,7 @@ fun aliasArgumentsIfNeeded(
|
||||
val paramName = defaultParam.name
|
||||
val freshName = JsScope.declareTemporaryName(paramName.ident)
|
||||
freshName.copyMetadataFrom(paramName)
|
||||
context.newVar(freshName)
|
||||
context.newVar(freshName, source = source)
|
||||
|
||||
context.replaceName(paramName, freshName.makeRef())
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user