diff options
Diffstat (limited to 'src/dotty/tools/dotc/core/Decorators.scala')
-rw-r--r-- | src/dotty/tools/dotc/core/Decorators.scala | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/src/dotty/tools/dotc/core/Decorators.scala b/src/dotty/tools/dotc/core/Decorators.scala new file mode 100644 index 000000000..ba3123358 --- /dev/null +++ b/src/dotty/tools/dotc/core/Decorators.scala @@ -0,0 +1,37 @@ +package dotty.tools.dotc +package core + +import Contexts._, Names._ + +object Decorators { + + implicit class toTypeNameDecorator(val s: String) extends AnyVal { + def toTypeName(implicit context: Context): TypeName = + context.names.newTypeName(s) + } + + implicit class toTermNameDecorator(val s: String) extends AnyVal { + def toTermName(implicit context: Context): TermName = + context.names.newTermName(s) + } + + final val MaxRecursions = 1000 + + implicit class ListDecorator[T](val xs: List[T]) extends AnyVal { + def filterConserve(p: T => Boolean): List[T] = { + def loop(xs: List[T], nrec: Int): List[T] = xs match { + case Nil => xs + case x :: xs1 => + if (nrec < MaxRecursions) { + val ys1 = loop(xs1, nrec + 1) + if (p(x)) + if (ys1 eq xs1) xs else x :: ys1 + else + ys1 + } else xs filter p + } + loop(xs, 0) + } + } +} + |