inline parameter removes let binding

This commit is contained in:
Eugene Yokota 2022-11-27 00:57:02 -05:00
parent b1818b446b
commit 9f5525c989
6 changed files with 15 additions and 45 deletions

View File

@ -261,8 +261,7 @@ trait Cont:
inputBuf += Input(TypeRepr.of[a], qual, replacement, freshName("q"))
oldTree
}
val inlined = inlineExtensionProxy(expr.asTerm)
val tx = transformWrappers(inlined, record, Symbol.spliceOwner)
val tx = transformWrappers(expr.asTerm, record, Symbol.spliceOwner)
val tr = makeApp(tx, inputBuf.toList)
tr
end Cont

View File

@ -67,33 +67,6 @@ trait ContextUtil[C <: Quotes & scala.Singleton](val qctx: C, val valStart: Int)
def idTransform[F[_]]: TermTransform[F] = in => in
/**
* {
* val in$proxy264: sbt.Def.Initialize[sbt.Task[sbt.ForkOptions]] = sbt.Defaults.forkOptionsTask
* (foo.bar[sbt.ForkOptions](in$proxy264): sbt.ForkOptions)
* }
*
* @param tree
* @return
*/
def inlineExtensionProxy(tree: Term): Term =
val rhss: mutable.Map[String, Term] = mutable.Map.empty
object refTransformer extends TreeMap:
override def transformStatement(tree: Statement)(owner: Symbol): Statement =
tree match
case ValDef(name, tpe, Some(body)) if name.contains("$proxy") =>
rhss(name) = body
ValDef.copy(tree)(name, tpe, None)
case _ =>
super.transformStatement(tree)(owner)
override def transformTerm(tree: Term)(owner: Symbol): Term =
tree match
case Ident(name) if rhss.contains(name) => rhss(name)
case _ => super.transformTerm(tree)(owner)
end refTransformer
refTransformer.transformTerm(tree)(Symbol.spliceOwner)
def collectDefs(tree: Term, isWrapper: (String, TypeRepr, Term) => Boolean): Set[Symbol] =
val defs = mutable.HashSet[Symbol]()
object traverser extends TreeTraverser:

View File

@ -294,10 +294,10 @@ object Def extends Init[Scope] with TaskMacroExtra with InitializeImplicits:
// implicit def macroValueI[T](@deprecated("unused", "") in: Initialize[T]): MacroValue[T] = ???
extension [A1](in: Initialize[A1])
extension [A1](inline in: Initialize[A1])
inline def value: A1 = InputWrapper.`wrapInit_\u2603\u2603`[A1](in)
extension [A1](in: Initialize[Task[A1]])
extension [A1](inline in: Initialize[Task[A1]])
@targetName("valueIA1")
inline def value: A1 = InputWrapper.`wrapInitTask_\u2603\u2603`[A1](in)
@ -314,7 +314,7 @@ object Def extends Init[Scope] with TaskMacroExtra with InitializeImplicits:
inline def flatMapTask[A2](f: A1 => Initialize[Task[A2]]): Initialize[Task[A2]] =
std.FullInstance.initializeTaskMonad.flatMap(in)(f)
extension [A1](in: TaskKey[A1])
extension [A1](inline in: TaskKey[A1])
// implicit def macroPrevious[T](@deprecated("unused", "") in: TaskKey[T]): MacroPrevious[T] = ???
inline def previous(using JsonFormat[A1]): Option[A1] =
${ TaskMacro.previousImpl[A1]('in) }
@ -323,20 +323,20 @@ object Def extends Init[Scope] with TaskMacroExtra with InitializeImplicits:
// Initialize[State => Parser[T]] to be used in the inputTask macro as an input with an ultimate
// result of type A1, previously implemented using ParserInput.parsedMacroImpl[A1].
extension [A1](in: Initialize[Parser[A1]])
extension [A1](inline in: Initialize[Parser[A1]])
inline def parsed: A1 = ParserInput.`initParser_\u2603\u2603`[A1](Def.toISParser(in))
extension [A1](in: Initialize[State => Parser[A1]])
extension [A1](inline in: Initialize[State => Parser[A1]])
@targetName("parsedISPA1")
inline def parsed: A1 = ParserInput.`initParser_\u2603\u2603`[A1](in)
extension [A1](in: Def.Initialize[InputTask[A1]])
extension [A1](inline in: Def.Initialize[InputTask[A1]])
inline def parsed: Task[A1] =
ParserInput.`initParser_\u2603\u2603`[Task[A1]](Def.toIParser[A1](in))
inline def evaluated: A1 = InputWrapper.`wrapInitInputTask_\u2603\u2603`[A1](in)
def toTask(arg: String): Initialize[Task[A1]] =
inline def toTask(arg: String): Initialize[Task[A1]] =
import TaskExtra.singleInputTask
FullInstance.flatten(
(Def.stateKey zipWith in)((sTask, it) =>
@ -415,16 +415,16 @@ end Def
// because the target doesn't involve Initialize or anything in Def
trait TaskMacroExtra:
import sbt.std.ParserInput
extension [A1](in: Task[A1])
extension [A1](inline in: Task[A1])
inline def value: A1 = std.InputWrapper.`wrapTask_\u2603\u2603`[A1](in)
// implicit def macroValueIn[T](@deprecated("unused", "") in: InputTask[T]): std.InputEvaluated[T] =
// ???
extension [A1](in: Parser[A1])
extension [A1](inline in: Parser[A1])
inline def parsed: A1 = ParserInput.`parser_\u2603\u2603`[A1](Def.toSParser(in))
extension [A1](in: State => Parser[A1])
extension [A1](inline in: State => Parser[A1])
inline def parsed: A1 = ParserInput.`parser_\u2603\u2603`[A1](in)
end TaskMacroExtra

View File

@ -97,8 +97,7 @@ object InputTaskMacro:
)
val inner: convert1.TermTransform[F1] = (in: Term) => f(in.asExprOf[A1]).asTerm
val inlined = convert1.inlineExtensionProxy(tree.asTerm)
val cond = conditionInputTaskTree(inlined).asExprOf[A1]
val cond = conditionInputTaskTree(tree.asTerm).asExprOf[A1]
convert1.contMapN[A1, Def.Initialize, F1](cond, convert1.appExpr, inner)
private[this] def iParserMacro[F1[_]: Type, A1: Type](tree: Expr[A1])(
@ -184,9 +183,8 @@ object InputTaskMacro:
subWrapper(tpe, tree, oldTree)
}
val inlined = convert1.inlineExtensionProxy(expr.asTerm)
val tx =
convert1.transformWrappers(inlined, sub, Symbol.spliceOwner)
convert1.transformWrappers(expr.asTerm, sub, Symbol.spliceOwner)
result match {
case Some((p, tpe, param)) =>
val fCore = util.createFunction(param :: Nil, tx, functionSym)

View File

@ -6,7 +6,7 @@ object Dependencies {
// WARNING: Please Scala update versions in PluginCross.scala too
val scala212 = "2.12.17"
val scala213 = "2.13.8"
val scala3 = "3.2.0"
val scala3 = "3.2.1"
val checkPluginCross = settingKey[Unit]("Make sure scalaVersion match up")
val baseScalaVersion = scala3
def nightlyVersion: Option[String] =

View File

@ -1 +1 @@
sbt.version=1.7.2
sbt.version=1.8.0