From 84313fbdff753d2a78eb19defb80283e46d0dc3c Mon Sep 17 00:00:00 2001 From: Nicolas Stucki Date: Sat, 20 Jan 2018 16:37:19 +0100 Subject: [PATCH 1/3] Fix #3875: Avoid NPE --- compiler/src/dotty/tools/dotc/parsing/Scanners.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/compiler/src/dotty/tools/dotc/parsing/Scanners.scala b/compiler/src/dotty/tools/dotc/parsing/Scanners.scala index 034a394b4a95..cc818a53b40d 100644 --- a/compiler/src/dotty/tools/dotc/parsing/Scanners.scala +++ b/compiler/src/dotty/tools/dotc/parsing/Scanners.scala @@ -950,7 +950,7 @@ object Scanners { setStrVal() } else { token = op - strVal = name.toString + strVal = if (name != null) name.toString else null litBuf.clear() } } From 425b0f05e38f2a9d124d9b0327b8a62e90cafe15 Mon Sep 17 00:00:00 2001 From: Nicolas Stucki Date: Sat, 20 Jan 2018 16:48:20 +0100 Subject: [PATCH 2/3] Improve Quoted.toString implementations Avoid leaking internal representation to the user --- library/src/scala/quoted/Liftable.scala | 4 +++- library/src/scala/quoted/TastyExpr.scala | 2 +- library/src/scala/quoted/TastyType.scala | 2 +- library/src/scala/quoted/Type.scala | 4 +++- 4 files changed, 8 insertions(+), 4 deletions(-) diff --git a/library/src/scala/quoted/Liftable.scala b/library/src/scala/quoted/Liftable.scala index f9fd08ef6a74..026f24287bcd 100644 --- a/library/src/scala/quoted/Liftable.scala +++ b/library/src/scala/quoted/Liftable.scala @@ -14,7 +14,9 @@ abstract class Liftable[T] { */ object Liftable { - final class ConstantExpr[T] private[Liftable](val value: T) extends Expr[T] + final class ConstantExpr[T] private[Liftable](val value: T) extends Expr[T] { + override def toString: String = s"Expr($value)" + } implicit def BooleanIsLiftable: Liftable[Boolean] = (x: Boolean) => new ConstantExpr(x) implicit def ByteLiftable: Liftable[Byte] = (x: Byte) => new ConstantExpr(x) diff --git a/library/src/scala/quoted/TastyExpr.scala b/library/src/scala/quoted/TastyExpr.scala index 4dd5448da031..1d401903a192 100644 --- a/library/src/scala/quoted/TastyExpr.scala +++ b/library/src/scala/quoted/TastyExpr.scala @@ -4,5 +4,5 @@ import scala.runtime.quoted.Unpickler.Pickled /** An Expr backed by a pickled TASTY tree */ final case class TastyExpr[T](tasty: Pickled, args: Seq[Any]) extends Expr[T] with TastyQuoted { - override def toString(): String = s"TastyExpr(, $args)" + override def toString(): String = s"Expr()" } diff --git a/library/src/scala/quoted/TastyType.scala b/library/src/scala/quoted/TastyType.scala index b63b30745ace..3cc43d406f66 100644 --- a/library/src/scala/quoted/TastyType.scala +++ b/library/src/scala/quoted/TastyType.scala @@ -4,5 +4,5 @@ import scala.runtime.quoted.Unpickler.Pickled /** A Type backed by a pickled TASTY tree */ final case class TastyType[T](tasty: Pickled, args: Seq[Any]) extends Type[T] with TastyQuoted { - override def toString(): String = s"TastyType(, $args)" + override def toString(): String = s"Type()" } diff --git a/library/src/scala/quoted/Type.scala b/library/src/scala/quoted/Type.scala index a023e5e8fe07..6c61246e7f95 100644 --- a/library/src/scala/quoted/Type.scala +++ b/library/src/scala/quoted/Type.scala @@ -9,7 +9,9 @@ abstract class Type[T] extends Quoted { /** Some basic type tags, currently incomplete */ object Type { - class TaggedPrimitive[T] private[Type] (implicit val ct: ClassTag[T]) extends Type[T] + class TaggedPrimitive[T] private[Type] (implicit val ct: ClassTag[T]) extends Type[T] { + override def toString: String = s"Type($ct)" + } implicit def UnitTag: Type[Unit] = new TaggedPrimitive[Unit] implicit def BooleanTag: Type[Boolean] = new TaggedPrimitive[Boolean] From b37ca5e7345ffe716f031613c2da7b7fba234859 Mon Sep 17 00:00:00 2001 From: Nicolas Stucki Date: Sat, 20 Jan 2018 16:59:52 +0100 Subject: [PATCH 3/3] Add missing final --- library/src/scala/quoted/Type.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/library/src/scala/quoted/Type.scala b/library/src/scala/quoted/Type.scala index 6c61246e7f95..068df6478d96 100644 --- a/library/src/scala/quoted/Type.scala +++ b/library/src/scala/quoted/Type.scala @@ -9,7 +9,7 @@ abstract class Type[T] extends Quoted { /** Some basic type tags, currently incomplete */ object Type { - class TaggedPrimitive[T] private[Type] (implicit val ct: ClassTag[T]) extends Type[T] { + final class TaggedPrimitive[T] private[Type] (implicit val ct: ClassTag[T]) extends Type[T] { override def toString: String = s"Type($ct)" }