aboutsummaryrefslogtreecommitdiff
path: root/src/dotty/tools/dotc/core/Decorators.scala
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2012-12-06 14:06:00 +0100
committerMartin Odersky <odersky@gmail.com>2012-12-06 14:06:00 +0100
commit90962407e72d88f8f3249ade0f6bd60ff15af5ce (patch)
tree6b2fc0ba13bad7c4532ebf1df39b0b2f5d7e70b6 /src/dotty/tools/dotc/core/Decorators.scala
parent2308509d2651ee78e1122b5d61b798c984c96c4d (diff)
downloaddotty-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.scala37
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)
+ }
+ }
+}
+