File tree Expand file tree Collapse file tree 2 files changed +49
-0
lines changed Expand file tree Collapse file tree 2 files changed +49
-0
lines changed Original file line number Diff line number Diff line change 1+ package foo
2+
3+ case class FirstArg (value : Any , source : String )
4+ object FirstArg {
5+ inline given as FirstArg = $ {Macros .argsImpl}
6+ }
7+
8+ object Macros {
9+ import language .experimental .macros
10+ import scala .quoted ._
11+ import scala .tasty ._
12+
13+ def argsImpl given (qctx : QuoteContext ): Expr [FirstArg ] = {
14+ import qctx .tasty ._
15+ var enclosingCls : ClassDefSymbol = rootContext.owner.asInstanceOf [ClassDefSymbol ]
16+ def enclosingParamList (owner : Symbol ): Seq [Seq [Symbol ]] =
17+ owner match {
18+ case IsClassDefSymbol (x) =>
19+ enclosingCls = x
20+ x.tree.constructor.paramss map { _ map {
21+ _.symbol
22+ }}
23+ case _ =>
24+ enclosingParamList(owner.owner)
25+ }
26+ def literal (value : String ): Expr [String ] =
27+ Literal (Constant (value)).seal.asInstanceOf [Expr [String ]]
28+ val paramss = enclosingParamList(rootContext.owner)
29+ val firstArg = paramss.flatten.head
30+ val ref = Select .unique(This (enclosingCls), firstArg.name)
31+ ' { FirstArg ($ {ref.seal}, $ {firstArg.name.toExpr}) }
32+ }
33+ }
Original file line number Diff line number Diff line change 1+ object Test {
2+ var firstArgName = " "
3+ var firstArgValue : Any = " "
4+ def main (args : Array [String ]): Unit = {
5+ val x = new Foo (" something" , 2L , false )
6+ assert(" p1" == firstArgName)
7+ assert(" something" == firstArgValue)
8+ }
9+ def debug given foo .FirstArg : Unit = {
10+ firstArgName = the[foo.FirstArg ].source
11+ firstArgValue = the[foo.FirstArg ].value
12+ }
13+ class Foo (p1 : String , p2 : Long , p3 : Boolean ) {
14+ debug
15+ }
16+ }
You can’t perform that action at this time.
0 commit comments