Skip to content

Commit

Permalink
minimal repro of AbstractMethodError
Browse files Browse the repository at this point in the history
  • Loading branch information
lihaoyi committed Feb 19, 2024
1 parent c23f6f4 commit e9fef76
Showing 1 changed file with 35 additions and 14 deletions.
49 changes: 35 additions & 14 deletions unroll/plugin/src-2/UnrollPhaseScala2.scala
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,10 @@ class UnrollPhaseScala2(val global: Global) extends PluginComponent with TypingT
annotatedParamListIndex: Int,
paramLists: List[List[ValDef]]) = {

println()
println("generateSingleForwarder")
println("paramIndex " + paramIndex)
println("nextParamIndex " + nextParamIndex)
val forwarderDefSymbol = defdef.symbol.owner.newMethod(defdef.name)
val symbolReplacements = defdef
.vparamss
Expand Down Expand Up @@ -117,7 +121,7 @@ class UnrollPhaseScala2(val global: Global) extends PluginComponent with TypingT
}

val forwarderCallArgs = newParamLists.zipWithIndex.map{case (v, i) =>
if (i == annotatedParamListIndex) forwardedValueParams ++ defaultCalls
if (i == annotatedParamListIndex) forwardedValueParams.take(nextParamIndex) ++ defaultCalls
else v.map( p => Ident(p.name).set(p.symbol))
}

Expand Down Expand Up @@ -186,19 +190,36 @@ class UnrollPhaseScala2(val global: Global) extends PluginComponent with TypingT
} match{
case Nil => Nil
case Seq((annotatedParamList, annotationIndices, paramListIndex)) =>
(annotationIndices :+ annotatedParamList.length).sliding(2).toList.reverse.foldLeft((Seq.empty[DefDef], defdef.symbol)){
case ((defdefs, nextSymbol), Seq(paramIndex, nextParamIndex)) =>
val forwarderDef = generateSingleForwarder(
implDef,
defdef,
paramIndex,
nextParamIndex,
nextSymbol,
paramListIndex,
defdef.vparamss
)
(forwarderDef +: defdefs, forwarderDef.symbol)
}._1
if (defdef.symbol.isAbstract) {
(annotationIndices :+ annotatedParamList.length).sliding(2).toList.foldLeft((Seq.empty[DefDef], defdef.symbol)) {
case ((defdefs, nextSymbol), Seq(paramIndex, nextParamIndex)) =>
val forwarderDef = generateSingleForwarder(
implDef,
defdef,
nextParamIndex,
paramIndex,
nextSymbol,
paramListIndex,
defdef.vparamss
)
(forwarderDef +: defdefs, forwarderDef.symbol)
}._1
}
else {
(annotationIndices :+ annotatedParamList.length).sliding(2).toList.reverse.foldLeft((Seq.empty[DefDef], defdef.symbol)){
case ((defdefs, nextSymbol), Seq(paramIndex, nextParamIndex)) =>
val forwarderDef = generateSingleForwarder(
implDef,
defdef,
paramIndex,
nextParamIndex,
nextSymbol,
paramListIndex,
defdef.vparamss
)
(forwarderDef +: defdefs, forwarderDef.symbol)
}._1
}

case multiple => sys.error("Multiple")
}
Expand Down

0 comments on commit e9fef76

Please sign in to comment.