diff options
author | Martin Odersky <odersky@gmail.com> | 2012-12-06 14:06:00 +0100 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2012-12-06 14:06:00 +0100 |
commit | 90962407e72d88f8f3249ade0f6bd60ff15af5ce (patch) | |
tree | 6b2fc0ba13bad7c4532ebf1df39b0b2f5d7e70b6 /src/dotty/tools/dotc/core/Decorators.scala | |
parent | 2308509d2651ee78e1122b5d61b798c984c96c4d (diff) | |
download | dotty-90962407e72d88f8f3249ade0f6bd60ff15af5ce.tar.gz dotty-90962407e72d88f8f3249ade0f6bd60ff15af5ce.tar.bz2 dotty-90962407e72d88f8f3249ade0f6bd60ff15af5ce.zip |
Initial commit
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) + } + } +} + |