@@ -971,7 +971,10 @@ object tpd extends Trees.Instance[Type] with TypedTreeInfo {
971971 /** Replace Inlined nodes and InlineProxy references to underlying arguments */
972972 def underlyingArgument (implicit ctx : Context ): Tree = {
973973 val mapToUnderlying = new MapToUnderlying {
974- override def skipLocal (sym : Symbol ): Boolean =
974+ /** Should get the rhs of this binding
975+ * Returns true if the symbol is a val or def generated by eta-expansion/inline
976+ */
977+ override protected def skipLocal (sym : Symbol ): Boolean =
975978 sym.is(InlineProxy ) || sym.is(Synthetic )
976979 }
977980 mapToUnderlying.transform(tree)
@@ -1018,17 +1021,26 @@ object tpd extends Trees.Instance[Type] with TypedTreeInfo {
10181021 */
10191022 class MapToUnderlying extends TreeMap {
10201023 override def transform (tree : Tree )(implicit ctx : Context ): Tree = tree match {
1021- case tree : Ident if tree.symbol.exists && ! tree.symbol.owner.isClass && ! tree.symbol.isAnonymousFunction && skipLocal(tree.symbol) =>
1024+ case tree : Ident if isBinding( tree.symbol) && skipLocal(tree.symbol) =>
10221025 tree.symbol.defTree match {
1023- case defTree : ValOrDefDef if ! defTree.rhs.isEmpty => transform(defTree.rhs)
1026+ case defTree : ValOrDefDef =>
1027+ val rhs = defTree.rhs
1028+ assert(! rhs.isEmpty)
1029+ transform(rhs)
10241030 case _ => tree
10251031 }
10261032 case Inlined (_, _, arg) => transform(arg)
10271033 case Block (Nil , arg) => transform(arg)
10281034 case NamedArg (_, arg) => transform(arg)
10291035 case tree => super .transform(tree)
10301036 }
1031- def skipLocal (sym : Symbol ): Boolean = true
1037+
1038+ /** Should get the rhs of this binding */
1039+ protected def skipLocal (sym : Symbol ): Boolean = true
1040+
1041+ /** Is this a symbol that of a local val or parameterless def for which we could get the rhs */
1042+ private def isBinding (sym : Symbol )(implicit ctx : Context ): Boolean =
1043+ sym.exists && ! sym.is(Param ) && ! sym.owner.isClass && ! sym.isAnonymousFunction
10321044 }
10331045
10341046 implicit class ListOfTreeDecorator (val xs : List [tpd.Tree ]) extends AnyVal {
0 commit comments