Skip to content

Instantly share code, notes, and snippets.

@folone
Created May 23, 2014 12:36
Show Gist options
  • Save folone/5aed1281521171abba3e to your computer and use it in GitHub Desktop.
Save folone/5aed1281521171abba3e to your computer and use it in GitHub Desktop.
quasiquote patternmatch for comprehension
> ++2.10.4
[info] Setting version to 2.10.4
[info] Set current project to wartremover (in build file:/Users/georgii/workspace/wartremover/)
> console
[info] Updating {file:/Users/georgii/workspace/wartremover/}wartremover...
[info] Resolving org.fusesource.jansi#jansi;1.4 ...
[info] Done updating.
[info] Compiling 24 Scala sources to /Users/georgii/workspace/wartremover/target/scala-2.10/classes...
[info] Starting scala interpreter...
[info]
Welcome to Scala version 2.10.4 (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0_51).
Type in expressions to have them evaluated.
Type :help for more information.
scala> import reflect.runtime.universe._
import reflect.runtime.universe._
scala> val q"for (..$enums) yield $body" = q"for(i <- List(1,2,3)) yield i"
<console>:10: error: exception during macro expansion:
java.lang.UnsupportedOperationException: Position.end on class scala.reflect.internal.util.OffsetPosition
at scala.reflect.internal.util.Position.end(Position.scala:126)
at scala.quasiquotes.TreeGen.closurePos$1(TreeGen.scala:670)
at scala.quasiquotes.TreeGen.mkFor(TreeGen.scala:677)
at org.scalamacros.paradise.parser.Parsers$Parser.parseFor$1(Parsers.scala:1443)
at org.scalamacros.paradise.parser.Parsers$Parser.expr0(Parsers.scala:1452)
at org.scalamacros.paradise.parser.Parsers$Parser$$anonfun$expr$1.apply(Parsers.scala:1373)
at org.scalamacros.paradise.parser.Parsers$Parser$$anonfun$expr$1.apply(Parsers.scala:1373)
at org.scalamacros.paradise.parser.Parsers$Parser.withPlaceholders(Parsers.scala:1218)
at org.scalamacros.paradise.parser.Parsers$Parser.expr(Parsers.scala:1373)
at org.scalamacros.paradise.parser.Parsers$Parser.statement(Parsers.scala:1346)
at org.scalamacros.paradise.parser.Parsers$Parser$$anonfun$templateStat$1.applyOrElse(Parsers.scala:3041)
at org.scalamacros.paradise.parser.Parsers$Parser$$anonfun$templateStat$1.applyOrElse(Parsers.scala:3033)
at scala.PartialFunction$OrElse.applyOrElse(PartialFunction.scala:165)
at org.scalamacros.paradise.parser.Parsers$Parser.statSeq(Parsers.scala:2965)
at org.scalamacros.paradise.parser.Parsers$Parser.templateOrTopStatSeq(Parsers.scala:3044)
at org.scalamacros.paradise.quasiquotes.Parsers$TermParser$$anonfun$entryPoint$1.apply(Parsers.scala:193)
at org.scalamacros.paradise.quasiquotes.Parsers$TermParser$$anonfun$entryPoint$1.apply(Parsers.scala:193)
at org.scalamacros.paradise.parser.Parsers$Parser.parseRule(Parsers.scala:356)
at org.scalamacros.paradise.quasiquotes.Parsers$Parser$$anonfun$parse$1.apply(Parsers.scala:30)
at org.scalamacros.paradise.quasiquotes.Parsers$Parser$$anonfun$parse$1.apply(Parsers.scala:30)
at org.scalamacros.paradise.parser.Parsers$Parser.checkNoEscapingPlaceholders(Parsers.scala:473)
at org.scalamacros.paradise.quasiquotes.Parsers$Parser.parse(Parsers.scala:30)
at org.scalamacros.paradise.quasiquotes.Quasiquotes$$anonfun$5.apply(Quasiquotes.scala:34)
at org.scalamacros.paradise.quasiquotes.Quasiquotes$$anonfun$5.apply(Quasiquotes.scala:34)
at org.scalamacros.paradise.quasiquotes.Quasiquotes.expandQuasiquote(Quasiquotes.scala:60)
at org.scalamacros.paradise.typechecker.FastTrack$ParadiseFastTrack$$anonfun$hijack$1$$anonfun$apply$1.apply(FastTrack.scala:22)
at org.scalamacros.paradise.typechecker.FastTrack$ParadiseFastTrack$$anonfun$hijack$1$$anonfun$apply$1.apply(FastTrack.scala:22)
at org.scalamacros.paradise.typechecker.FastTrack$$anonfun$1.applyOrElse(FastTrack.scala:14)
at org.scalamacros.paradise.typechecker.FastTrack$$anonfun$1.applyOrElse(FastTrack.scala:14)
at scala.runtime.AbstractPartialFunction.apply(AbstractPartialFunction.scala:33)
at scala.tools.reflect.FastTrack$FastTrackEntry.run(FastTrack.scala:25)
val q"for (..$enums) yield $body" = q"for(i <- List(1,2,3)) yield i"
^
> ++2.11.0
[info] Setting version to 2.11.0
[info] Set current project to wartremover (in build file:/Users/georgii/workspace/wartremover/)
> console
[info] Updating {file:/Users/georgii/workspace/wartremover/}wartremover...
[info] Resolving jline#jline;2.11 ...
[info] Done updating.
[info] Compiling 24 Scala sources to /Users/georgii/workspace/wartremover/target/scala-2.11/classes...
[warn] there were 25 deprecation warning(s); re-run with -deprecation for details
[warn] one warning found
[info] Starting scala interpreter...
[info]
Welcome to Scala version 2.11.0 (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0_51).
Type in expressions to have them evaluated.
Type :help for more information.
scala> import reflect.runtime.universe._
import reflect.runtime.universe._
scala> val q"for (..$enums) yield $body" = q"for(i <- List(1,2,3)) yield i"
enums: List[reflect.runtime.universe.Tree] = List(`<-`((i @ _), List(1, 2, 3)))
body: reflect.runtime.universe.Tree = i
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment