summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/compiler/scala/tools/nsc/typechecker/Namers.scala2
-rw-r--r--src/library/scala/collection/jcl/Map.scala11
-rw-r--r--src/library/scala/collection/jcl/MutableIterable.scala9
-rw-r--r--src/library/scala/collection/jcl/MutableIterator.scala49
-rw-r--r--src/library/scala/collection/jcl/SortedSet.scala7
-rw-r--r--test/files/neg/badtok-1.check7
6 files changed, 32 insertions, 53 deletions
diff --git a/src/compiler/scala/tools/nsc/typechecker/Namers.scala b/src/compiler/scala/tools/nsc/typechecker/Namers.scala
index a6409c6398..de832671f8 100644
--- a/src/compiler/scala/tools/nsc/typechecker/Namers.scala
+++ b/src/compiler/scala/tools/nsc/typechecker/Namers.scala
@@ -131,7 +131,7 @@ trait Namers { self: Analyzer =>
if ((prev ne null) && prev.owner == context.scope && conflict(sym, prev.sym)) {
doubleDefError(sym.pos, prev.sym)
if (!inIDE) sym setInfo ErrorType // don't do this in IDE for stability
- context.scope unlink prev.sym
+ if (!inIDE) context.scope unlink prev.sym // let them co-exist...
context.scope enter sym
} else context.scope enter sym
} else context.scope enter sym
diff --git a/src/library/scala/collection/jcl/Map.scala b/src/library/scala/collection/jcl/Map.scala
index a702fb15f1..2feed2ca82 100644
--- a/src/library/scala/collection/jcl/Map.scala
+++ b/src/library/scala/collection/jcl/Map.scala
@@ -89,8 +89,15 @@ trait Map[K,E] extends MutableIterable[Tuple2[K,E]] with scala.collection.mutabl
override def filterKeys(p : K => Boolean) : Map.Projection[K,E] = new Filter(p);
protected class Filter(p : K => Boolean) extends Map.Projection[K,E] {
- override def elements = Map.this.elements.filter(e => p(e._1));
- override def removeKey(key : K) = {
+ override def elements = {
+ val i = Map.this.elements.filter(e => p(e._1));
+ new MutableIterator[(K,E)] {
+ def next = i.next
+ def hasNext = i.hasNext
+ def remove : Unit = throw new Error
+ }
+ }
+ override def removeKey(key : K) = {
if (!p(key)) throw new IllegalArgumentException;
Map.this.removeKey(key);
}
diff --git a/src/library/scala/collection/jcl/MutableIterable.scala b/src/library/scala/collection/jcl/MutableIterable.scala
index c4a8fb7dda..5683e6bd3e 100644
--- a/src/library/scala/collection/jcl/MutableIterable.scala
+++ b/src/library/scala/collection/jcl/MutableIterable.scala
@@ -86,7 +86,14 @@ trait MutableIterable[A] extends scala.Collection[A] {
}
override def filter(p0 : A => Boolean) : MutableIterable.Projection[A] =
MutableIterable.this.projection.filter(a => p(a) && p0(a));
- def elements = MutableIterable.this.elements.filter(p);
+ def elements = {
+ val i = MutableIterable.this.elements.filter(p);
+ new MutableIterator[A] {
+ def next = i.next
+ def hasNext = i.hasNext
+ def remove : Unit = throw new Error
+ }
+ }
def size = size0;
}
}
diff --git a/src/library/scala/collection/jcl/MutableIterator.scala b/src/library/scala/collection/jcl/MutableIterator.scala
index d90545c7a2..b887e3c76f 100644
--- a/src/library/scala/collection/jcl/MutableIterator.scala
+++ b/src/library/scala/collection/jcl/MutableIterator.scala
@@ -27,10 +27,12 @@ object MutableIterator {
trait MutableIterator[A] extends Iterator[A] {
def remove : Unit;
+ /* filter doesnt' support remove yet.
override def filter(f : A => Boolean) : MutableIterator[A] = {
val buffered = this.buffered0;
new buffered.Filter(f);
}
+ */
override def map[B](f: A => B) : MutableIterator[B] = new Map(f);
/** A type-safe version of contains.
@@ -59,51 +61,10 @@ trait MutableIterator[A] extends Iterator[A] {
changed;
}
- private[jcl] def buffered0 : MutableIterator[A]#Buffered = new BufferedImpl;
-
/** Standard implementation of a mapped iterator. **/
class Map[B](f : A => B) extends MutableIterator[B] {
- def hasNext = MutableIterator.this.hasNext;
- def next = f(MutableIterator.this.next);
- def remove = MutableIterator.this.remove;
- }
-
- private[jcl] trait Buffered extends MutableIterator[A] {
- private[jcl] override def buffered0 : this.type = this;
- private[jcl] def peekNext : A;
- private[jcl] def seekNext(f : A => Boolean) : Option[A] = {
- while (hasNext && !f(peekNext)) next;
- if (hasNext) Some(peekNext) else None;
- }
- class Filter(p : A => Boolean) extends MutableIterator[A] {
- // XXX: broken
- private[jcl] def peekNext = Buffered.this.seekNext(p) match {
- case Some(result) => result;
- case None => throw new Predef.NoSuchElementException;
- }
- override def next = {
- val ret = peekNext; val ret0 = Buffered.this.next; Predef.assert(ret == ret0); ret;
- }
- override def hasNext : Boolean = seekNext(p) != None;
- override def remove : Unit = Buffered.this.remove;
- }
- }
-
- private[jcl] class BufferedImpl extends Buffered {
- protected var head : A = _;
- protected def underlying = MutableIterator.this;
- private[jcl] def peekNext = {
- if (head == null) head = underlying.next;
- head;
- }
- override def hasNext = head != null || underlying.hasNext;
- override def next = {
- val ret = peekNext; head = null.asInstanceOf[A]; ret;
- }
- override def remove = {
- if (head != null) throw new Predef.NoSuchElementException;
- underlying.remove;
- }
- override def toString = "buffered[" + underlying + "]";
+ def hasNext = MutableIterator.this.hasNext
+ def next = f(MutableIterator.this.next)
+ def remove = MutableIterator.this.remove
}
}
diff --git a/src/library/scala/collection/jcl/SortedSet.scala b/src/library/scala/collection/jcl/SortedSet.scala
index 2bb6502f29..d1317096ad 100644
--- a/src/library/scala/collection/jcl/SortedSet.scala
+++ b/src/library/scala/collection/jcl/SortedSet.scala
@@ -60,8 +60,8 @@ trait SortedSet[A] extends scala.collection.SortedSet[A] with jcl.Set[A] with So
if (from == None && until == None) throw new IllegalArgumentException;
if (from != None && until != None && !(SortedSet.this.compare(from.get, until.get) < 0))
throw new IllegalArgumentException;
- override def elements : MutableIterator[A] =
- new RangeIterator(SortedSet.this.elements.buffered0);
+ //override def elements : MutableIterator[A] =
+ // new RangeIterator(SortedSet.this.elements.buffered0);
private def contains1(key : A) =
(from == None || (compare(from.get,key) <= 0)) &&
(until == None || (compare(key,until.get) < 0));
@@ -73,6 +73,7 @@ trait SortedSet[A] extends scala.collection.SortedSet[A] with jcl.Set[A] with So
if (until != None && compare(this.until.get, until.get) < 0) return rangeImpl(from, this.until);
SortedSet.this.rangeImpl(from, until);
}
+ /*
class RangeIterator(underlying : MutableIterator[A]#Buffered) extends MutableIterator[A] {
if (from != None)
underlying.seekNext(a => compare(from.get, a) <= 0);
@@ -87,6 +88,6 @@ trait SortedSet[A] extends scala.collection.SortedSet[A] with jcl.Set[A] with So
case None => throw new NoSuchElementException;
}
def remove = underlying.remove;
- }
+ }*/
}
}
diff --git a/test/files/neg/badtok-1.check b/test/files/neg/badtok-1.check
index 27c7587828..6523358c79 100644
--- a/test/files/neg/badtok-1.check
+++ b/test/files/neg/badtok-1.check
@@ -1,4 +1,7 @@
-badtok-1.scala:2: error: unexpected quote after symbol
+badtok-1.scala:2: error: expected class or object definition
'42'
^
-one error found
+badtok-1.scala:2: error: unclosed character literal
+'42'
+ ^
+two errors found