aboutsummaryrefslogtreecommitdiff
path: root/src/dotty/tools/dotc/util/Attachment.scala
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2014-02-11 15:16:17 +0100
committerMartin Odersky <odersky@gmail.com>2014-02-11 15:16:17 +0100
commitce55c3b08da29acafaa3c43796ead9cf854f1d34 (patch)
tree9f38ff6c1e3108f66d6d8ea31035150695000ac9 /src/dotty/tools/dotc/util/Attachment.scala
parent459d78dccc40c94dd7da8b5b29762a494595778b (diff)
downloaddotty-ce55c3b08da29acafaa3c43796ead9cf854f1d34.tar.gz
dotty-ce55c3b08da29acafaa3c43796ead9cf854f1d34.tar.bz2
dotty-ce55c3b08da29acafaa3c43796ead9cf854f1d34.zip
COnverted symOfTree and expandedTree to attachments.
Diffstat (limited to 'src/dotty/tools/dotc/util/Attachment.scala')
-rw-r--r--src/dotty/tools/dotc/util/Attachment.scala12
1 files changed, 11 insertions, 1 deletions
diff --git a/src/dotty/tools/dotc/util/Attachment.scala b/src/dotty/tools/dotc/util/Attachment.scala
index dc9602df3..7cc94754d 100644
--- a/src/dotty/tools/dotc/util/Attachment.scala
+++ b/src/dotty/tools/dotc/util/Attachment.scala
@@ -15,10 +15,20 @@ object Attachment {
private[Attachment] var next: Link[_]
def getAttachment[V](key: Key[V]): Option[V] =
- if (this.key eq key) Some(this.value.asInstanceOf[V])
+ if (this.key eq key) Some(value.asInstanceOf[V])
else if (next == null) None
else next.getAttachment(key)
+ def attachment[V](key: Key[V]): V =
+ if (this.key eq key) value.asInstanceOf[V]
+ else if (next == null) throw new NoSuchElementException
+ else next.attachment(key)
+
+ def attachmentOrElse[V](key: Key[V], default: V): V =
+ if (this.key eq key) value.asInstanceOf[V]
+ else if (next == null) default
+ else next.attachmentOrElse(key, default)
+
def pushAttachment[V](key: Key[V], value: V): Unit = {
assert(!getAttachment(key).isDefined)
next = new Link(key, value, next)