scala / bug

Scala 2 bug reports only. Please, no questions — proper bug reports only.
https://scala-lang.org
232 stars 21 forks source link

q"trait X" doesn't match q"trait X{}" #8396

Closed scabug closed 6 years ago

scabug commented 10 years ago
scala> val q"trait X" = q"trait X {}"
scala.MatchError: abstract trait X extends scala.AnyRef {
  <empty>
} (of class scala.reflect.internal.Trees$ClassDef)
  ... 32 elided
scabug commented 10 years ago

Imported From: https://issues.scala-lang.org/browse/SI-8396?orig=1 Reporter: @xeno-by Affected Versions: 2.11.0-RC1

scabug commented 10 years ago

@densh said: Caused by EmptyTree inserted into the body of the empty template during parsing:

scala> showRaw(q"trait X {}")
res0: String = ClassDef(Modifiers(ABSTRACT | INTERFACE | DEFAULTPARAM/TRAIT), TypeName("X"), List(), Template(List(Select(Ident(scala), TypeName("AnyRef"))), noSelfType, List(EmptyTree)))

scala> showRaw(q"trait X ")
res1: String = ClassDef(Modifiers(ABSTRACT | INTERFACE | DEFAULTPARAM/TRAIT), TypeName("X"), List(), Template(List(Select(Ident(scala), TypeName("AnyRef"))), noSelfType, List()))
scabug commented 10 years ago

@densh said: Related:

scala> val q"new ..$parents {}" = q"new Foo with Bar {}"
parents: List[universe.Tree] = List(Foo, Bar)

scala> val q"new ..$parents {}" = q"new Foo with Bar "
scala.MatchError: {
  final class $anon extends Foo with Bar {
    def <init>() = {
      super.<init>();
      ()
    }
  };
  new $anon()
} (of class scala.reflect.internal.Trees$Block)
  ... 32 elided
SethTisue commented 6 years ago

closing all quasiquotes tickets; see https://github.com/scala/bug/issues/10755