From cf022a0dbd75f845971af022ac0e8243acdd6c13 Mon Sep 17 00:00:00 2001 From: Nicolas Stucki Date: Thu, 27 May 2021 13:38:41 +0200 Subject: [PATCH] Fix type of `let` reference Fixes #12584 --- compiler/src/scala/quoted/runtime/impl/QuotesImpl.scala | 8 ++++---- library/src/scala/quoted/Quotes.scala | 6 +++--- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/compiler/src/scala/quoted/runtime/impl/QuotesImpl.scala b/compiler/src/scala/quoted/runtime/impl/QuotesImpl.scala index d9d14ba93fb1..83fc002217f3 100644 --- a/compiler/src/scala/quoted/runtime/impl/QuotesImpl.scala +++ b/compiler/src/scala/quoted/runtime/impl/QuotesImpl.scala @@ -295,15 +295,15 @@ class QuotesImpl private (using val ctx: Context) extends Quotes, QuoteUnpickler def unapply(vdef: ValDef): (String, TypeTree, Option[Term]) = (vdef.name.toString, vdef.tpt, optional(vdef.rhs)) - def let(owner: Symbol, name: String, rhs: Term)(body: Ident => Term): Term = + def let(owner: Symbol, name: String, rhs: Term)(body: Ref => Term): Term = val vdef = tpd.SyntheticValDef(name.toTermName, rhs)(using ctx.withOwner(owner)) - val ref = tpd.ref(vdef.symbol).asInstanceOf[Ident] + val ref = tpd.ref(vdef.symbol).asInstanceOf[Ref] Block(List(vdef), body(ref)) - def let(owner: Symbol, terms: List[Term])(body: List[Ident] => Term): Term = + def let(owner: Symbol, terms: List[Term])(body: List[Ref] => Term): Term = val ctx1 = ctx.withOwner(owner) val vdefs = terms.map(term => tpd.SyntheticValDef("x".toTermName, term)(using ctx1)) - val refs = vdefs.map(vdef => tpd.ref(vdef.symbol).asInstanceOf[Ident]) + val refs = vdefs.map(vdef => tpd.ref(vdef.symbol).asInstanceOf[Ref]) Block(vdefs, body(refs)) end ValDef diff --git a/library/src/scala/quoted/Quotes.scala b/library/src/scala/quoted/Quotes.scala index 74c98680d939..64a62df1bf2d 100644 --- a/library/src/scala/quoted/Quotes.scala +++ b/library/src/scala/quoted/Quotes.scala @@ -590,14 +590,14 @@ trait Quotes { self: runtime.QuoteUnpickler & runtime.QuoteMatching => def unapply(vdef: ValDef): (String, TypeTree, Option[Term]) /** Creates a block `{ val = ; }` */ - def let(owner: Symbol, name: String, rhs: Term)(body: Ident => Term): Term + def let(owner: Symbol, name: String, rhs: Term)(body: Ref => Term): Term /** Creates a block `{ val x = ; }` */ - def let(owner: Symbol, rhs: Term)(body: Ident => Term): Term = + def let(owner: Symbol, rhs: Term)(body: Ref => Term): Term = let(owner, "x", rhs)(body) /** Creates a block `{ val x1 = ; ...; val xn = ; }` */ - def let(owner: Symbol, terms: List[Term])(body: List[Ident] => Term): Term + def let(owner: Symbol, terms: List[Term])(body: List[Ref] => Term): Term } /** Makes extension methods on `ValDef` available without any imports */