Created
May 23, 2014 12:36
-
-
Save folone/5aed1281521171abba3e to your computer and use it in GitHub Desktop.
quasiquote patternmatch for comprehension
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
> ++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" | |
^ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
> ++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