Skip to content

Commit 73d056a

Browse files
Merge pull request #12025 from dotty-staging/fix-12021
Add TermParamClause.isGiven
2 parents 0a83d2c + 813b536 commit 73d056a

File tree

5 files changed

+30
-1
lines changed

5 files changed

+30
-1
lines changed

compiler/src/scala/quoted/runtime/impl/QuotesImpl.scala

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1510,6 +1510,8 @@ class QuotesImpl private (using val ctx: Context) extends Quotes, QuoteUnpickler
15101510
def params: List[ValDef] = self
15111511
def isImplicit: Boolean =
15121512
self.nonEmpty && self.head.symbol.is(dotc.core.Flags.Implicit)
1513+
def isGiven: Boolean =
1514+
self.nonEmpty && self.head.symbol.is(dotc.core.Flags.Given)
15131515
end TermParamClauseMethods
15141516

15151517
type TypeParamClause = List[tpd.TypeDef]

library/src/scala/quoted/Quotes.scala

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2156,8 +2156,10 @@ trait Quotes { self: runtime.QuoteUnpickler & runtime.QuoteMatching =>
21562156
extension (self: TermParamClause)
21572157
/** List of parameters of the clause */
21582158
def params: List[ValDef]
2159-
/** Is this a given parameter clause `(implicit X1, ..., Xn)`, `(given X1, ..., Xn)` or `(given x1: X1, ..., xn: Xn)` */
2159+
/** Is this an implicit parameter clause `(implicit x1: X1, ..., xn: Xn)` */
21602160
def isImplicit: Boolean
2161+
/** Is this a given parameter clause `(using X1, ..., Xn)` or `(using x1: X1, ..., xn: Xn)` */
2162+
def isGiven: Boolean
21612163
end TermParamClauseMethods
21622164

21632165
/** A type parameter clause `[X1, ..., Xn]` */

tests/run-macros/i12021.check

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
X1: (i: scala.Int) isImplicit=true, isGiven=false
2+
X2: (i: scala.Int) isImplicit=false, isGiven=true

tests/run-macros/i12021/Macro_1.scala

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import scala.quoted.*
2+
3+
inline def inspect[A]: String =
4+
${ inspect2[A] }
5+
6+
def inspect2[A: Type](using Quotes): Expr[String] = {
7+
import quotes.reflect.*
8+
9+
val DefDef(_, List(Nil, ps: TermParamClause), _, _) =
10+
TypeRepr.of[A].typeSymbol.primaryConstructor.tree
11+
12+
val names = ps.params.map(p => s"${p.name}: ${p.tpt.show}").mkString("(", ", ", ")")
13+
14+
Expr(s"${Type.show[A]}: $names isImplicit=${ps.isImplicit}, isGiven=${ps.isGiven}")
15+
}

tests/run-macros/i12021/Test_2.scala

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
2+
class X1(implicit i: Int)
3+
class X2(using i: Int)
4+
5+
@main def Test = {
6+
println(inspect[X1])
7+
println(inspect[X2])
8+
}

0 commit comments

Comments
 (0)