sun@sun-cpu:~/workspace/dev/miniboxing-plugin/sandbox(wip)$ cat macros.scala
import scala.reflect.macros.Context
import scala.language.experimental.macros
import scala.annotation.{Annotation, StaticAnnotation}
object Macros {
private def solveSequence(context: Context)(v: context.mirror.universe.ValDef, typeMappings: Map[context.Name, List[context.Type]]):(context.Name, Map[context.Type, context.Tree]) = {
import context.mirror.universe._
val x = v.mods.annotations.collectFirst{
case x@q"new expand.sequence[${Ident(nme2)}](...$args)" =>
if( args.flatten.length != typeMappings(nme2).length) {
context.error(x.pos, s"@sequence arguments list does not match the expand.args for $nme2")
}
val predef = context.mirror.staticModule("scala.Predef").asModule
val missing = Select(Ident(predef), newTermName("???"))
nme2 -> (typeMappings(nme2) zip args.flatten).toMap.withDefaultValue(missing)
}
x.get
}
}
sun@sun-cpu:~/workspace/dev/miniboxing-plugin/sandbox(wip)$ mb-scalac macros.scala
Picked up _JAVA_OPTIONS: -Xms2g -Xmx2g -Xss4m -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=512M -XX:ReservedCodeCacheSize=256m -XX:PermSize=256m -XX:+TieredCompilation -XX:+UseNUMA
macros.scala:15: error: type arguments [context.universe.Type,context.mirror.universe.Tree,List[(context.universe.Type, context.mirror.universe.Tree)]] do not conform to method zip's type parameter bounds [A1 >: context.universe.Type,B,That]
nme2 -> (typeMappings(nme2) zip args.flatten).toMap.withDefaultValue(missing)
^
macros.scala:15: error: type arguments [context.mirror.universe.Tree] do not conform to method withDefaultValue's type parameter bounds [B1 >: B]
nme2 -> (typeMappings(nme2) zip args.flatten).toMap.withDefaultValue(missing)
^
error: java.lang.AssertionError: assertion failed: Stupid node: typeMappings$1.apply(nme2).zip[context.universe.Type, context.mirror.universe.Tree, List[(context.universe.Type, context.mirror.universe.Tree)]] false false
at scala.tools.nsc.Global.assert(Global.scala:262)
at miniboxing.plugin.transform.prepare.PrepareTreeTransformer$PreparePhaseImpl$$anonfun$apply$1.apply(MiniboxPrepareTreeTransformer.scala:31)
at miniboxing.plugin.transform.prepare.PrepareTreeTransformer$PreparePhaseImpl$$anonfun$apply$1.apply(MiniboxPrepareTreeTransformer.scala:31)
at scala.reflect.internal.Trees$ForeachTreeTraverser.traverse(Trees.scala:1641)
at scala.reflect.internal.Trees$ForeachTreeTraverser.traverse(Trees.scala:1639)
at scala.reflect.internal.Trees$class.traverseComponents$1(Trees.scala:1283)
at scala.reflect.internal.Trees$class.itraverse(Trees.scala:1330)
at scala.reflect.internal.SymbolTable.itraverse(SymbolTable.scala:16)
at scala.reflect.internal.SymbolTable.itraverse(SymbolTable.scala:16)
at scala.reflect.api.Trees$Traverser.traverse(Trees.scala:2475)
at scala.reflect.internal.Trees$ForeachTreeTraverser.traverse(Trees.scala:1642)
at scala.reflect.internal.Trees$ForeachTreeTraverser.traverse(Trees.scala:1639)
at scala.reflect.internal.Trees$class.traverseComponents$1(Trees.scala:1294)