@@ -411,7 +411,8 @@ class ReifyQuotes extends MacroTransformWithImplicits {
411
411
(tree : RefTree ) => {
412
412
def newCapture = {
413
413
val argTpe =
414
- if (tree.isTerm) defn.QuotedExprType .appliedTo(tree.tpe.widen)
414
+ if (tree.symbol.is(Inline )) tree.tpe.widen
415
+ else if (tree.isTerm) defn.QuotedExprType .appliedTo(tree.tpe.widen)
415
416
else defn.QuotedTypeType .appliedTo(defn.AnyType )
416
417
val selectArg = arg.select(nme.apply).appliedTo(Literal (Constant (i))).asInstance(argTpe)
417
418
val capturedArg = SyntheticValDef (UniqueName .fresh(tree.name.toTermName).toTermName, selectArg)
@@ -445,8 +446,9 @@ class ReifyQuotes extends MacroTransformWithImplicits {
445
446
/** Returns true if this tree will be captured by `makeLambda` */
446
447
private def isCaptured (tree : RefTree , level : Int )(implicit ctx : Context ): Boolean = {
447
448
// Check phase consistency and presence of capturer
448
- level == 1 && ! tree.symbol.is(Inline ) && levelOf.get(tree.symbol).contains(1 ) &&
449
- capturers.contains(tree.symbol)
449
+ ( (level == 1 && levelOf.get(tree.symbol).contains(1 )) ||
450
+ (level == 0 && tree.symbol.is(Inline ))
451
+ ) && capturers.contains(tree.symbol)
450
452
}
451
453
452
454
/** Transform `tree` and return the resulting tree and all `embedded` quotes
@@ -484,8 +486,15 @@ class ReifyQuotes extends MacroTransformWithImplicits {
484
486
case tree : Select if tree.symbol.isSplice =>
485
487
splice(tree)
486
488
case tree : RefTree if isCaptured(tree, level) =>
489
+ println(" ================" )
490
+ println(tree.show)
491
+ println(tree)
492
+ println()
493
+ println()
494
+ println()
487
495
val capturer = capturers(tree.symbol)
488
- splice(capturer(tree).select(if (tree.isTerm) nme.UNARY_~ else tpnme.UNARY_~ ))
496
+ if (tree.symbol.is(Inline )) capturer(tree)
497
+ else splice(capturer(tree).select(if (tree.isTerm) nme.UNARY_~ else tpnme.UNARY_~ ))
489
498
case Block (stats, _) =>
490
499
val last = enteredSyms
491
500
stats.foreach(markDef)
@@ -509,7 +518,17 @@ class ReifyQuotes extends MacroTransformWithImplicits {
509
518
tree
510
519
case tree : DefDef if tree.symbol.is(Macro ) && level == 0 =>
511
520
markDef(tree)
512
- nested(isQuote = true ).transform(tree)
521
+ val reifier = nested(isQuote = true )
522
+ val b = reifier.transform(tree)
523
+ val macroLambda = reifier.embedded.head
524
+ println(b.show)
525
+ println()
526
+ println()
527
+ println(macroLambda.show)
528
+ println()
529
+ println()
530
+ println()
531
+ println()
513
532
// check macro code as it if appeared in a quoted context
514
533
cpy.DefDef (tree)(rhs = EmptyTree )
515
534
case _ =>
0 commit comments