diff options
Diffstat (limited to 'test/files/pos')
692 files changed, 4880 insertions, 1341 deletions
diff --git a/test/files/pos/CustomGlobal.scala b/test/files/pos/CustomGlobal.scala index 30bf227950..a5668bd7c0 100644 --- a/test/files/pos/CustomGlobal.scala +++ b/test/files/pos/CustomGlobal.scala @@ -22,7 +22,7 @@ class CustomGlobal(currentSettings: Settings, reporter: Reporter) extends Global override def newTyper(context: Context): Typer = new CustomTyper(context) class CustomTyper(context : Context) extends Typer(context) { - override def typed(tree: Tree, mode: Int, pt: Type): Tree = { + override def typed(tree: Tree, mode: Mode, pt: Type): Tree = { if (tree.summaryString contains "Bippy") println("I'm typing a Bippy! It's a " + tree.shortClass + ".") diff --git a/test/files/pos/List1.scala b/test/files/pos/List1.scala index 9d3a51f4e3..30ebf5e1e7 100644 --- a/test/files/pos/List1.scala +++ b/test/files/pos/List1.scala @@ -9,15 +9,15 @@ object lists { def Nil[b] = new List[b] { def isEmpty: Boolean = true; - def head = error("head of Nil"); - def tail = error("tail of Nil"); + def head = sys.error("head of Nil"); + def tail = sys.error("tail of Nil"); } def Cons[c](x: c, xs: List[c]): List[c] = new List[c] { def isEmpty = false; def head = x; def tail = xs; - } + } def foo = { val intnil = Nil[Int]; diff --git a/test/files/pos/MailBox.scala b/test/files/pos/MailBox.scala index 2a3f02df0b..8e27bd362d 100644 --- a/test/files/pos/MailBox.scala +++ b/test/files/pos/MailBox.scala @@ -24,7 +24,7 @@ class MailBox { private val sent = new LinkedList[Any]; private var lastSent = sent; private val receivers = new LinkedList[Receiver]; - private var lastReceiver = receivers; + private var lastReceiver = receivers; def send(msg: Any): Unit = synchronized { var r = receivers; @@ -59,7 +59,7 @@ class MailBox { } f(msg) } - + def receiveWithin[a](msec: Long)(f: PartialFunction[Any, a]): a = { val msg: Any = synchronized { var s = sent; diff --git a/test/files/pos/SI-7638.scala b/test/files/pos/SI-7638.scala index da16e0bd2c..831475d005 100644 --- a/test/files/pos/SI-7638.scala +++ b/test/files/pos/SI-7638.scala @@ -9,7 +9,7 @@ trait ArrayVectorOrder[@specialized(Int) A] extends Ordering[A] { } object vectorOrder { - implicit def arrayOrder[@specialized(Int) A]() = + implicit def arrayOrder[@specialized(Int) A]() = /* * Before applying patch: * @@ -17,8 +17,8 @@ object vectorOrder { * during phase: mixin * library version: version 2.10.3-20130625-164027-d22e8d282c * compiler version: version 2.10.3-20130627-153946-54cb6af7db - * reconstructed args: - * + * reconstructed args: + * * last tree to typer: TypeTree(class Array) * symbol: class Array in package scala (flags: final) * symbol definition: final class Array[T >: ? <: ?] extends Object @@ -27,12 +27,12 @@ object vectorOrder { * context owners: anonymous class anon$1 -> package compile * * == Expanded type of tree == - * + * * TypeRef( * TypeSymbol(final class Array[T >: ? <: ?] extends Object) * args = List(TypeRef(TypeSymbol(final abstract class Int extends ))) * ) - * + * * unhandled exception while transforming SI-7638.scala * error: uncaught exception during compilation: java.lang.UnsupportedOperationException * error: java.lang.UnsupportedOperationException: tail of empty list diff --git a/test/files/pos/Transactions.scala b/test/files/pos/Transactions.scala index 525eff7514..32889f8180 100644 --- a/test/files/pos/Transactions.scala +++ b/test/files/pos/Transactions.scala @@ -28,7 +28,7 @@ class Transaction { var next: Transaction = null def this(hd: Transaction, tl: Transaction) = { this(); this.head = head; this.next = next } - + def makeAbort() = synchronized { while (status != Transaction.Aborted && status != Transaction.Committed) { status = Transaction.Abortable @@ -48,7 +48,7 @@ class Transaction { case ex: AbortException => abort(); None case ex: Throwable => abort(); throw ex } - + } trait Transactional { @@ -58,7 +58,7 @@ trait Transactional { /** copy back snapshot */ def rollBack(): Unit - + var readers: Transaction var writer: Transaction @@ -66,11 +66,11 @@ trait Transactional { if (writer == null) null else if (writer.status == Transaction.Running) writer else { - if (writer.status != Transaction.Committed) rollBack(); - writer = null; - null + if (writer.status != Transaction.Committed) rollBack(); + writer = null; + null } - + def getter(thisTrans: Transaction) { if (writer == thisTrans) return var r = readers @@ -96,7 +96,7 @@ trait Transactional { synchronized { val w = currentWriter() if (w != null) - if (thisTrans.id < w.id) { w.makeAbort(); rollBack() } + if (thisTrans.id < w.id) { w.makeAbort(); rollBack() } else throw new AbortException var r = readers while (r != null && r.head.status != Transaction.Running) { r = r.next; readers = r } @@ -111,4 +111,3 @@ trait Transactional { } } } - diff --git a/test/files/pos/annotated-original/M_1.scala b/test/files/pos/annotated-original/M_1.scala index 01654e02cf..84a01bcce5 100644 --- a/test/files/pos/annotated-original/M_1.scala +++ b/test/files/pos/annotated-original/M_1.scala @@ -1,7 +1,7 @@ import language.experimental.macros -import reflect.macros.Context +import scala.reflect.macros.blackbox.Context object M { - def impl(c: Context)(a: c.Expr[Any]) = c.Expr[Any](c.resetLocalAttrs(a.tree)) + def impl(c: Context)(a: c.Expr[Any]) = c.Expr[Any](c.untypecheck(a.tree)) def m(a: Any) = macro impl } diff --git a/test/files/pos/annotated-treecopy/Impls_Macros_1.scala b/test/files/pos/annotated-treecopy/Impls_Macros_1.scala index d92fbca380..79edbfffd8 100644 --- a/test/files/pos/annotated-treecopy/Impls_Macros_1.scala +++ b/test/files/pos/annotated-treecopy/Impls_Macros_1.scala @@ -1,5 +1,5 @@ import scala.language.experimental.macros -import scala.reflect.macros.Context +import scala.reflect.macros.blackbox.Context import collection.mutable.ListBuffer import collection.mutable.Stack @@ -15,14 +15,15 @@ object Macros { def tree_impl[T:c.WeakTypeTag,U:c.WeakTypeTag](c: Context) (f:c.Expr[Function1[T,U]]): c.Expr[Function1[T,U]] = { import c.universe._ + import internal._ val ttag = c.weakTypeTag[U] f match { case Expr(Function(List(ValDef(_,n,tp,_)),b)) => // normalize argument name var b1 = new Transformer { override def transform(tree: Tree): Tree = tree match { - case Ident(x) if (x==n) => Ident(newTermName("_arg")) - case tt @ TypeTree() if tt.original != null => TypeTree(tt.tpe) setOriginal transform(tt.original) + case Ident(x) if (x==n) => Ident(TermName("_arg")) + case tt: TypeTree if tt.original != null => setOriginal(TypeTree(tt.tpe), transform(tt.original)) // without the fix to LazyTreeCopier.Annotated, we would need to uncomment the line below to make the macro work // that's because the pattern match in the input expression gets expanded into Typed(<x>, TypeTree(<Int @unchecked>)) // with the original of the TypeTree being Annotated(<@unchecked>, Ident(<x>)) @@ -34,17 +35,17 @@ object Macros { } }.transform(b) - val reifiedTree = c.reifyTree(treeBuild.mkRuntimeUniverseRef, EmptyTree, b1) + val reifiedTree = c.reifyTree(gen.mkRuntimeUniverseRef, EmptyTree, b1) val reifiedExpr = c.Expr[scala.reflect.runtime.universe.Expr[T => U]](reifiedTree) val template = c.universe.reify(new (T => U) with TypedFunction { - override def toString = c.literal(tp+" => "+ttag.tpe+" { "+b1.toString+" } ").splice // DEBUG + override def toString = c.Expr[String](q"""${tp+" => "+ttag.tpe+" { "+b1.toString+" } "}""").splice // DEBUG def tree = reifiedExpr.splice.tree - val typeIn = c.literal(tp.toString).splice - val typeOut = c.literal(ttag.tpe.toString).splice + val typeIn = c.Expr[String](q"${tp.toString}").splice + val typeOut = c.Expr[String](q"${ttag.tpe.toString}").splice def apply(_arg: T): U = c.Expr[U](b1)(ttag.asInstanceOf[c.WeakTypeTag[U]]).splice }) - val untyped = c.resetLocalAttrs(template.tree) + val untyped = c.untypecheck(template.tree) c.Expr[T => U](untyped) case _ => sys.error("Bad function type") diff --git a/test/files/pos/annotations.scala b/test/files/pos/annotations.scala index 706a715bad..4832ce4ecd 100644 --- a/test/files/pos/annotations.scala +++ b/test/files/pos/annotations.scala @@ -2,7 +2,7 @@ class ann(i: Int) extends scala.annotation.Annotation class cfann(x: String) extends annotation.ClassfileAnnotation // annotations on abstract types -abstract class C1[@serializable @cloneable +T, U, V[_]] +abstract class C1[@annotation.elidable(0) +T, U, V[_]] abstract class C2[@deprecated @ann(1) T <: Number, V] diff --git a/test/files/pos/annotations2.scala b/test/files/pos/annotations2.scala new file mode 100644 index 0000000000..3bce7f8ac4 --- /dev/null +++ b/test/files/pos/annotations2.scala @@ -0,0 +1,31 @@ + +class B[T](x: (T, T)) { + def this(xx: (T, Any, Any)) = this((xx._1, xx._1)) +} +class BAnn[T](x: (T, T)) extends scala.annotation.StaticAnnotation { + def this(xx: (T, Any, Any)) = this((xx._1, xx._1)) +} +class CAnn[T](x: (T, T)) extends scala.annotation.StaticAnnotation { + def this(xx: Class[T]) = this((xx.newInstance(), xx.newInstance())) +} + +class A1 { + val b1 = new B((1, 2, 3)) + val b2 = new B((1, 2)) + val b3 = new B[Int]((1, 2, 3)) + val b4 = new B[Int]((1, 2)) +} + +class A2 { + @BAnn((1, 2, 3)) val b1 = null + @BAnn((1, 2)) val b2 = null + @BAnn[Int]((1, 2, 3)) val b3 = null + @BAnn[Int]((1, 2)) val b4 = null +} + +class A3 { + @CAnn(classOf[Int]) val b1 = null + @CAnn((1, 2)) val b2 = null + @CAnn[Int](classOf[Int]) val b3 = null + @CAnn[Int]((1, 2)) val b4 = null +} diff --git a/test/files/pos/array-interfaces.scala b/test/files/pos/array-interfaces.scala index 4955911078..70cafd2bb1 100644 --- a/test/files/pos/array-interfaces.scala +++ b/test/files/pos/array-interfaces.scala @@ -1,7 +1,7 @@ object s { def f(x: Cloneable) = () def g(x: java.io.Serializable) = () - + def main(args: Array[String]): Unit = { f(args) g(args) diff --git a/test/files/pos/arrays2.scala b/test/files/pos/arrays2.scala index 2d5409cbb8..795c486e37 100644 --- a/test/files/pos/arrays2.scala +++ b/test/files/pos/arrays2.scala @@ -11,8 +11,8 @@ object arrays2 { // #2422 object arrays4 { - val args = Array[String]("World") - "Hello %1$s".format(args: _*) + val args = Array[String]("World") + "Hello %1$s".format(args: _*) } // #2461 diff --git a/test/files/pos/attachments-typed-another-ident.flags b/test/files/pos/attachments-typed-another-ident.flags new file mode 100644 index 0000000000..cd66464f2f --- /dev/null +++ b/test/files/pos/attachments-typed-another-ident.flags @@ -0,0 +1 @@ +-language:experimental.macros
\ No newline at end of file diff --git a/test/files/pos/attachments-typed-another-ident/Impls_1.scala b/test/files/pos/attachments-typed-another-ident/Impls_1.scala new file mode 100644 index 0000000000..98062a9c76 --- /dev/null +++ b/test/files/pos/attachments-typed-another-ident/Impls_1.scala @@ -0,0 +1,18 @@ +import scala.reflect.macros.blackbox.Context +import language.experimental.macros + +object MyAttachment + +object Macros { + def impl(c: Context) = { + import c.universe._ + import internal._ + val ident = updateAttachment(Ident(TermName("bar")), MyAttachment) + assert(attachments(ident).get[MyAttachment.type].isDefined, attachments(ident)) + val typed = c.typecheck(ident) + assert(attachments(typed).get[MyAttachment.type].isDefined, attachments(typed)) + c.Expr[Int](typed) + } + + def foo = macro impl +} diff --git a/test/files/pos/attachments-typed-another-ident/Macros_Test_2.scala b/test/files/pos/attachments-typed-another-ident/Macros_Test_2.scala new file mode 100644 index 0000000000..022639bfe9 --- /dev/null +++ b/test/files/pos/attachments-typed-another-ident/Macros_Test_2.scala @@ -0,0 +1,5 @@ +object Test extends App { + def bar = 2 + Macros.foo +} + diff --git a/test/files/pos/attachments-typed-ident/Impls_1.scala b/test/files/pos/attachments-typed-ident/Impls_1.scala index cc40893a93..25c0891880 100644 --- a/test/files/pos/attachments-typed-ident/Impls_1.scala +++ b/test/files/pos/attachments-typed-ident/Impls_1.scala @@ -1,4 +1,4 @@ -import scala.reflect.macros.Context +import scala.reflect.macros.blackbox.Context import language.experimental.macros object MyAttachment @@ -6,10 +6,11 @@ object MyAttachment object Macros { def impl(c: Context) = { import c.universe._ - val ident = Ident(newTermName("bar")) updateAttachment MyAttachment - assert(ident.attachments.get[MyAttachment.type].isDefined, ident.attachments) - val typed = c.typeCheck(ident) - assert(typed.attachments.get[MyAttachment.type].isDefined, typed.attachments) + import internal._ + val ident = updateAttachment(Ident(TermName("bar")), MyAttachment) + assert(attachments(ident).get[MyAttachment.type].isDefined, attachments(ident)) + val typed = c.typecheck(ident) + assert(attachments(typed).get[MyAttachment.type].isDefined, attachments(typed)) c.Expr[Int](typed) } diff --git a/test/files/pos/attributes.scala b/test/files/pos/attributes.scala index ec735d0aae..60e00bff7d 100644 --- a/test/files/pos/attributes.scala +++ b/test/files/pos/attributes.scala @@ -1,3 +1,5 @@ +class serializable extends annotation.StaticAnnotation + @serializable class C1; @serializable @volatile class C2; @serializable @volatile class C3; diff --git a/test/files/pos/bcode_throw_null/TN.scala b/test/files/pos/bcode_throw_null/TN.scala new file mode 100644 index 0000000000..ed38b59bae --- /dev/null +++ b/test/files/pos/bcode_throw_null/TN.scala @@ -0,0 +1,7 @@ +object TN { + + def pre1(b: Boolean) { + println(if (b) 1 else throw null) + } + +} diff --git a/test/files/pos/bounds.scala b/test/files/pos/bounds.scala index cfea4626c3..26bc84a1b9 100644 --- a/test/files/pos/bounds.scala +++ b/test/files/pos/bounds.scala @@ -1,11 +1,11 @@ trait Map[A, +C] { - def ++ [B1 >: C] (kvs: Iterable[Pair[A, B1]]): Map[A, B1] = this - def ++ [B1 >: C] (kvs: Iterator[Pair[A, B1]]): Map[A, B1] = this + def ++ [B1 >: C] (kvs: Iterable[Tuple2[A, B1]]): Map[A, B1] = this + def ++ [B1 >: C] (kvs: Iterator[Tuple2[A, B1]]): Map[A, B1] = this } class ListMap[A, +B] extends Map[A, B] {} object ListMap { def empty[X, Y] = new ListMap[X, Y] - def apply[A1, B2](elems: Pair[A1, B2]*): Map[A1, B2] = empty[A1,B2].++(elems.iterator) + def apply[A1, B2](elems: Tuple2[A1, B2]*): Map[A1, B2] = empty[A1,B2].++(elems.iterator) } diff --git a/test/files/pos/builders.scala b/test/files/pos/builders.scala index 51d8af88f8..0b620769c0 100644 --- a/test/files/pos/builders.scala +++ b/test/files/pos/builders.scala @@ -18,16 +18,16 @@ object builders { def += (elem: B) { buf += elem } def result: List[B] = buf.toList } -/* +/* def fill[A, Dim1, Dim2, Coll](n1: Int, n2: Int, elem: A)(implicit b1: Builder[Coll, Dim1, A], b2: Builder[Coll, Dim2, Dim1]) = { for (i <- 0 until n1) { for (j <- 0 until n2) { b1 += elem - } + } b2 += b1.result } b2.result - } + } */ /* implicit def arrayBuilder[A, B] = new Builder[Array[A], Array[B], B] { @@ -35,7 +35,7 @@ object builders { private val buf = new scala.collection.mutable.ListBuffer[B] def += (elem: B) { buf += elem } def result: Array[B] = buf.toArray - } + } */ class Iter[A, C](elems: List[A]) { def ++ [B >: A, D](xs: Iterable[B])(implicit b: Builder[C, D, B]): D = { @@ -48,7 +48,7 @@ object builders { b.result } } - + def main(args : Array[String]) : Unit = { val x1 = new Iter[Int, List[Int]](List(1, 2, 3)) // val x2 = new Iter[Int, Array[Int]](List(1, 2, 3)) diff --git a/test/files/pos/chang/Test.scala b/test/files/pos/chang/Test.scala index 9bb745e377..f74c6355b5 100644 --- a/test/files/pos/chang/Test.scala +++ b/test/files/pos/chang/Test.scala @@ -1,3 +1,3 @@ -object Test extends Application { +object Test extends App { new com.netgents.hello.Outer[String] } diff --git a/test/files/pos/channels.scala b/test/files/pos/channels.scala index 0a2274c47a..b2f0cdc321 100644 --- a/test/files/pos/channels.scala +++ b/test/files/pos/channels.scala @@ -6,7 +6,7 @@ case class ![a](chan: Channel[a], data: a) /* object Bang { - def unapply[a](x: ![a]): Option[{Channel[a], a}] = + def unapply[a](x: ![a]): Option[{Channel[a], a}] = Some(x.chan, x.data) } @@ -14,7 +14,7 @@ object Bang { object Test extends App { object IC extends Channel[Int] def f[b](x: ![b]): Int = x match { - case send: ![c] => + case send: ![c] => send.chan match { case IC => send.data } @@ -27,4 +27,3 @@ object Test2 extends App { case IC ! x => x } } - diff --git a/test/files/pos/clsrefine.scala b/test/files/pos/clsrefine.scala index b29c01db8b..0a016dec07 100644 --- a/test/files/pos/clsrefine.scala +++ b/test/files/pos/clsrefine.scala @@ -25,9 +25,9 @@ object test { val y1, y2 = 1; } val a: A { type X1 = Int; type X2 = Int } = b; - val a1 = new A { + val a1 = new A { type X1 = Int; - type X2 = String; + type X2 = String; val x1 = 1; val x2 = "hello" } diff --git a/test/files/pos/collectGenericCC.scala b/test/files/pos/collectGenericCC.scala index 8201c6a271..5c51a50d71 100644 --- a/test/files/pos/collectGenericCC.scala +++ b/test/files/pos/collectGenericCC.scala @@ -7,8 +7,8 @@ object Test { r foreach ((a: A) => b += a) b.result } - - collect[Int, Vector[Int]](List(1,2,3,4)) + + collect[Int, Vector[Int]](List(1,2,3,4)) collect[Char, String](List('1','2','3','4')) - collect[Char, Array[Char]](List('1','2','3','4')) + collect[Char, Array[Char]](List('1','2','3','4')) }
\ No newline at end of file diff --git a/test/files/pos/context.scala b/test/files/pos/context.scala index 13f6bb43c5..4e11d07eb4 100644 --- a/test/files/pos/context.scala +++ b/test/files/pos/context.scala @@ -12,10 +12,10 @@ class Context { abstract class SymbolWrapper { val context: Context; import context._; - + class Symbols { self: context.symbols.type => - + abstract class Symbol { def typ: types.Type; def sym: Symbol = typ.sym; @@ -29,7 +29,7 @@ abstract class TypeWrapper { class Types { self: context.types.type => - + abstract class Type { def sym: symbols.Symbol; def typ: Type = sym.typ; diff --git a/test/files/pos/cycle-jsoup.flags b/test/files/pos/cycle-jsoup.flags new file mode 100644 index 0000000000..ca20f55172 --- /dev/null +++ b/test/files/pos/cycle-jsoup.flags @@ -0,0 +1 @@ +-Ybreak-cycles diff --git a/test/files/pos/cycle-jsoup.scala b/test/files/pos/cycle-jsoup.scala new file mode 100644 index 0000000000..879e693537 --- /dev/null +++ b/test/files/pos/cycle-jsoup.scala @@ -0,0 +1,5 @@ +object Test { + def main(args : Array[String]) { + org.jsoup.Jsoup.parse(null: java.net.URL, 3000) + } +} diff --git a/test/files/pos/cycle.flags b/test/files/pos/cycle.flags new file mode 100644 index 0000000000..ca20f55172 --- /dev/null +++ b/test/files/pos/cycle.flags @@ -0,0 +1 @@ +-Ybreak-cycles diff --git a/test/files/pos/cycle/J_1.java b/test/files/pos/cycle/J_1.java new file mode 100644 index 0000000000..0cc218eebe --- /dev/null +++ b/test/files/pos/cycle/J_1.java @@ -0,0 +1,16 @@ +package bar; + +public class J_1 { + public void f(C.D arg) { + } +} + +class B extends J_1 { + public void g(C.D arg) { + } +} + +class C extends B { + public class D { + } +} diff --git a/test/files/pos/cycle/X_2.scala b/test/files/pos/cycle/X_2.scala new file mode 100644 index 0000000000..c1840f3b99 --- /dev/null +++ b/test/files/pos/cycle/X_2.scala @@ -0,0 +1,3 @@ +import bar.J_1._ //<--- illegal cyclic reference involving + +class X diff --git a/test/files/pos/cyclics-pos.scala b/test/files/pos/cyclics-pos.scala index 051bdd6ed8..395e88815a 100644 --- a/test/files/pos/cyclics-pos.scala +++ b/test/files/pos/cyclics-pos.scala @@ -1,26 +1,26 @@ trait Param[T] trait Abs { type T } trait Cyclic1[A <: Param[A]] // works -trait Cyclic2[A <: Abs { type T <: A }] -trait Cyclic3 { type A <: Abs { type T = A } } +trait Cyclic2[A <: Abs { type T <: A }] +trait Cyclic3 { type A <: Abs { type T = A } } trait Cyclic4 { type A <: Param[A] } // works -trait Cyclic5 { type AA <: Abs; type A <: AA { type T = A } } +trait Cyclic5 { type AA <: Abs; type A <: AA { type T = A } } trait IterableTemplate { type Elem type Constr <: IterableTemplate type ConstrOf[A] = Constr { type Elem = A } - + def iterator: Iterator[Elem] - + def map [B] (f: Elem => B): ConstrOf[B] - + def foreach(f: Elem => Unit) = iterator.foreach(f) } trait Iterable[A] extends IterableTemplate { self => - type Elem + type Elem type Constr <: Iterable[A] { type Constr <: Iterable.this.Constr } } diff --git a/test/files/pos/debug-reset-local-attrs.flags b/test/files/pos/debug-reset-local-attrs.flags new file mode 100644 index 0000000000..9c7d6400fc --- /dev/null +++ b/test/files/pos/debug-reset-local-attrs.flags @@ -0,0 +1 @@ +-Ydebug diff --git a/test/files/pos/debug-reset-local-attrs.scala b/test/files/pos/debug-reset-local-attrs.scala new file mode 100644 index 0000000000..8348657965 --- /dev/null +++ b/test/files/pos/debug-reset-local-attrs.scala @@ -0,0 +1 @@ +case class FT(f : Float) diff --git a/test/files/pos/delambdafy-lambdalift.scala b/test/files/pos/delambdafy-lambdalift.scala new file mode 100644 index 0000000000..e9da24ef37 --- /dev/null +++ b/test/files/pos/delambdafy-lambdalift.scala @@ -0,0 +1,8 @@ +class LambdaLift { + + def enclosingMethod(capturedArg: Int): Unit = { + def innerMethod(x: Int): Int = x + capturedArg + val f = (y: Int) => innerMethod(y) + } + +} diff --git a/test/files/pos/delambdafy-patterns.scala b/test/files/pos/delambdafy-patterns.scala new file mode 100644 index 0000000000..95d498629b --- /dev/null +++ b/test/files/pos/delambdafy-patterns.scala @@ -0,0 +1,15 @@ +class DelambdafyPatterns { + def bar: Unit = () + def wildcardPatternInTryCatch: Unit => Unit = (x: Unit) => + // patterns in try..catch are preserved so we need to be + // careful when it comes to free variable detction + // in particular a is _not_ free variable, also the + // `_` identifier has no symbol attached to it + try bar catch { + case a@(_:java.lang.reflect.InvocationTargetException) => + // refer to a so we trigger a bug where a is considered + // to be a free variable for enclosing lambda + val b = a + () + } +} diff --git a/test/files/pos/delambdafy_t6260_method.check b/test/files/pos/delambdafy_t6260_method.check new file mode 100644 index 0000000000..f5cd6947d1 --- /dev/null +++ b/test/files/pos/delambdafy_t6260_method.check @@ -0,0 +1,13 @@ +delambdafy_t6260_method.scala:3: error: bridge generated for member method apply: (bx: Object)Object in class map$extension1 +which overrides method apply: (v1: Object)Object in trait Function1 +clashes with definition of the member itself; +both have erased type (bx: Object)Object + ((bx: Box[X]) => new Box(f(bx.x)))(this) + ^ +delambdafy_t6260_method.scala:8: error: bridge generated for member method apply: (bx: Object)Object in class map21 +which overrides method apply: (v1: Object)Object in trait Function1 +clashes with definition of the member itself; +both have erased type (bx: Object)Object + ((bx: Box[X]) => new Box(f(bx.x)))(self) + ^ +two errors found diff --git a/test/files/pos/delambdafy_t6260_method.flags b/test/files/pos/delambdafy_t6260_method.flags new file mode 100644 index 0000000000..48b438ddf8 --- /dev/null +++ b/test/files/pos/delambdafy_t6260_method.flags @@ -0,0 +1 @@ +-Ydelambdafy:method diff --git a/test/files/pos/delambdafy_t6260_method.scala b/test/files/pos/delambdafy_t6260_method.scala new file mode 100644 index 0000000000..93b5448227 --- /dev/null +++ b/test/files/pos/delambdafy_t6260_method.scala @@ -0,0 +1,17 @@ +class Box[X](val x: X) extends AnyVal { + def map[Y](f: X => Y): Box[Y] = + ((bx: Box[X]) => new Box(f(bx.x)))(this) +} + +object Test { + def map2[X, Y](self: Box[X], f: X => Y): Box[Y] = + ((bx: Box[X]) => new Box(f(bx.x)))(self) + + def main(args: Array[String]) { + val f = (x: Int) => x + 1 + val g = (x: String) => x + x + + map2(new Box(42), f) + new Box("abc") map g + } +} diff --git a/test/files/pos/depmet_implicit_chaining_zw.scala b/test/files/pos/depmet_implicit_chaining_zw.scala index 93da3b0f8e..ce5ea476d8 100644 --- a/test/files/pos/depmet_implicit_chaining_zw.scala +++ b/test/files/pos/depmet_implicit_chaining_zw.scala @@ -3,7 +3,7 @@ trait Succ[N] trait ZipWith[N, S] { type T - val x: T = error("") + val x: T = sys.error("") } object ZipWith { @@ -15,7 +15,7 @@ object ZipWith { type T = Stream[S] => zWith.T // dependent types replace the associated types functionality } - // can't use implicitly[ZipWith[Succ[Succ[Zero]], Int => String => Boolean]], + // can't use implicitly[ZipWith[Succ[Succ[Zero]], Int => String => Boolean]], // since that will chop of the {type T = ... } refinement in adapt (pt = ZipWith[Succ[Succ[Zero]], Int => String => Boolean]) // this works // def zipWith(implicit zw: ZipWith[Succ[Succ[Zero]], Int => String => Boolean]): zw.T = zw.x @@ -25,4 +25,4 @@ object ZipWith { type _2 = Succ[Succ[Zero]] val zw = ?[ZipWith[_2, Int => String => Boolean]].x // : Stream[Int] => Stream[String] => Stream[Boolean] // val zw = implicitly[ZipWith[Succ[Succ[Zero]], Int => String => Boolean]{type T = Stream[Int] => Stream[String] => Stream[Boolean]}].x -}
\ No newline at end of file +} diff --git a/test/files/pos/depmet_implicit_norm_ret.scala b/test/files/pos/depmet_implicit_norm_ret.scala index bafd2f7c51..0c587cf164 100644 --- a/test/files/pos/depmet_implicit_norm_ret.scala +++ b/test/files/pos/depmet_implicit_norm_ret.scala @@ -1,29 +1,29 @@ object Test{ def ?[S <: AnyRef](implicit w : S) : w.type = w - + // fallback, lower priority (overloading rules apply: pick alternative in subclass lowest in subtyping lattice) class ZipWithDefault { implicit def ZeroZipWith[S] = new ZipWith[S] { type T = Stream[S] - } + } } - + object ZipWith extends ZipWithDefault { // def apply[S: ZipWith](s : S) = ?[ZipWith[S]].zipWith(s) // TODO: bug return type should be inferred def apply[S](s : S)(implicit zw: ZipWith[S]): zw.T = zw.zipWith(s) implicit def SuccZipWith[S,R](implicit zWith : ZipWith[R]) = new ZipWith[S => R] { type T = Stream[S] => zWith.T // dependent types replace the associated types functionality - } + } } - + trait ZipWith[S] { type T - def zipWith : S => T = error("") + def zipWith : S => T = sys.error("") } - + // bug: inferred return type = (Stream[A]) => java.lang.Object with Test.ZipWith[B]{type T = Stream[B]}#T // this seems incompatible with vvvvvvvvvvvvvvvvvvvvvv -- #3731 - def map[A,B](f : A => B) /* : Stream[A] => Stream[B]*/ = ZipWith(f) - val tst: Stream[Int] = map{x: String => x.length}(Stream("a")) -}
\ No newline at end of file + def map[A,B](f : A => B) /* : Stream[A] => Stream[B]*/ = ZipWith(f) + val tst: Stream[Int] = map{x: String => x.length}(Stream("a")) +} diff --git a/test/files/pos/depmet_implicit_oopsla_session.scala b/test/files/pos/depmet_implicit_oopsla_session.scala index e2c67d7c32..21588a56ad 100644 --- a/test/files/pos/depmet_implicit_oopsla_session.scala +++ b/test/files/pos/depmet_implicit_oopsla_session.scala @@ -11,19 +11,19 @@ object Sessions { def run(p: Stop, dp: Stop): Unit = {} } - implicit def InDual[A, B](implicit sessionDIn: Session[B]) = + implicit def InDual[A, B](implicit sessionDIn: Session[B]) = new Session[In[A, B]] { type Dual = Out[A, sessionDIn.Dual] - def run(p: In[A, B], dp: Dual): Unit = + def run(p: In[A, B], dp: Dual): Unit = sessionDIn.run(p.func(dp.x), dp.y) } - implicit def OutDual[A, B](implicit sessionDOut: Session[B]) = + implicit def OutDual[A, B](implicit sessionDOut: Session[B]) = new Session[Out[A, B]] { type Dual = In[A, sessionDOut.Dual] - def run(p: Out[A, B], dp: Dual): Unit = + def run(p: Out[A, B], dp: Dual): Unit = sessionDOut.run(p.y, dp.func(p.x)) } @@ -32,7 +32,7 @@ object Sessions { sealed case class Out[+A, +B](x: A, y: B) def addServer = - In{x: Int => + In{x: Int => In{y: Int => System.out.println("Thinking") Out(x+y, Stop())}} @@ -48,7 +48,7 @@ object Sessions { // def runSession[S, D](p: S, dp: D)(implicit s: Session[S]#HasDual[D]) = // s.run(p, dp) - // + // // def runSession[S, D](p: S, dp: D)(implicit s: Session[S]{type Dual=D}) = // s.run(p, dp) diff --git a/test/files/pos/depmet_implicit_oopsla_session_2.scala b/test/files/pos/depmet_implicit_oopsla_session_2.scala index 8d7daa6dc6..5c3b78e3f5 100644 --- a/test/files/pos/depmet_implicit_oopsla_session_2.scala +++ b/test/files/pos/depmet_implicit_oopsla_session_2.scala @@ -36,7 +36,7 @@ object Sessions { implicit def InDual[Data, Cont](implicit cont: Session[Cont]) = new Session[In[Data, Cont]] { type Dual = Out[Data, cont.Dual] - def run(self: Self, dual: Dual): Unit = + def run(self: Self, dual: Dual): Unit = cont.run(self.recv(dual.data), dual.cont) } @@ -46,13 +46,13 @@ object Sessions { implicit def OutDual[Data, Cont](implicit cont: Session[Cont]) = new Session[Out[Data, Cont]] { type Dual = In[Data, cont.Dual] - def run(self: Self, dual: Dual): Unit = + def run(self: Self, dual: Dual): Unit = cont.run(self.cont, dual.recv(self.data)) } // a concrete session def addServer = - In{x: Int => + In{x: Int => In{y: Int => System.out.println("Thinking") Out(x+y, Stop())}} @@ -71,7 +71,7 @@ object Sessions { // def runSession[S, D](p: S, dp: D)(implicit s: Session[S]#HasDual[D]) = // s.run(p, dp) - // + // // def runSession[S, D](p: S, dp: D)(implicit s: Session[S]{type Dual=D}) = // s.run(p, dp) diff --git a/test/files/pos/depmet_implicit_oopsla_session_simpler.scala b/test/files/pos/depmet_implicit_oopsla_session_simpler.scala index d2986ef56f..04b8f94e64 100644 --- a/test/files/pos/depmet_implicit_oopsla_session_simpler.scala +++ b/test/files/pos/depmet_implicit_oopsla_session_simpler.scala @@ -5,7 +5,7 @@ object Sessions { def run(dp: Dual): Unit } - sealed case class Stop extends Session { + sealed case class Stop() extends Session { type Dual = Stop def run(dp: Dual): Unit = {} @@ -14,7 +14,7 @@ object Sessions { // can't write B <: Session{type Dual = BDual} due to limitations in type inference algorithm // (type variables cannot occur on both sides of <:) // using B#Dual instead of BDual is too imprecise, since it is disconnected from the actual argument that is passed for B - // would be nice if we could introduce a universal quantification over BDual that is not part of the + // would be nice if we could introduce a universal quantification over BDual that is not part of the // type parameter list sealed case class In[A, B <: Session, BDual <: Session](recv: A => B)(implicit dual: B <:< Session{type Dual=BDual}) extends Session { type Dual = Out[A, BDual] @@ -29,7 +29,7 @@ object Sessions { } def addServer = - In{x: Int => + In{x: Int => In{y: Int => System.out.println("Thinking") Out(x+y, Stop())}} diff --git a/test/files/pos/depmet_implicit_oopsla_zipwith.scala b/test/files/pos/depmet_implicit_oopsla_zipwith.scala index fe69802d26..c76d02c1ae 100644 --- a/test/files/pos/depmet_implicit_oopsla_zipwith.scala +++ b/test/files/pos/depmet_implicit_oopsla_zipwith.scala @@ -15,7 +15,7 @@ object ZipWith { def manyApp = n => xs => xs } - implicit def SuccZipWith[N, S, R](implicit zw: ZipWith[N, R]) = + implicit def SuccZipWith[N, S, R](implicit zw: ZipWith[N, R]) = new ZipWith[Succ[N],S => R] { type T = Stream[S] => zw.T @@ -33,12 +33,12 @@ object ZipWith { object Test { def zWith[N, S](n: N, s: S)(implicit zw: ZipWith[N, S]): zw.T = zw.zipWith(n)(s) - def zipWith0: Stream[Int] = zWith(Zero(),0) + def zipWith0: Stream[Int] = zWith(Zero(),0) // (Stream[A]) => java.lang.Object with ZipWith[Zero,B]{type T = Stream[B]}#T // should normalise to: Stream[A] => Stream[B] def map[A, B](f: A => B) = zWith(Succ(Zero()),f) - + def zipWith3[A, B, C, D](f: A => B => C => D) = //: Stream[A] => Stream[B] => Stream[C] => Stream[D] = // BUG why do we need a return type? zWith(Succ(Succ(Succ(Zero()))),f) }
\ No newline at end of file diff --git a/test/files/pos/depmet_implicit_tpbetareduce.scala b/test/files/pos/depmet_implicit_tpbetareduce.scala index c0b9b4e8e4..35d260683b 100644 --- a/test/files/pos/depmet_implicit_tpbetareduce.scala +++ b/test/files/pos/depmet_implicit_tpbetareduce.scala @@ -1,10 +1,10 @@ trait HOSeq { trait Accumulator[+coll[x], elT] trait Iterable[+t] { - type m[+x] + type m[+x] def accumulator[t]: Accumulator[m, t] } - implicit def listAccumulator[elT]: Accumulator[List, elT] = new Accumulator[List, elT] {} + implicit def listAccumulator[elT]: Accumulator[List, elT] = new Accumulator[List, elT] {} trait List[+t] extends Iterable[t] { type m[+x] = List[x] def accumulator[t]: Accumulator[List, t] = listAccumulator[t] diff --git a/test/files/pos/dotless-targs.flags b/test/files/pos/dotless-targs.flags new file mode 100644 index 0000000000..ea7fc37e1a --- /dev/null +++ b/test/files/pos/dotless-targs.flags @@ -0,0 +1 @@ +-Yrangepos:false diff --git a/test/files/pos/dotless-targs.scala b/test/files/pos/dotless-targs.scala new file mode 100644 index 0000000000..8c0e244e4e --- /dev/null +++ b/test/files/pos/dotless-targs.scala @@ -0,0 +1,9 @@ +class A { + def fn1 = List apply 1 + def fn2 = List apply[Int] 2 + + def g1: Char = "g1" toList 0 + def g2: Char = "g2" apply 1 + + def h1 = List apply[List[Int]] (List(1), List(2)) mapConserve[List[Any]] (x => x) +} diff --git a/test/files/pos/elidable-tparams.scala b/test/files/pos/elidable-tparams.scala index e47951f61d..23b1cba615 100644 --- a/test/files/pos/elidable-tparams.scala +++ b/test/files/pos/elidable-tparams.scala @@ -3,7 +3,7 @@ import elidable._ class ElidableCrashTest { trait My - + @elidable(MINIMUM) def foo[a >: My <: My]: scala.Unit = () foo[My] // crash diff --git a/test/files/pos/erasure-nsquared.scala b/test/files/pos/erasure-nsquared.scala new file mode 100644 index 0000000000..b0e30ade58 --- /dev/null +++ b/test/files/pos/erasure-nsquared.scala @@ -0,0 +1,35 @@ +trait BigCast { + def bar(x: Int): AnyRef = ( + null + .asInstanceOf[List[AnyRef]].head + .asInstanceOf[List[AnyRef]].head + .asInstanceOf[List[AnyRef]].head + .asInstanceOf[List[AnyRef]].head + .asInstanceOf[List[AnyRef]].head + .asInstanceOf[List[AnyRef]].head + .asInstanceOf[List[AnyRef]].head + .asInstanceOf[List[AnyRef]].head + .asInstanceOf[List[AnyRef]].head + .asInstanceOf[List[AnyRef]].head + .asInstanceOf[List[AnyRef]].head + .asInstanceOf[List[AnyRef]].head + .asInstanceOf[List[AnyRef]].head + .asInstanceOf[List[AnyRef]].head + .asInstanceOf[List[AnyRef]].head + .asInstanceOf[List[AnyRef]].head + .asInstanceOf[List[AnyRef]].head + .asInstanceOf[List[AnyRef]].head + .asInstanceOf[List[AnyRef]].head + .asInstanceOf[List[AnyRef]].head + .asInstanceOf[List[AnyRef]].head + .asInstanceOf[List[AnyRef]].head + .asInstanceOf[List[AnyRef]].head + .asInstanceOf[List[AnyRef]].head + .asInstanceOf[List[AnyRef]].head + .asInstanceOf[List[AnyRef]].head + .asInstanceOf[List[AnyRef]].head + .asInstanceOf[List[AnyRef]].head + .asInstanceOf[List[AnyRef]].head + .asInstanceOf[List[AnyRef]].head + ) +} diff --git a/test/files/pos/exhaust_2.scala b/test/files/pos/exhaust_2.scala new file mode 100644 index 0000000000..4f4e47c43b --- /dev/null +++ b/test/files/pos/exhaust_2.scala @@ -0,0 +1,54 @@ +object ExhaustivityWarnBugReportMinimal { + //sealed is needed for the warning + sealed trait FoundNode[T]/*presence of parameters is irrelevant*/ + // This also causes a warning: + // sealed abstract class FoundNode[T]/*presence of parameters is irrelevant*/ + case class FoundFilter[T](/*presence of parameters is irrelevant*/) extends FoundNode[T] + case class FoundTypeCase[T](/*presence of parameters is irrelevant*/) extends FoundNode[T] + val f: Some[_] = ??? + f match { + case x: Some[t] => //no warning + } + //With these variants, no warnings: + //val v: (Some[Int], FoundNode[_]) = (???, ???) + //val v: (Some[AnyRef], FoundNode[_]) = (???, ???) + //val v: (Some[String], FoundNode[_]) = (???, ???) + + val v: (Some[_], FoundNode[_]) = (???, ???) + //Warning here: + v match { + case (x: Some[t], _: FoundNode[_]) => + } + v match { + case (x: Some[t], _) => + } + + v match { + case (x: Some[_], _) => + } + case class Foo[T]() + + val vp: (Foo[_], FoundNode[_]) = (???, ???) + vp match { + case (x: Foo[_], _) => + } + + //No warning here: + v match { + case (Some(y), _) => + } + + v match { + case (x, _) => + } + + val v2: (Some[_], Int) = (???, ???) + v2 match { + case (x: Some[t], _) => + } + + val v3: (Option[_], FoundNode[_]) = (???, ???) + v match { + case (x: Option[_], _) => + } +} diff --git a/test/files/pos/existential-java-case-class/Client.scala b/test/files/pos/existential-java-case-class/Client.scala new file mode 100644 index 0000000000..368899820f --- /dev/null +++ b/test/files/pos/existential-java-case-class/Client.scala @@ -0,0 +1,3 @@ +case class CC(x: J[_]) + +case class CC1(x: Any => J[_]) diff --git a/test/files/pos/existential-java-case-class/J.java b/test/files/pos/existential-java-case-class/J.java new file mode 100644 index 0000000000..7fd7848286 --- /dev/null +++ b/test/files/pos/existential-java-case-class/J.java @@ -0,0 +1 @@ +public class J<T extends String> {} diff --git a/test/files/pos/existentials.scala b/test/files/pos/existentials.scala index 0adbc701a6..9ca86d13d8 100644 --- a/test/files/pos/existentials.scala +++ b/test/files/pos/existentials.scala @@ -11,7 +11,7 @@ class A { // lazy val quux3a = f() // quux3a // } - + val bippy0 = f _ def bippy1 = f _ // lazy val bippy2 = f _ diff --git a/test/files/pos/exponential-spec.scala b/test/files/pos/exponential-spec.scala index 83aef58f7e..54515c1d21 100644 --- a/test/files/pos/exponential-spec.scala +++ b/test/files/pos/exponential-spec.scala @@ -5,7 +5,7 @@ trait Exp[T] object Test { def f[T](exp: Exp[T]): Exp[T] = ( - f[T] _ + f[T] _ compose f[T] compose f[T] compose f[T] @@ -42,6 +42,6 @@ object Test { compose f[T] compose f[T] compose f[T] - compose f[T] + compose f[T] )(exp) } diff --git a/test/files/pos/extractor-types.scala b/test/files/pos/extractor-types.scala new file mode 100644 index 0000000000..bb9659a13c --- /dev/null +++ b/test/files/pos/extractor-types.scala @@ -0,0 +1,30 @@ +package p1 { + object Ex { def unapply(p: Any): Option[_ <: Int] = null } + object Foo { val Ex(_) = null } +} +// a.scala:2: error: error during expansion of this match (this is a scalac bug). +// The underlying error was: type mismatch; +// found : Some[_$1(in value x$1)] where type _$1(in value x$1) +// required: Some[_$1(in method unapply)] +// object Foo { val Ex(_) = null } +// ^ +// one error found + +package p2 { + trait Other { + class Quux + object Baz { def unapply(x: Any): Option[Quux] = None } + } + trait Reifiers { + def f() { + val u2: Other = null + (null: Any) match { case u2.Baz(x) => println(x) } //: u2.Quux) } + // The underlying error was: type mismatch; + // found : Other#Quux + // required: u2.Quux + // x match { case u2.Baz(x) => println(x: u2.Quux) } + // ^ + // one error found + } + } +} diff --git a/test/files/pos/gadt-gilles.scala b/test/files/pos/gadt-gilles.scala index 309168c1e0..662be9017d 100644 --- a/test/files/pos/gadt-gilles.scala +++ b/test/files/pos/gadt-gilles.scala @@ -6,7 +6,7 @@ object Test { val x: A[C with D] = new B[C, D] {} val y: A[C with D] = x match { case b: B[u, v] => (new B[u, v] {}): A[u with v] } // OK - + def f[T, U](p: A[T with U]): A[T with U] = p match { case b: B[u, v] => new A[u with v] {} } // Not OK } diff --git a/test/files/pos/gadts2.scala b/test/files/pos/gadts2.scala index 2263cf13a6..d77c8a7ba4 100644 --- a/test/files/pos/gadts2.scala +++ b/test/files/pos/gadts2.scala @@ -4,13 +4,13 @@ object Test { case class MyInt(n: Int) extends Number case class MyDouble(d: Double) extends Number - trait Term[+a] + trait Term[a] case class Cell[a](var x: a) extends Term[a] final case class NumTerm(val n: Number) extends Term[Number] def f[a](t: Term[a], c: Cell[a]) { - t match { - case NumTerm(n) => c.x = MyDouble(1.0) + t match { + case NumTerm(n) => c.x = MyDouble(1.0) } } diff --git a/test/files/pos/gen-traversable-methods.scala b/test/files/pos/gen-traversable-methods.scala index 2604a09f11..bc720742cf 100644 --- a/test/files/pos/gen-traversable-methods.scala +++ b/test/files/pos/gen-traversable-methods.scala @@ -6,7 +6,7 @@ import collection._ object Test { - + def main(args: Array[String]) { val gen: GenTraversable[Int] = List(1, 2, 3) gen.head @@ -16,5 +16,5 @@ object Test { gen.lastOption gen.init } - + } diff --git a/test/files/pos/generic-sigs.scala b/test/files/pos/generic-sigs.scala index b112766056..98c50b8e82 100644 --- a/test/files/pos/generic-sigs.scala +++ b/test/files/pos/generic-sigs.scala @@ -6,7 +6,7 @@ object A { def f3(x: Class[_ <: Int]) = x def f4(x: Class[_ <: String with Int]) = x def f5(x: Class[_ <: Int with String]) = x - + class Bippy[T] def f6(x: Int) = new Bippy[t forSome { type t <: Int }] def f7(x: T forSome { type T <: Float }) = x @@ -14,7 +14,7 @@ object A { def f9(x: T forSome { type T <: runtime.BoxedUnit }) = x def f10(x: Int) = new Bippy[t forSome { type t <: Unit }] def f11(x: Int) = new Bippy[t forSome { type t >: Null }] - + class Boppy[+T1,-T2] def g1 = new Boppy[t forSome { type t <: Int }, u forSome { type u <: String }] } diff --git a/test/files/pos/gosh.scala b/test/files/pos/gosh.scala index 427df4d33c..98fae8a31e 100644 --- a/test/files/pos/gosh.scala +++ b/test/files/pos/gosh.scala @@ -7,35 +7,35 @@ object ShapeTest extends App { abstract class Shape { def draw(): Unit } - + class Line(s: Point, e: Point) extends Shape { def draw() { Console.println("draw line " + s + "," + e) } } - + abstract class Foo { type T <: Object - + def show(o: T): Unit def print() { Console.println("in Foo") } } - + abstract class ShapeFoo extends Foo { type T <: Shape def show(o: T) { o.draw() } override def print() { Console.println("in ShapeFoo") } } - + class LineFoo extends ShapeFoo { type T = Line override def print() { Console.println("in LineFoo") } } - + val p1 = new Point(1,4) val p2 = new Point(12, 28) - + val l1 = new Line(p1, p2) - + val l = new ShapeFoo { // ** // type T = Line // ** // override def print() { Console.println("in LineFoo") } // ** // diff --git a/test/files/pos/gui.scala b/test/files/pos/gui.scala index 322e0a6e22..3b4f49cf55 100644 --- a/test/files/pos/gui.scala +++ b/test/files/pos/gui.scala @@ -2,7 +2,7 @@ object Geom { trait Shape case class Point(x: Int, y: Int) extends Shape case class Rectangle(ll: Point, ur: Point) extends Shape { - def inset(delta: Int) = + def inset(delta: Int) = Rectangle(Point(ll.x - delta, ll.y - delta), Point(ur.x + delta, ur.y + delta)); } } @@ -20,7 +20,7 @@ trait Screen { } object DummyScreen extends Screen { - def drawRect(r: Geom.Rectangle, c: Color) { + def drawRect(r: Geom.Rectangle, c: Color) { Console.println("draw " + r + " with " + c) } def fillRect(r: Geom.Rectangle, c: Color) { @@ -55,7 +55,7 @@ object GUI { def mouseDown(p: Geom.Point): Unit } - abstract class Button(scr: Screen, p: Geom.Point, name: String) + abstract class Button(scr: Screen, p: Geom.Point, name: String) extends Glyph with MouseCtl { var enabled: Boolean = false val label = new Label(scr, p, name) @@ -86,7 +86,7 @@ object GUIClient { def quit() { Console.println("application exited") } } - class QuitButton (scr: Screen, p: Geom.Point, name: String, a: App) + class QuitButton (scr: Screen, p: Geom.Point, name: String, a: App) extends GUI.Button(scr, p, name) { def doit() { a.quit() } } diff --git a/test/files/pos/hk-infer.scala b/test/files/pos/hk-infer.scala index 7834282bf2..30e3476404 100644 --- a/test/files/pos/hk-infer.scala +++ b/test/files/pos/hk-infer.scala @@ -31,7 +31,7 @@ object DoesWorkHK { def BOOP(ys: Seq[M[_]]) = new Booper[M](xs ++ ys) } implicit def mkBoop[M[_]](xs: Seq[M[_]]) = new Booper[M](xs) - + def f1 = x BOOP y BOOP x1 BOOP x2 } diff --git a/test/files/pos/hkarray.scala b/test/files/pos/hkarray.scala index 3faae180f4..af1160300a 100644 --- a/test/files/pos/hkarray.scala +++ b/test/files/pos/hkarray.scala @@ -1,5 +1,5 @@ trait Foo[CC[_]] { } class Bip { - val x = new Foo[Array] { } + val x = new Foo[Array] { } }
\ No newline at end of file diff --git a/test/files/pos/hkrange.scala b/test/files/pos/hkrange.scala index 8d61167ad8..a6803230ed 100644 --- a/test/files/pos/hkrange.scala +++ b/test/files/pos/hkrange.scala @@ -1,5 +1,5 @@ class A { def f[CC[X] <: Traversable[X]](x: CC[Int]) = () - + f(1 to 5) } diff --git a/test/files/pos/imp2-pos.scala b/test/files/pos/imp2-pos.scala index 407b07f3fd..5460c60015 100644 --- a/test/files/pos/imp2-pos.scala +++ b/test/files/pos/imp2-pos.scala @@ -1,5 +1,5 @@ object Test { - import collection.mutable._ + import collection.mutable._ import collection.mutable._ val x = new HashMap } diff --git a/test/files/pos/implicit-anyval-2.10.flags b/test/files/pos/implicit-anyval-2.10.flags new file mode 100644 index 0000000000..94c8056747 --- /dev/null +++ b/test/files/pos/implicit-anyval-2.10.flags @@ -0,0 +1 @@ +-Xsource:2.10 diff --git a/test/files/pos/implicit-anyval-2.10.scala b/test/files/pos/implicit-anyval-2.10.scala new file mode 100644 index 0000000000..3082af73b8 --- /dev/null +++ b/test/files/pos/implicit-anyval-2.10.scala @@ -0,0 +1,3 @@ +object Test { + "": AnyVal // newly prohibited in 2.11, allowed under -Xsourse:2.10 +}
\ No newline at end of file diff --git a/test/files/pos/implicit-infix-ops.scala b/test/files/pos/implicit-infix-ops.scala index d7519e6340..66f3718e86 100644 --- a/test/files/pos/implicit-infix-ops.scala +++ b/test/files/pos/implicit-infix-ops.scala @@ -1,7 +1,7 @@ object Test { import Ordering.Implicits._ import Numeric.Implicits._ - + def f1[T: Numeric](x: T, y: T, z: T) = x + y + z def f2[T: Ordering](x: T, y: T, z: T) = if (x < y) (z > y) else (x < z) } @@ -9,7 +9,7 @@ object Test { object Int { import Ordering.Implicits._ import math.Integral.Implicits._ - + def f1[T: Integral](x: T, y: T, z: T) = (x + y + z) / z def f2[T: Ordering](x: T, y: T, z: T) = if (x < y) (z > y) else (x < z) } @@ -17,7 +17,7 @@ object Int { object Frac { import Ordering.Implicits._ import math.Fractional.Implicits._ - + def f1[T: Fractional](x: T, y: T, z: T) = (x + y + z) / z def f2[T: Ordering](x: T, y: T, z: T) = if (x < y) (z > y) else (x < z) }
\ No newline at end of file diff --git a/test/files/pos/implicits-new.scala b/test/files/pos/implicits-new.scala index ffc387132a..7b4f20c6c9 100644 --- a/test/files/pos/implicits-new.scala +++ b/test/files/pos/implicits-new.scala @@ -3,9 +3,9 @@ import scala.reflect.{ClassTag, classTag} // #1435 object t1435 { - implicit def a(s:String):String = error("") - implicit def a(i:Int):String = error("") - implicit def b(i:Int):String = error("") + implicit def a(s:String):String = sys.error("") + implicit def a(i:Int):String = sys.error("") + implicit def b(i:Int):String = sys.error("") } class C1435 { @@ -89,4 +89,4 @@ package foo2709 { // Problem with specs object specsProblem { println(implicitly[TypeTag[Class[_]]]) -}
\ No newline at end of file +} diff --git a/test/files/pos/implicits-old.scala b/test/files/pos/implicits-old.scala index 2c01dd0ba8..62ae6b835c 100644 --- a/test/files/pos/implicits-old.scala +++ b/test/files/pos/implicits-old.scala @@ -1,8 +1,8 @@ // #1435 object t1435 { - implicit def a(s:String):String = error("") - implicit def a(i:Int):String = error("") - implicit def b(i:Int):String = error("") + implicit def a(s:String):String = sys.error("") + implicit def a(i:Int):String = sys.error("") + implicit def b(i:Int):String = sys.error("") } class C1435 { @@ -45,7 +45,7 @@ object Test1625 { implicit def byName[A](x: =>A) = new Wrapped(x) implicit def byVal[A](x: A) = x - + def main(args: Array[String]) = { // val res:Wrapped = 7 // works @@ -57,7 +57,7 @@ object Test1625 { } object Test2188 { - implicit def toJavaList[A: ClassManifest](t:collection.Seq[A]):java.util.List[A] = java.util.Arrays.asList(t.toArray:_*) + implicit def toJavaList[A: ClassManifest](t:collection.Seq[A]):java.util.List[A] = java.util.Arrays.asList(t.toArray:_*) val x: java.util.List[String] = List("foo") } @@ -67,21 +67,21 @@ object TestNumericWidening { val x: java.lang.Long = y } -// #2709 -package foo2709 { - class A - class B - - package object bar { - implicit def a2b(a: A): B = new B - } - - package bar { - object test { - new A: B - } - } -} +// #2709 +package foo2709 { + class A + class B + + package object bar { + implicit def a2b(a: A): B = new B + } + + package bar { + object test { + new A: B + } + } +} // Problem with specs object specsProblem { diff --git a/test/files/pos/imports-pos.scala b/test/files/pos/imports-pos.scala index 5f70a5d2da..f6a55e5e07 100644 --- a/test/files/pos/imports-pos.scala +++ b/test/files/pos/imports-pos.scala @@ -7,10 +7,10 @@ object test { val foo = 1; - p("hello"); print("world"); S.out.println("!"); + p("hello"); print("world"); S.out.println("!"); S.out.flush(); } object test1 { import test._; foo -} +} diff --git a/test/files/pos/infer2-pos.scala b/test/files/pos/infer2-pos.scala index 06d0f5814f..2ce88be544 100644 --- a/test/files/pos/infer2-pos.scala +++ b/test/files/pos/infer2-pos.scala @@ -1,8 +1,7 @@ package test class Lst[T] case class cons[T](x: T, xs: Lst[T]) extends Lst[T] -case class nil[T] extends Lst[T] +case class nil[T]() extends Lst[T] object test { Console.println(cons(1, nil())) } - diff --git a/test/files/pos/inferbroadtype.scala b/test/files/pos/inferbroadtype.scala index 467bd0f186..de8f7aa184 100644 --- a/test/files/pos/inferbroadtype.scala +++ b/test/files/pos/inferbroadtype.scala @@ -2,7 +2,7 @@ object Test { abstract class Base { val changesBaseClasses: Boolean } class Concrete extends Base { val changesBaseClasses = true } def getBase : Base = new Concrete - + var c = new Base { val changesBaseClasses = true } c = getBase } diff --git a/test/files/pos/infersingle.scala b/test/files/pos/infersingle.scala index 6830fcd799..60f4ff07e6 100644 --- a/test/files/pos/infersingle.scala +++ b/test/files/pos/infersingle.scala @@ -1,5 +1,52 @@ -object Test { +object Test1 { def one[T](x: T): Option[T] = Some(x) val x = "one" val y: Option[x.type] = one(x) -}
\ No newline at end of file +} + +object Test2 { + // Has never worked, but seems desirable given the recent changes to + // pattern type inference. + val a = "" + object Id { + def unapply(xxxx: Any): Some[a.type] = Some[a.type](a) + } + val b: a.type = (a: a.type) match { + case Id(x) => x + } +} + +object Test3 { + val a = "" + object Id { + def unapply(xxxx: Any): Some[Test3.type] = Some[Test3.type](Test3) + } + val b: Test3.type = a match { + case Id(x) => x + } +} + +class Test4 { + val a = "" + object Id { + def unapply(xxxx: Any): Some[Test4.this.type] = Some[Test4.this.type](Test4.this) + } + val b: Test4.this.type = a match { + case Id(x) => x + } +} + +class Super5 { + final val q = "" + def q1: q.type = q +} + +class Test5 extends Super5 { + val a = "" + object Id { + def unapply(xxxx: Any): Some[Test5.super.q.type] = Some[Test5.super.q.type](q1) + } + val b: Test5.super.q.type = a match { + case Id(x) => x + } +} diff --git a/test/files/pos/inliner2.scala b/test/files/pos/inliner2.scala index fe231ec3c4..bc83e04312 100644 --- a/test/files/pos/inliner2.scala +++ b/test/files/pos/inliner2.scala @@ -10,7 +10,7 @@ class A { final def bob2() = if (debug) 1 else 2 } // Cool: -// +// // % ls -1 /tmp/2901/ // A$$anonfun$bob1$1.class // A$$anonfun$bob1$2.class @@ -20,7 +20,7 @@ class A { // A.class // // Observations: -// +// // (1) The inlined version accesses the field: the explicit one calls the accessor. // (2) The inlined version fails to eliminate boxing. With reference types it emits // an unneeded checkcast. @@ -30,7 +30,7 @@ class A { // inlined at all sites. // // Generated bytecode for the above: -// +// // public final int bob1(); // Code: // Stack=1, Locals=1, Args_size=1 @@ -44,7 +44,7 @@ class A { // 15: invokestatic #41; //Method scala/runtime/BoxesRunTime.boxToInteger:(I)Ljava/lang/Integer; // 18: invokestatic #45; //Method scala/runtime/BoxesRunTime.unboxToInt:(Ljava/lang/Object;)I // 21: ireturn -// +// // public final int bob2(); // Code: // Stack=1, Locals=1, Args_size=1 diff --git a/test/files/pos/java-access-pos/J.java b/test/files/pos/java-access-pos/J.java index 4f2024673c..b6bc3363a1 100644 --- a/test/files/pos/java-access-pos/J.java +++ b/test/files/pos/java-access-pos/J.java @@ -4,11 +4,11 @@ public abstract class J { public J() { } J(int x1) { } protected J(int x1, int x2) { } - + abstract void packageAbstract(); protected abstract void protectedAbstract(); public abstract void publicAbstract(); - + void packageConcrete() { return; } protected void protectedConcrete() { return; } public void publicConcrete() { return; } diff --git a/test/files/pos/java-access-pos/S1.scala b/test/files/pos/java-access-pos/S1.scala index cc739d9555..10730e3a70 100644 --- a/test/files/pos/java-access-pos/S1.scala +++ b/test/files/pos/java-access-pos/S1.scala @@ -6,7 +6,7 @@ class S1 extends J { override private[b] def packageAbstract() = () override protected[b] def protectedAbstract() = () override def publicAbstract() = () - + override private[b] def packageConcrete() = () override protected[b] def protectedConcrete() = () override def publicConcrete() = () @@ -26,7 +26,7 @@ class S3 extends J { protected[b] def packageAbstract() = () protected[b] def protectedAbstract() = () def publicAbstract() = () - + override protected[b] def packageConcrete() = () override protected[b] def protectedConcrete() = () override def publicConcrete() = () @@ -37,7 +37,7 @@ class S4 extends J { private[a] def packageAbstract() = () protected[a] def protectedAbstract() = () def publicAbstract() = () - + override private[a] def packageConcrete() = () override protected[a] def protectedConcrete() = () override def publicConcrete() = () @@ -48,14 +48,14 @@ class S5 extends J { def packageAbstract() = () def protectedAbstract() = () def publicAbstract() = () - + override def packageConcrete() = () override def protectedConcrete() = () override def publicConcrete() = () } /** Constructors. */ -class S6 extends J(1) { +class S6 extends J(1) { def packageAbstract() = () def protectedAbstract() = () def publicAbstract() = () diff --git a/test/files/pos/javaConversions-2.10-ambiguity.scala b/test/files/pos/javaConversions-2.10-ambiguity.scala new file mode 100644 index 0000000000..c4aad6cbfc --- /dev/null +++ b/test/files/pos/javaConversions-2.10-ambiguity.scala @@ -0,0 +1,10 @@ +import collection.{JavaConversions, mutable, concurrent} +import JavaConversions._ +import java.util.concurrent.{ConcurrentHashMap => CHM} + +object Bar { + def assertType[T](t: T) = t + val a = new CHM[String, String]() += (("", "")) + assertType[concurrent.Map[String, String]](a) +} +// vim: set et: diff --git a/test/files/pos/javaConversions-2.10-regression.scala b/test/files/pos/javaConversions-2.10-regression.scala index e1b81015ba..7c7ff03b55 100644 --- a/test/files/pos/javaConversions-2.10-regression.scala +++ b/test/files/pos/javaConversions-2.10-regression.scala @@ -3,10 +3,10 @@ import JavaConversions._ import java.util.concurrent.{ConcurrentHashMap => CHM} object Foo { - def buildCache2_9_simple[K <: AnyRef, V <: AnyRef]: mutable.ConcurrentMap[K, V] = - asScalaConcurrentMap(new CHM()) + def buildCache2_9_simple[K <: AnyRef, V <: AnyRef]: concurrent.Map[K, V] = + mapAsScalaConcurrentMap(new CHM()) - def buildCache2_9_implicit[K <: AnyRef, V <: AnyRef]: mutable.ConcurrentMap[K, V] = + def buildCache2_9_implicit[K <: AnyRef, V <: AnyRef]: concurrent.Map[K, V] = new CHM[K, V]() } diff --git a/test/files/pos/javaReadsSigs/fromjava.java b/test/files/pos/javaReadsSigs/fromjava.java index eca63961d5..92441b0c6b 100644 --- a/test/files/pos/javaReadsSigs/fromjava.java +++ b/test/files/pos/javaReadsSigs/fromjava.java @@ -22,11 +22,11 @@ class B { }; class Contra { // Not an Ordering<Character>. static Ordering<Object> charOrd = scala.math.Ordering.Char$.MODULE$; - + public boolean useCharOrd() { return charOrd.compare(new Object(), new Object()) == 0; } - + static Numeric<?> intNum = scala.math.Numeric.IntIsIntegral$.MODULE$; } @@ -36,13 +36,13 @@ public class fromjava { return null; } }; - + public static Function1<Tuple2<? extends Object, B>, B> f2 = new scala.runtime.AbstractFunction1<Tuple2<? extends Object, B>, B>() { public B apply(Tuple2<? extends Object, B> tup) { return tup._2(); } }; - + public static String vector(Vector<String> x) { Vector<String> y = x.take(2); return y.head(); diff --git a/test/files/pos/kinds.scala b/test/files/pos/kinds.scala new file mode 100644 index 0000000000..6d6da0c8b6 --- /dev/null +++ b/test/files/pos/kinds.scala @@ -0,0 +1,13 @@ +trait IllKind1 { + def g(s: String): String = s + def f: String = ??? + def f[C](c: C): String = g(f) +} + +trait IllKind2 { + def b1: Char = ??? + def b2: Byte = ??? + + def f1 = "abc" contains b1 + def f2 = "abc" contains b2 +} diff --git a/test/files/pos/lambdalift.scala b/test/files/pos/lambdalift.scala index 10bbf3ac12..bc997d6f81 100644 --- a/test/files/pos/lambdalift.scala +++ b/test/files/pos/lambdalift.scala @@ -11,5 +11,5 @@ object test { def h() = x; } g() + new inner().g(); - } + } } diff --git a/test/files/pos/liftcode_polymorphic.scala b/test/files/pos/liftcode_polymorphic.scala index 8f537d278a..249f5a0569 100644 --- a/test/files/pos/liftcode_polymorphic.scala +++ b/test/files/pos/liftcode_polymorphic.scala @@ -1,6 +1,6 @@ import scala.reflect.runtime.universe._ -object Append extends Application { +object Append extends App { def append[A](l1: List[A], l2: List[A]):List[A] = l1 match { diff --git a/test/files/pos/list-optim-check.flags b/test/files/pos/list-optim-check.flags new file mode 100644 index 0000000000..49d036a887 --- /dev/null +++ b/test/files/pos/list-optim-check.flags @@ -0,0 +1 @@ +-optimize diff --git a/test/files/pos/list-optim-check.scala b/test/files/pos/list-optim-check.scala new file mode 100644 index 0000000000..f6e6ddec77 --- /dev/null +++ b/test/files/pos/list-optim-check.scala @@ -0,0 +1,21 @@ +// Tests a map known to crash in optimizer with faster List map in SI-8240. +// Equivalent tests for collect and flatmap do not crash, but are provided +// anyway. +// See ticket SI-8334 for optimizer bug. +// TODO - Remove this test once SI-8334 is fixed and has its own test. +class A { + def f: Boolean = { + val xs = Nil map (_ => return false) + true + } + + def g: Boolean = { + val xs = Nil collect { case _ => return false } + true + } + + def h: Boolean = { + val xs = Nil flatMap { _ => return false } + true + } +} diff --git a/test/files/pos/listpattern.scala b/test/files/pos/listpattern.scala index b64068474c..47145bf037 100644 --- a/test/files/pos/listpattern.scala +++ b/test/files/pos/listpattern.scala @@ -1,7 +1,7 @@ trait Value {} case class FloatValue(x: Double) extends Value object Test { - def applyNumeric(op: (Double, Double) => Double): + def applyNumeric(op: (Double, Double) => Double): PartialFunction[List[Value], Value] = { case List(FloatValue(x), FloatValue(y)) => FloatValue(op(x, y)) } diff --git a/test/files/pos/lookupswitch.scala b/test/files/pos/lookupswitch.scala index 33594c0ea6..5d48251240 100644 --- a/test/files/pos/lookupswitch.scala +++ b/test/files/pos/lookupswitch.scala @@ -34,4 +34,3 @@ class A { case 20 => "20" } } -
\ No newline at end of file diff --git a/test/files/pos/looping-jsig.scala b/test/files/pos/looping-jsig.scala index e2d9e76229..6e3313c463 100644 --- a/test/files/pos/looping-jsig.scala +++ b/test/files/pos/looping-jsig.scala @@ -1,15 +1,15 @@ import scala.collection.mutable._ trait BugTrack { - trait B[+T] + trait B[+T] val cache : HashMap[A[_], B[_]] = HashMap.empty - def A[T](f: Int => B[T]): A[T] + def A[T](f: Int => B[T]): A[T] = new A[T]{def apply(in: Int) = f(in)} - + abstract class A[+T] extends (Int => B[T]) { def giveMeSame = this - } + } def amethod[T](p: =>A[T]): A[T] = A(in => cache.get(p) match { case Some(res) => res diff --git a/test/files/pos/lub-dealias-widen.scala b/test/files/pos/lub-dealias-widen.scala index 38854fbc5c..8d26708d65 100644 --- a/test/files/pos/lub-dealias-widen.scala +++ b/test/files/pos/lub-dealias-widen.scala @@ -27,7 +27,7 @@ object Test { = p2 >> { (xs: List[String]) => 0 } // This works after https://github.com/scala/scala/commit/a06d31f6a - // Before: error: inferred type arguments [List[String] => String,List[String] => String] + // Before: error: inferred type arguments [List[String] => String,List[String] => String] // do not conform to method &'s type parameter bounds // [G <: H,H >: Int => (Int => String)] val s = r & r2 diff --git a/test/files/pos/annotated-treecopy.check b/test/files/pos/macro-bundle-disambiguate-bundle.check index e69de29bb2..e69de29bb2 100644 --- a/test/files/pos/annotated-treecopy.check +++ b/test/files/pos/macro-bundle-disambiguate-bundle.check diff --git a/test/files/pos/macro-bundle-disambiguate-bundle.scala b/test/files/pos/macro-bundle-disambiguate-bundle.scala new file mode 100644 index 0000000000..04809317e1 --- /dev/null +++ b/test/files/pos/macro-bundle-disambiguate-bundle.scala @@ -0,0 +1,14 @@ +import scala.reflect.macros.whitebox._ +import scala.language.experimental.macros + +class Macros(val c: Context) { + def impl = ??? +} + +object Macros { + def impl(c: Context)(x: c.Tree) = ??? +} + +object Test extends App { + def foo: Unit = macro Macros.impl +}
\ No newline at end of file diff --git a/test/files/pos/attachments-typed-ident.check b/test/files/pos/macro-bundle-disambiguate-nonbundle.check index e69de29bb2..e69de29bb2 100644 --- a/test/files/pos/attachments-typed-ident.check +++ b/test/files/pos/macro-bundle-disambiguate-nonbundle.check diff --git a/test/files/pos/macro-bundle-disambiguate-nonbundle.scala b/test/files/pos/macro-bundle-disambiguate-nonbundle.scala new file mode 100644 index 0000000000..cb66f28a0b --- /dev/null +++ b/test/files/pos/macro-bundle-disambiguate-nonbundle.scala @@ -0,0 +1,14 @@ +import scala.reflect.macros.whitebox._ +import scala.language.experimental.macros + +class Macros(val c: Context) { + def impl(x: c.Tree) = ??? +} + +object Macros { + def impl(c: Context) = ??? +} + +object Test extends App { + def foo: Unit = macro Macros.impl +}
\ No newline at end of file diff --git a/test/files/pos/macro-qmarkqmarkqmark.check b/test/files/pos/macro-implicit-invalidate-on-error.check index e69de29bb2..e69de29bb2 100644 --- a/test/files/pos/macro-qmarkqmarkqmark.check +++ b/test/files/pos/macro-implicit-invalidate-on-error.check diff --git a/test/files/pos/macro-implicit-invalidate-on-error.scala b/test/files/pos/macro-implicit-invalidate-on-error.scala new file mode 100644 index 0000000000..bb83e3cc38 --- /dev/null +++ b/test/files/pos/macro-implicit-invalidate-on-error.scala @@ -0,0 +1,25 @@ +import scala.language.experimental.macros +import scala.reflect.macros.blackbox.Context + +trait LegacyLiftable[T] { + def apply(universe: scala.reflect.api.Universe, value: T): universe.Tree +} + +object LegacyLiftable { + implicit def liftCaseClass[T <: Product]: LegacyLiftable[T] = macro liftCaseClassImpl[T] + + def liftCaseClassImpl[T: c.WeakTypeTag](c: Context): c.Expr[LegacyLiftable[T]] = { + import c.universe._ + val tpe = weakTypeOf[T] + if (!tpe.typeSymbol.asClass.isCaseClass) c.abort(c.enclosingPosition, "denied") + val p = List(q"Literal(Constant(1))") + c.Expr[LegacyLiftable[T]] { q""" + new LegacyLiftable[$tpe] { + def apply(universe: scala.reflect.api.Universe, value: $tpe): universe.Tree = { + import universe._ + Apply(Select(Ident(TermName("C")), TermName("apply")), List(..$p)) + } + } + """ } + } +} diff --git a/test/files/pos/matchStarlift.scala b/test/files/pos/matchStarlift.scala deleted file mode 100644 index dab46eada2..0000000000 --- a/test/files/pos/matchStarlift.scala +++ /dev/null @@ -1,7 +0,0 @@ -object Tet { - import scala.xml._; - def fooz(x: Node=>String) = {} - def foo( m:Node ):Unit = fooz { - case Elem(_,_,_,_,n,_*) if (n == m) => "gaga" - } -} diff --git a/test/files/pos/michel6.scala b/test/files/pos/michel6.scala index f312bf1796..b32e8bed75 100644 --- a/test/files/pos/michel6.scala +++ b/test/files/pos/michel6.scala @@ -1,6 +1,6 @@ object M { def f(x: Int): Unit = {} - + def g(): Int => Unit = if (0 == 0) f else g() } diff --git a/test/files/pos/needstypeearly.scala b/test/files/pos/needstypeearly.scala index bd93b5c45d..a90c2575f2 100644 --- a/test/files/pos/needstypeearly.scala +++ b/test/files/pos/needstypeearly.scala @@ -1,4 +1,4 @@ -abstract class NeedsXEarly { - val x: Int +abstract class NeedsXEarly { + val x: Int } class Foo extends { val x = 1 } with NeedsXEarly diff --git a/test/files/pos/nothing_manifest_disambig-old.scala b/test/files/pos/nothing_manifest_disambig-old.scala index 076742033f..9a3db0c6d4 100644 --- a/test/files/pos/nothing_manifest_disambig-old.scala +++ b/test/files/pos/nothing_manifest_disambig-old.scala @@ -1,10 +1,10 @@ object Test { def mani[T: Manifest](xs: T) = xs mani(List()) - + def listElMani[T: Manifest](xs: List[T]) = xs listElMani(List()) - + def foo[A, C](m : C)(implicit ev: C <:< Traversable[A], mani: Manifest[A]): (C, A, Manifest[A]) = (m, m.head, mani) - foo(List(1,2,3)) + foo(List(1,2,3)) }
\ No newline at end of file diff --git a/test/files/pos/nullary.scala b/test/files/pos/nullary.scala index 8e5a834012..614fcdf480 100644 --- a/test/files/pos/nullary.scala +++ b/test/files/pos/nullary.scala @@ -2,7 +2,7 @@ abstract class NullaryTest[T, m[s]] { def nullary: String = "a" val x = nullary - def nullary2: T + def nullary2: T val x2 = nullary2 def nullary3: m[T] @@ -16,5 +16,5 @@ class Concrete extends NullaryTest[Int, List] { object test { (new Concrete).nullary2 - (new Concrete).nullary3 + (new Concrete).nullary3 } diff --git a/test/files/pos/nullary_poly.scala b/test/files/pos/nullary_poly.scala index 4de7235a1c..d2e1e127a1 100644 --- a/test/files/pos/nullary_poly.scala +++ b/test/files/pos/nullary_poly.scala @@ -2,9 +2,9 @@ class A { // built-in synchronized {} - + val x: String = "a".asInstanceOf[String] - + // user-defined: def polyNullary[T]: List[T] = Nil } diff --git a/test/files/pos/optmatch.scala b/test/files/pos/optmatch.scala new file mode 100644 index 0000000000..354be65da7 --- /dev/null +++ b/test/files/pos/optmatch.scala @@ -0,0 +1,33 @@ +// final case class NonZeroLong(value: Long) extends AnyVal { +// def get: Long = value +// def isEmpty: Boolean = get == 0l +// } + +class NonZeroLong(val value: Long) extends AnyVal { + def get: Long = value + def isEmpty: Boolean = get == 0l +} +object NonZeroLong { + def unapply(value: Long): NonZeroLong = new NonZeroLong(value) +} + + +object Foo { + def unapply(x: Int): NonZeroLong = new NonZeroLong(1L << x) + // public long unapply(int); + // 0: lconst_1 + // 1: iload_1 + // 2: lshl + // 3: lreturn +} + +object Test { + def f(x: Int): Int = x match { + case Foo(1024l) => 1 + case _ => 2 + } + def main(args: Array[String]): Unit = { + println(f(10)) + println(f(11)) + } +} diff --git a/test/files/pos/overloaded-unapply.scala b/test/files/pos/overloaded-unapply.scala new file mode 100644 index 0000000000..4105a25f10 --- /dev/null +++ b/test/files/pos/overloaded-unapply.scala @@ -0,0 +1,8 @@ +trait Baz { + type Type >: Null + + case class HoleType(a: String, b: String, c: String) + object HoleType { def unapply(tpe: Type): Option[HoleType] = ??? } + + (null: Type) match { case HoleType(holeTpe) => holeTpe } +} diff --git a/test/files/pos/override-object-yes.scala b/test/files/pos/override-object-yes.scala index b0563df0a3..858f9b21fc 100644 --- a/test/files/pos/override-object-yes.scala +++ b/test/files/pos/override-object-yes.scala @@ -14,8 +14,8 @@ package case1 { override def f = 3 } } - - trait Foo3 { + + trait Foo3 { object Bar { def g: Traversable[Int] = Nil } diff --git a/test/files/pos/overzealous-assert-genbcode.scala b/test/files/pos/overzealous-assert-genbcode.scala new file mode 100644 index 0000000000..ddd70b0c44 --- /dev/null +++ b/test/files/pos/overzealous-assert-genbcode.scala @@ -0,0 +1,10 @@ +object Test { + + def main(args: Array[String]) { + args(0) match { + case a: String => while(a == null) {} + } + } + +} + diff --git a/test/files/pos/package-ob-case.flags b/test/files/pos/package-ob-case.flags new file mode 100644 index 0000000000..85d8eb2ba2 --- /dev/null +++ b/test/files/pos/package-ob-case.flags @@ -0,0 +1 @@ +-Xfatal-warnings diff --git a/test/files/pos/package-ob-case/A_1.scala b/test/files/pos/package-ob-case/A_1.scala new file mode 100644 index 0000000000..91a1fb7e48 --- /dev/null +++ b/test/files/pos/package-ob-case/A_1.scala @@ -0,0 +1,5 @@ +package foo { + package object foo { + case class X(z: Int) { } + } +} diff --git a/test/files/pos/package-ob-case/B_2.scala b/test/files/pos/package-ob-case/B_2.scala new file mode 100644 index 0000000000..91a1fb7e48 --- /dev/null +++ b/test/files/pos/package-ob-case/B_2.scala @@ -0,0 +1,5 @@ +package foo { + package object foo { + case class X(z: Int) { } + } +} diff --git a/test/files/pos/partialfun.scala b/test/files/pos/partialfun.scala index d8971e56fb..9f32a22023 100644 --- a/test/files/pos/partialfun.scala +++ b/test/files/pos/partialfun.scala @@ -1,6 +1,6 @@ object partialfun { - def applyPartial[b](f: PartialFunction[Option[String], b])(x: Option[String]) = + def applyPartial[b](f: PartialFunction[Option[String], b])(x: Option[String]) = if (f.isDefinedAt(x)) f(x) else "<undefined>"; applyPartial { diff --git a/test/files/pos/pat_gilles.scala b/test/files/pos/pat_gilles.scala index 567d700eba..704d5b9c00 100644 --- a/test/files/pos/pat_gilles.scala +++ b/test/files/pos/pat_gilles.scala @@ -1,7 +1,7 @@ abstract class Table2 { - val x: Any => Unit = { zz:Any => + val x: Any => Unit = { zz:Any => zz match { case Table2.CellUpdated(row, column) => val foo = Table2.CellUpdated(2,2) diff --git a/test/files/pos/patmat-extract-tparam.scala b/test/files/pos/patmat-extract-tparam.scala new file mode 100644 index 0000000000..6417b49c2b --- /dev/null +++ b/test/files/pos/patmat-extract-tparam.scala @@ -0,0 +1,13 @@ +trait Bip[T] { def h: T } +trait BoolBip extends Bip[Boolean] + +class A { + def g(x: Boolean): Unit = () + def f(xs: List[Bip[_]]) = xs foreach { case x: BoolBip => g(x.h) } +} + +class B { + def g(x: Boolean): Unit = () + def g(x: Int): Unit = () + def f(xs: List[Bip[_]]) = xs foreach { case x: BoolBip => g(x.h) } +} diff --git a/test/files/pos/patmat.scala b/test/files/pos/patmat.scala index 4e652b146e..51b879abf2 100644 --- a/test/files/pos/patmat.scala +++ b/test/files/pos/patmat.scala @@ -3,8 +3,8 @@ object ZipFun { //just compilation - def zipFun[a, b](xs: List[a], ys: List[b]): List[Pair[a, b]] = (Pair(xs, ys): @unchecked) match { - // !!! case Pair(List(), _), Pair(_, List()) => List() + def zipFun[a, b](xs: List[a], ys: List[b]): List[Tuple2[a, b]] = ((xs, ys): @unchecked) match { + // !!! case (List(), _), (_, List()) => List() case (x :: xs1, y :: ys1) => (x, y) :: zipFun(xs1, ys1) } } diff --git a/test/files/pos/private-types-after-typer.scala b/test/files/pos/private-types-after-typer.scala new file mode 100644 index 0000000000..79ef934063 --- /dev/null +++ b/test/files/pos/private-types-after-typer.scala @@ -0,0 +1,9 @@ +// Testing that the type of the outer accessor in O2 +// doesn't crash the compiler over private type escaping scope. +trait T { + class C { + private object O1 { + object O2 + } + } +}
\ No newline at end of file diff --git a/test/files/pos/propagate.scala b/test/files/pos/propagate.scala index a7f9d6ce6d..5881920798 100644 --- a/test/files/pos/propagate.scala +++ b/test/files/pos/propagate.scala @@ -14,4 +14,3 @@ class C { - diff --git a/test/files/pos/t5692c.check b/test/files/pos/reflection-compat-api-universe.check index e69de29bb2..e69de29bb2 100644 --- a/test/files/pos/t5692c.check +++ b/test/files/pos/reflection-compat-api-universe.check diff --git a/test/files/pos/reflection-compat-api-universe.scala b/test/files/pos/reflection-compat-api-universe.scala new file mode 100644 index 0000000000..0aee8bcda5 --- /dev/null +++ b/test/files/pos/reflection-compat-api-universe.scala @@ -0,0 +1,136 @@ +object Test extends App { + val u: scala.reflect.api.Universe = ??? + import u._ + import scala.reflect.ClassTag + import compat._ + + val tree: Tree = ??? + val ttree: TypeTree = ??? + val stree: SymTree = ??? + val trees: List[Tree] = ??? + val mods: Modifiers = ??? + val impl: Template = ??? + val vparamss: List[List[ValDef]] = ??? + val rhs: Tree = ??? + val sym: Symbol = ??? + val tsym: TypeSymbol = ??? + val syms: List[Symbol] = ??? + val params: List[Symbol] = ??? + val tparams: List[Symbol] = ??? + val tpe: Type = ??? + val tpes: List[Type] = ??? + val manifest: Manifest[Int] = ??? + val tag: TypeTag[Int] = ??? + val mirror: Mirror = ??? + val decls: Scope = ??? + val pos: Position = ??? + val ann: Annotation = ??? + val anns: List[Annotation] = ??? + val const: Constant = ??? + val name: Name = ??? + val tyname: TypeName = ??? + val tename: TermName = ??? + val flags: FlagSet = ??? + val str: String = ??? + val i: Int = ??? + val b: Boolean = ??? + + // abstract class BuildApi + // abstract class ReferenceToBoxedExtractor + // abstract trait AttachableApi + // abstract trait FreeTermSymbolApi + // abstract trait FreeTypeSymbolApi + // abstract trait IdentContextApi + // abstract trait ReferenceToBoxedApi + // abstract trait SymTreeContextApi + // abstract trait SymbolContextApi + // abstract trait TreeContextApi + // abstract trait TypeTreeContextApi + locally(ClassDef(sym, impl): ClassDef) + locally(DefDef(sym, mods, vparamss, rhs): DefDef) + locally(DefDef(sym, vparamss, rhs): DefDef) + locally(DefDef(sym, mods, rhs): DefDef) + locally(DefDef(sym, rhs): DefDef) + locally(DefDef(sym, (??? : List[List[Symbol]] => Tree)): DefDef) + locally(LabelDef(sym, params, rhs): LabelDef) + locally(ModuleDef(sym, impl): ModuleDef) + locally(TypeDef(sym, rhs): TypeDef) + locally(TypeDef(sym): TypeDef) + locally(ValDef(sym, rhs): ValDef) + locally(ValDef(sym): ValDef) + locally(AnnotatedType(anns, tpe): AnnotatedType) + locally(BoundedWildcardType(??? : TypeBounds): BoundedWildcardType) + locally(TypeBounds(tpe, tpe): TypeBounds) + locally(MethodType(params, tpe): MethodType) + locally(RefinedType(tpes, decls): RefinedType) + locally(RefinedType(tpes, decls, sym): RefinedType) + locally(ClassInfoType(tpes, decls, sym): ClassInfoType) + locally(SingleType(tpe, sym): Type) + locally(TypeRef(tpe, sym, tpes): Type) + locally(ExistentialType(syms, tpe): ExistentialType) + locally(NullaryMethodType(tpe): NullaryMethodType) + locally(ThisType(sym): Type) + locally(SuperType(tpe, tpe): Type) + locally(PolyType(syms, tpe): PolyType) + locally(ConstantType(const): ConstantType) + locally(sym.asFreeTerm: FreeTermSymbol) + locally(sym.asFreeType: FreeTypeSymbol) + locally(existentialAbstraction(tparams, tpe): Type) + locally(tree.freeTerms: List[FreeTermSymbol]) + locally(tree.freeTypes: List[FreeTypeSymbol]) + locally(intersectionType(tpes): Type) + locally(intersectionType(tpes, sym): Type) + locally(sym.isErroneous: Boolean) + locally(sym.isFreeTerm: Boolean) + locally(sym.isFreeType: Boolean) + locally(sym.isLocal: Boolean) + locally(sym.isOverride: Boolean) + locally(tsym.isSkolem: Boolean) + locally(manifestToTypeTag(mirror, manifest): scala.reflect.api.Universe#TypeTag[Int]) + locally(mkImporter(scala.reflect.runtime.universe): Importer{val from: scala.reflect.runtime.universe.type}) + locally(sym.newClassSymbol(tyname, pos, flags): ClassSymbol) + locally(sym.newMethodSymbol(tename, pos, flags): MethodSymbol) + locally(sym.newModuleAndClassSymbol(name, pos, flags): (ModuleSymbol, ClassSymbol)) + locally(newScopeWith(sym, sym, sym): Scope) + locally(sym.newTermSymbol(tename, pos, flags): TermSymbol) + locally(sym.newTypeSymbol(tyname, pos, flags): TypeSymbol) + locally(polyType(tparams, tpe): Type) + locally(sym.pos: Position) + locally(refinedType(tpes, sym): Type) + locally(refinedType(tpes, sym, decls, pos): Type) + locally(singleType(tpe, sym): Type) + locally(tree.substituteSymbols(syms, syms): Tree) + locally(tree.substituteThis(sym, tree): Tree) + locally(tree.substituteTypes(syms, tpes): Tree) + locally(typeRef(tpe, sym, tpes): Type) + locally(typeTagToManifest(mirror, tag): Manifest[Int]) + locally(FreeTermSymbolTag: ClassTag[FreeTermSymbol]) + locally((??? : FreeTermSymbol).origin) + locally((??? : FreeTermSymbol).value) + locally(FreeTypeSymbolTag: ClassTag[FreeTypeSymbol]) + locally((??? : FreeTypeSymbol).origin) + locally(ReferenceToBoxedTag: ClassTag[ReferenceToBoxed]) + locally(build: BuildApi) + locally(ReferenceToBoxed(??? : Ident): ReferenceToBoxed) + locally((??? : ReferenceToBoxed).ident: Tree) + locally(ReferenceToBoxed.unapply(???): Option[Ident]) + locally(build.selectType(sym, str): TypeSymbol) + locally(build.selectTerm(sym, str): TermSymbol) + locally(build.selectOverloadedMethod(sym, str, i): MethodSymbol) + locally(build.newNestedSymbol(sym, name, pos, flags, b): Symbol) + locally(build.newFreeTerm(str, i): FreeTermSymbol) + locally(build.newFreeTerm(str, i, flags, str): FreeTermSymbol) + locally(build.newFreeType(str): FreeTypeSymbol) + locally(build.newFreeType(str, flags, str): FreeTypeSymbol) + locally(build.setTypeSignature(sym, tpe): Symbol) + locally(build.setAnnotations(sym, anns): Symbol) + locally(build.flagsFromBits(??? : Long): FlagSet) + locally(build.emptyValDef: ValDef) + locally(build.This(sym): Tree) + locally(build.Select(tree, sym): Select) + locally(build.Ident(sym): Ident) + locally(build.TypeTree(tpe): TypeTree) + locally(build.thisPrefix(sym): Type) + locally(build.setType(tree, tpe): Tree) + locally(build.setSymbol(tree, sym): Tree) +}
\ No newline at end of file diff --git a/test/files/pos/t7461.check b/test/files/pos/reflection-compat-c.check index e69de29bb2..e69de29bb2 100644 --- a/test/files/pos/t7461.check +++ b/test/files/pos/reflection-compat-c.check diff --git a/test/files/pos/reflection-compat-c.scala b/test/files/pos/reflection-compat-c.scala new file mode 100644 index 0000000000..73158decdc --- /dev/null +++ b/test/files/pos/reflection-compat-c.scala @@ -0,0 +1,139 @@ +import scala.reflect.macros.Context + +object Test extends App { + def impl(c: Context) = { + import c.universe._ + import scala.reflect.ClassTag + import compat._ + + val tree: Tree = ??? + val ttree: TypeTree = ??? + val stree: SymTree = ??? + val trees: List[Tree] = ??? + val mods: Modifiers = ??? + val impl: Template = ??? + val vparamss: List[List[ValDef]] = ??? + val rhs: Tree = ??? + val sym: Symbol = ??? + val tsym: TypeSymbol = ??? + val syms: List[Symbol] = ??? + val params: List[Symbol] = ??? + val tparams: List[Symbol] = ??? + val tpe: Type = ??? + val tpes: List[Type] = ??? + val manifest: Manifest[Int] = ??? + val tag: TypeTag[Int] = ??? + val mirror: Mirror = ??? + val decls: Scope = ??? + val pos: Position = ??? + val ann: Annotation = ??? + val anns: List[Annotation] = ??? + val const: Constant = ??? + val name: Name = ??? + val tyname: TypeName = ??? + val tename: TermName = ??? + val flags: FlagSet = ??? + val str: String = ??? + val i: Int = ??? + val b: Boolean = ??? + + // abstract class BuildApi + // abstract class ReferenceToBoxedExtractor + // abstract trait AttachableApi + // abstract trait FreeTermSymbolApi + // abstract trait FreeTypeSymbolApi + // abstract trait IdentContextApi + // abstract trait ReferenceToBoxedApi + // abstract trait SymTreeContextApi + // abstract trait SymbolContextApi + // abstract trait TreeContextApi + // abstract trait TypeTreeContextApi + locally(ClassDef(sym, impl): ClassDef) + locally(DefDef(sym, mods, vparamss, rhs): DefDef) + locally(DefDef(sym, vparamss, rhs): DefDef) + locally(DefDef(sym, mods, rhs): DefDef) + locally(DefDef(sym, rhs): DefDef) + locally(DefDef(sym, (??? : List[List[Symbol]] => Tree)): DefDef) + locally(LabelDef(sym, params, rhs): LabelDef) + locally(ModuleDef(sym, impl): ModuleDef) + locally(TypeDef(sym, rhs): TypeDef) + locally(TypeDef(sym): TypeDef) + locally(ValDef(sym, rhs): ValDef) + locally(ValDef(sym): ValDef) + locally(AnnotatedType(anns, tpe): AnnotatedType) + locally(BoundedWildcardType(??? : TypeBounds): BoundedWildcardType) + locally(TypeBounds(tpe, tpe): TypeBounds) + locally(MethodType(params, tpe): MethodType) + locally(RefinedType(tpes, decls): RefinedType) + locally(RefinedType(tpes, decls, sym): RefinedType) + locally(ClassInfoType(tpes, decls, sym): ClassInfoType) + locally(SingleType(tpe, sym): Type) + locally(TypeRef(tpe, sym, tpes): Type) + locally(ExistentialType(syms, tpe): ExistentialType) + locally(NullaryMethodType(tpe): NullaryMethodType) + locally(ThisType(sym): Type) + locally(SuperType(tpe, tpe): Type) + locally(PolyType(syms, tpe): PolyType) + locally(ConstantType(const): ConstantType) + locally(sym.asFreeTerm: FreeTermSymbol) + locally(sym.asFreeType: FreeTypeSymbol) + locally(existentialAbstraction(tparams, tpe): Type) + locally(tree.freeTerms: List[FreeTermSymbol]) + locally(tree.freeTypes: List[FreeTypeSymbol]) + locally(intersectionType(tpes): Type) + locally(intersectionType(tpes, sym): Type) + locally(sym.isErroneous: Boolean) + locally(sym.isFreeTerm: Boolean) + locally(sym.isFreeType: Boolean) + locally(sym.isLocal: Boolean) + locally(sym.isOverride: Boolean) + locally(tsym.isSkolem: Boolean) + locally(manifestToTypeTag(mirror, manifest): scala.reflect.api.Universe#TypeTag[Int]) + locally(mkImporter(scala.reflect.runtime.universe): Importer{val from: scala.reflect.runtime.universe.type}) + locally(sym.newClassSymbol(tyname, pos, flags): ClassSymbol) + locally(sym.newMethodSymbol(tename, pos, flags): MethodSymbol) + locally(sym.newModuleAndClassSymbol(name, pos, flags): (ModuleSymbol, ClassSymbol)) + locally(newScopeWith(sym, sym, sym): Scope) + locally(sym.newTermSymbol(tename, pos, flags): TermSymbol) + locally(sym.newTypeSymbol(tyname, pos, flags): TypeSymbol) + locally(polyType(tparams, tpe): Type) + locally(sym.pos: Position) + locally(refinedType(tpes, sym): Type) + locally(refinedType(tpes, sym, decls, pos): Type) + locally(singleType(tpe, sym): Type) + locally(tree.substituteSymbols(syms, syms): Tree) + locally(tree.substituteThis(sym, tree): Tree) + locally(tree.substituteTypes(syms, tpes): Tree) + locally(typeRef(tpe, sym, tpes): Type) + locally(typeTagToManifest(mirror, tag): Manifest[Int]) + locally(FreeTermSymbolTag: ClassTag[FreeTermSymbol]) + locally((??? : FreeTermSymbol).origin) + locally((??? : FreeTermSymbol).value) + locally(FreeTypeSymbolTag: ClassTag[FreeTypeSymbol]) + locally((??? : FreeTypeSymbol).origin) + locally(ReferenceToBoxedTag: ClassTag[ReferenceToBoxed]) + locally(build: BuildApi) + locally(ReferenceToBoxed(??? : Ident): ReferenceToBoxed) + locally((??? : ReferenceToBoxed).ident: Tree) + locally(ReferenceToBoxed.unapply(???): Option[Ident]) + locally(build.selectType(sym, str): TypeSymbol) + locally(build.selectTerm(sym, str): TermSymbol) + locally(build.selectOverloadedMethod(sym, str, i): MethodSymbol) + locally(build.newNestedSymbol(sym, name, pos, flags, b): Symbol) + locally(build.newFreeTerm(str, i): FreeTermSymbol) + locally(build.newFreeTerm(str, i, flags, str): FreeTermSymbol) + locally(build.newFreeType(str): FreeTypeSymbol) + locally(build.newFreeType(str, flags, str): FreeTypeSymbol) + locally(build.setTypeSignature(sym, tpe): Symbol) + locally(build.setAnnotations(sym, anns): Symbol) + locally(build.flagsFromBits(??? : Long): FlagSet) + locally(build.emptyValDef: ValDef) + locally(build.This(sym): Tree) + locally(build.Select(tree, sym): Select) + locally(build.Ident(sym): Ident) + locally(build.TypeTree(tpe): TypeTree) + locally(build.thisPrefix(sym): Type) + locally(build.setType(tree, tpe): Tree) + locally(build.setSymbol(tree, sym): Tree) + } +}
\ No newline at end of file diff --git a/test/files/pos/virtpatmat_anonfun_for.flags b/test/files/pos/reflection-compat-macro-universe.check index e69de29bb2..e69de29bb2 100644 --- a/test/files/pos/virtpatmat_anonfun_for.flags +++ b/test/files/pos/reflection-compat-macro-universe.check diff --git a/test/files/pos/reflection-compat-macro-universe.scala b/test/files/pos/reflection-compat-macro-universe.scala new file mode 100644 index 0000000000..89ca36dab2 --- /dev/null +++ b/test/files/pos/reflection-compat-macro-universe.scala @@ -0,0 +1,177 @@ +object Test extends App { + val u: scala.reflect.macros.Universe = ??? + import u._ + import scala.reflect.macros.Attachments + import scala.reflect.ClassTag + import compat._ + + val tree: Tree = ??? + val ttree: TypeTree = ??? + val stree: SymTree = ??? + val trees: List[Tree] = ??? + val mods: Modifiers = ??? + val impl: Template = ??? + val vparamss: List[List[ValDef]] = ??? + val rhs: Tree = ??? + val sym: Symbol = ??? + val tsym: TypeSymbol = ??? + val syms: List[Symbol] = ??? + val params: List[Symbol] = ??? + val tparams: List[Symbol] = ??? + val tpe: Type = ??? + val tpes: List[Type] = ??? + val manifest: Manifest[Int] = ??? + val tag: TypeTag[Int] = ??? + val mirror: Mirror = ??? + val decls: Scope = ??? + val pos: Position = ??? + val ann: Annotation = ??? + val anns: List[Annotation] = ??? + val const: Constant = ??? + val name: Name = ??? + val tyname: TypeName = ??? + val tename: TermName = ??? + val flags: FlagSet = ??? + val str: String = ??? + val i: Int = ??? + val b: Boolean = ??? + + // abstract class BuildApi + // abstract class ReferenceToBoxedExtractor + // abstract trait AttachableApi + // abstract trait FreeTermSymbolApi + // abstract trait FreeTypeSymbolApi + // abstract trait IdentContextApi + // abstract trait ReferenceToBoxedApi + // abstract trait SymTreeContextApi + // abstract trait SymbolContextApi + // abstract trait TreeContextApi + // abstract trait TypeTreeContextApi + locally(ClassDef(sym, impl): ClassDef) + locally(DefDef(sym, mods, vparamss, rhs): DefDef) + locally(DefDef(sym, vparamss, rhs): DefDef) + locally(DefDef(sym, mods, rhs): DefDef) + locally(DefDef(sym, rhs): DefDef) + locally(DefDef(sym, (??? : List[List[Symbol]] => Tree)): DefDef) + locally(LabelDef(sym, params, rhs): LabelDef) + locally(ModuleDef(sym, impl): ModuleDef) + locally(TypeDef(sym, rhs): TypeDef) + locally(TypeDef(sym): TypeDef) + locally(ValDef(sym, rhs): ValDef) + locally(ValDef(sym): ValDef) + locally(AnnotatedType(anns, tpe): AnnotatedType) + locally(BoundedWildcardType(??? : TypeBounds): BoundedWildcardType) + locally(TypeBounds(tpe, tpe): TypeBounds) + locally(MethodType(params, tpe): MethodType) + locally(RefinedType(tpes, decls): RefinedType) + locally(RefinedType(tpes, decls, sym): RefinedType) + locally(ClassInfoType(tpes, decls, sym): ClassInfoType) + locally(SingleType(tpe, sym): Type) + locally(TypeRef(tpe, sym, tpes): Type) + locally(ExistentialType(syms, tpe): ExistentialType) + locally(NullaryMethodType(tpe): NullaryMethodType) + locally(ThisType(sym): Type) + locally(SuperType(tpe, tpe): Type) + locally(PolyType(syms, tpe): PolyType) + locally(ConstantType(const): ConstantType) + locally(sym.asFreeTerm: FreeTermSymbol) + locally(sym.asFreeType: FreeTypeSymbol) + locally(sym.attachments: Attachments { type Pos = Position }) + locally(tree.attachments: Attachments { type Pos = Position }) + locally(captureVariable(sym): Unit) + locally(capturedVariableType(sym): Type) + locally(sym.deSkolemize: Symbol) + locally(tree.defineType(tpe): Tree) + locally(existentialAbstraction(tparams, tpe): Type) + locally(tree.freeTerms: List[FreeTermSymbol]) + locally(tree.freeTypes: List[FreeTypeSymbol]) + locally(intersectionType(tpes): Type) + locally(intersectionType(tpes, sym): Type) + locally(sym.isErroneous: Boolean) + locally(sym.isFreeTerm: Boolean) + locally(sym.isFreeType: Boolean) + locally(sym.isLocal: Boolean) + locally(sym.isOverride: Boolean) + locally(tsym.isSkolem: Boolean) + locally(manifestToTypeTag(mirror, manifest): scala.reflect.api.Universe#TypeTag[Int]) + locally(treeBuild.mkAttributedIdent(sym): RefTree) + locally(treeBuild.mkAttributedQualifier(tpe): Tree) + locally(treeBuild.mkAttributedQualifier(tpe, sym): Tree) + locally(treeBuild.mkAttributedRef(tpe, sym): RefTree) + locally(treeBuild.mkAttributedRef(sym): RefTree) + locally(treeBuild.mkAttributedSelect(tree, sym): RefTree) + locally(treeBuild.mkAttributedThis(sym): This) + locally(mkImporter(scala.reflect.runtime.universe): Importer{val from: scala.reflect.runtime.universe.type}) + locally(treeBuild.mkMethodCall(sym, trees): Tree) + locally(treeBuild.mkMethodCall(sym, tpes, trees): Tree) + locally(treeBuild.mkMethodCall(sym, name, trees): Tree) + locally(treeBuild.mkMethodCall(sym, name, tpes, trees): Tree) + locally(treeBuild.mkMethodCall(tree, sym, tpes, trees): Tree) + locally(treeBuild.mkMethodCall(tree, trees): Tree) + locally(treeBuild.mkMethodCall(tree, tpes, trees): Tree) + locally(treeBuild.mkNullaryCall(sym, tpes): Tree) + locally(treeBuild.mkRuntimeUniverseRef: Tree) + locally(treeBuild.mkUnattributedRef(name): RefTree) + locally(treeBuild.mkUnattributedRef(sym): RefTree) + locally(sym.newClassSymbol(tyname, pos, flags): ClassSymbol) + locally(sym.newMethodSymbol(tename, pos, flags): MethodSymbol) + locally(sym.newModuleAndClassSymbol(name, pos, flags): (ModuleSymbol, ClassSymbol)) + locally(newScopeWith(sym, sym, sym): Scope) + locally(sym.newTermSymbol(tename, pos, flags): TermSymbol) + locally(sym.newTypeSymbol(tyname, pos, flags): TypeSymbol) + locally(polyType(tparams, tpe): Type) + locally(sym.pos: Position) + locally((tree.pos = pos): Unit) + locally(referenceCapturedVariable(sym): Tree) + locally(refinedType(tpes, sym): Type) + locally(refinedType(tpes, sym, decls, pos): Type) + locally(sym.removeAttachment[Int]: Symbol) + locally(tree.removeAttachment[Int]: Tree) + locally(sym.setAnnotations(ann, ann, ann): Symbol) + locally(sym.setName(name): Symbol) + locally(ttree.setOriginal(tree): TypeTree) + locally(tree.setPos(pos): Tree) + locally(sym.setPrivateWithin(sym): Symbol) + locally(tree.setSymbol(sym): Tree) + locally(tree.setType(tpe): Tree) + locally(sym.setTypeSignature(tpe): Symbol) + locally(singleType(tpe, sym): Type) + locally(tree.substituteSymbols(syms, syms): Tree) + locally(tree.substituteThis(sym, tree): Tree) + locally(tree.substituteTypes(syms, tpes): Tree) + locally((tree.symbol = sym): Unit) + locally((tree.tpe = tpe): Unit) + locally(typeRef(tpe, sym, tpes): Type) + locally(typeTagToManifest(mirror, tag): Manifest[Int]) + locally(sym.updateAttachment(42): Symbol) + locally(tree.updateAttachment(42): Tree) + locally(FreeTermSymbolTag: ClassTag[FreeTermSymbol]) + locally((??? : FreeTermSymbol).origin) + locally((??? : FreeTermSymbol).value) + locally(FreeTypeSymbolTag: ClassTag[FreeTypeSymbol]) + locally((??? : FreeTypeSymbol).origin) + locally(ReferenceToBoxedTag: ClassTag[ReferenceToBoxed]) + locally(build: BuildApi) + locally(ReferenceToBoxed(??? : Ident): ReferenceToBoxed) + locally((??? : ReferenceToBoxed).ident: Tree) + locally(ReferenceToBoxed.unapply(???): Option[Ident]) + locally(build.selectType(sym, str): TypeSymbol) + locally(build.selectTerm(sym, str): TermSymbol) + locally(build.selectOverloadedMethod(sym, str, i): MethodSymbol) + locally(build.newNestedSymbol(sym, name, pos, flags, b): Symbol) + locally(build.newFreeTerm(str, i): FreeTermSymbol) + locally(build.newFreeTerm(str, i, flags, str): FreeTermSymbol) + locally(build.newFreeType(str): FreeTypeSymbol) + locally(build.newFreeType(str, flags, str): FreeTypeSymbol) + locally(build.setTypeSignature(sym, tpe): Symbol) + locally(build.setAnnotations(sym, anns): Symbol) + locally(build.flagsFromBits(??? : Long): FlagSet) + locally(build.emptyValDef: ValDef) + locally(build.This(sym): Tree) + locally(build.Select(tree, sym): Select) + locally(build.Ident(sym): Ident) + locally(build.TypeTree(tpe): TypeTree) + locally(build.thisPrefix(sym): Type) + locally(build.setType(tree, tpe): Tree) + locally(build.setSymbol(tree, sym): Tree) +}
\ No newline at end of file diff --git a/test/files/pos/reflection-compat-ru.check b/test/files/pos/reflection-compat-ru.check new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/test/files/pos/reflection-compat-ru.check diff --git a/test/files/pos/reflection-compat-ru.scala b/test/files/pos/reflection-compat-ru.scala new file mode 100644 index 0000000000..9ff72d1cf0 --- /dev/null +++ b/test/files/pos/reflection-compat-ru.scala @@ -0,0 +1,135 @@ +object Test extends App { + import scala.reflect.runtime.universe._ + import scala.reflect.ClassTag + import compat._ + + val tree: Tree = ??? + val ttree: TypeTree = ??? + val stree: SymTree = ??? + val trees: List[Tree] = ??? + val mods: Modifiers = ??? + val impl: Template = ??? + val vparamss: List[List[ValDef]] = ??? + val rhs: Tree = ??? + val sym: Symbol = ??? + val tsym: TypeSymbol = ??? + val syms: List[Symbol] = ??? + val params: List[Symbol] = ??? + val tparams: List[Symbol] = ??? + val tpe: Type = ??? + val tpes: List[Type] = ??? + val manifest: Manifest[Int] = ??? + val tag: TypeTag[Int] = ??? + val mirror: Mirror = ??? + val decls: Scope = ??? + val pos: Position = ??? + val ann: Annotation = ??? + val anns: List[Annotation] = ??? + val const: Constant = ??? + val name: Name = ??? + val tyname: TypeName = ??? + val tename: TermName = ??? + val flags: FlagSet = ??? + val str: String = ??? + val i: Int = ??? + val b: Boolean = ??? + + // abstract class BuildApi + // abstract class ReferenceToBoxedExtractor + // abstract trait AttachableApi + // abstract trait FreeTermSymbolApi + // abstract trait FreeTypeSymbolApi + // abstract trait IdentContextApi + // abstract trait ReferenceToBoxedApi + // abstract trait SymTreeContextApi + // abstract trait SymbolContextApi + // abstract trait TreeContextApi + // abstract trait TypeTreeContextApi + locally(ClassDef(sym, impl): ClassDef) + locally(DefDef(sym, mods, vparamss, rhs): DefDef) + locally(DefDef(sym, vparamss, rhs): DefDef) + locally(DefDef(sym, mods, rhs): DefDef) + locally(DefDef(sym, rhs): DefDef) + locally(DefDef(sym, (??? : List[List[Symbol]] => Tree)): DefDef) + locally(LabelDef(sym, params, rhs): LabelDef) + locally(ModuleDef(sym, impl): ModuleDef) + locally(TypeDef(sym, rhs): TypeDef) + locally(TypeDef(sym): TypeDef) + locally(ValDef(sym, rhs): ValDef) + locally(ValDef(sym): ValDef) + locally(AnnotatedType(anns, tpe): AnnotatedType) + locally(BoundedWildcardType(??? : TypeBounds): BoundedWildcardType) + locally(TypeBounds(tpe, tpe): TypeBounds) + locally(MethodType(params, tpe): MethodType) + locally(RefinedType(tpes, decls): RefinedType) + locally(RefinedType(tpes, decls, sym): RefinedType) + locally(ClassInfoType(tpes, decls, sym): ClassInfoType) + locally(SingleType(tpe, sym): Type) + locally(TypeRef(tpe, sym, tpes): Type) + locally(ExistentialType(syms, tpe): ExistentialType) + locally(NullaryMethodType(tpe): NullaryMethodType) + locally(ThisType(sym): Type) + locally(SuperType(tpe, tpe): Type) + locally(PolyType(syms, tpe): PolyType) + locally(ConstantType(const): ConstantType) + locally(sym.asFreeTerm: FreeTermSymbol) + locally(sym.asFreeType: FreeTypeSymbol) + locally(existentialAbstraction(tparams, tpe): Type) + locally(tree.freeTerms: List[FreeTermSymbol]) + locally(tree.freeTypes: List[FreeTypeSymbol]) + locally(intersectionType(tpes): Type) + locally(intersectionType(tpes, sym): Type) + locally(sym.isErroneous: Boolean) + locally(sym.isFreeTerm: Boolean) + locally(sym.isFreeType: Boolean) + locally(sym.isLocal: Boolean) + locally(sym.isOverride: Boolean) + locally(tsym.isSkolem: Boolean) + locally(manifestToTypeTag(mirror, manifest): scala.reflect.api.Universe#TypeTag[Int]) + locally(mkImporter(scala.reflect.runtime.universe): Importer{val from: scala.reflect.runtime.universe.type}) + locally(sym.newClassSymbol(tyname, pos, flags): ClassSymbol) + locally(sym.newMethodSymbol(tename, pos, flags): MethodSymbol) + locally(sym.newModuleAndClassSymbol(name, pos, flags): (ModuleSymbol, ClassSymbol)) + locally(newScopeWith(sym, sym, sym): Scope) + locally(sym.newTermSymbol(tename, pos, flags): TermSymbol) + locally(sym.newTypeSymbol(tyname, pos, flags): TypeSymbol) + locally(polyType(tparams, tpe): Type) + locally(sym.pos: Position) + locally(refinedType(tpes, sym): Type) + locally(refinedType(tpes, sym, decls, pos): Type) + locally(singleType(tpe, sym): Type) + locally(tree.substituteSymbols(syms, syms): Tree) + locally(tree.substituteThis(sym, tree): Tree) + locally(tree.substituteTypes(syms, tpes): Tree) + locally(typeRef(tpe, sym, tpes): Type) + locally(typeTagToManifest(mirror, tag): Manifest[Int]) + locally(FreeTermSymbolTag: ClassTag[FreeTermSymbol]) + locally((??? : FreeTermSymbol).origin) + locally((??? : FreeTermSymbol).value) + locally(FreeTypeSymbolTag: ClassTag[FreeTypeSymbol]) + locally((??? : FreeTypeSymbol).origin) + locally(ReferenceToBoxedTag: ClassTag[ReferenceToBoxed]) + locally(build: BuildApi) + locally(ReferenceToBoxed(??? : Ident): ReferenceToBoxed) + locally((??? : ReferenceToBoxed).ident: Tree) + locally(ReferenceToBoxed.unapply(???): Option[Ident]) + locally(build.selectType(sym, str): TypeSymbol) + locally(build.selectTerm(sym, str): TermSymbol) + locally(build.selectOverloadedMethod(sym, str, i): MethodSymbol) + locally(build.newNestedSymbol(sym, name, pos, flags, b): Symbol) + locally(build.newFreeTerm(str, i): FreeTermSymbol) + locally(build.newFreeTerm(str, i, flags, str): FreeTermSymbol) + locally(build.newFreeType(str): FreeTypeSymbol) + locally(build.newFreeType(str, flags, str): FreeTypeSymbol) + locally(build.setTypeSignature(sym, tpe): Symbol) + locally(build.setAnnotations(sym, anns): Symbol) + locally(build.flagsFromBits(??? : Long): FlagSet) + locally(build.emptyValDef: ValDef) + locally(build.This(sym): Tree) + locally(build.Select(tree, sym): Select) + locally(build.Ident(sym): Ident) + locally(build.TypeTree(tpe): TypeTree) + locally(build.thisPrefix(sym): Type) + locally(build.setType(tree, tpe): Tree) + locally(build.setSymbol(tree, sym): Tree) +}
\ No newline at end of file diff --git a/test/files/pos/relax_implicit_divergence.scala b/test/files/pos/relax_implicit_divergence.scala index 8525c84bab..f17d0239d8 100644 --- a/test/files/pos/relax_implicit_divergence.scala +++ b/test/files/pos/relax_implicit_divergence.scala @@ -1,7 +1,7 @@ class A(val options: Seq[String]) object Test { - implicit def ss: Equiv[Seq[String]] = error("dummy") - implicit def equivA(implicit seqEq: Equiv[Seq[String]]): Equiv[A] = error("dummy") + implicit def ss: Equiv[Seq[String]] = sys.error("dummy") + implicit def equivA(implicit seqEq: Equiv[Seq[String]]): Equiv[A] = sys.error("dummy") implicitly[Equiv[A]] -}
\ No newline at end of file +} diff --git a/test/files/pos/return_thistype.scala b/test/files/pos/return_thistype.scala index f164e06cc0..c0736c0ad9 100644 --- a/test/files/pos/return_thistype.scala +++ b/test/files/pos/return_thistype.scala @@ -1,8 +1,8 @@ // tests transformation of return type in typedTypeApply (see also tcpoly_gm.scala) -class As { - class A { +class As { + class A { def foo: A.this.type = bar.asInstanceOf[A.this.type] def foo2: this.type = bar.asInstanceOf[this.type] - def bar: A = null + def bar: A = null } } diff --git a/test/files/pos/sammy_poly.flags b/test/files/pos/sammy_poly.flags new file mode 100644 index 0000000000..48fd867160 --- /dev/null +++ b/test/files/pos/sammy_poly.flags @@ -0,0 +1 @@ +-Xexperimental diff --git a/test/files/pos/sammy_poly.scala b/test/files/pos/sammy_poly.scala new file mode 100644 index 0000000000..c629be7166 --- /dev/null +++ b/test/files/pos/sammy_poly.scala @@ -0,0 +1,7 @@ +// test synthesizeSAMFunction where the sam type is not fully defined +class T { + trait F[T, U] { def apply(x: T): U } + // NOTE: the f(x) desugaring for now assumes the single abstract method is called 'apply' + def app[T, U](x: T)(f: F[T, U]): U = f(x) + app(1)(x => List(x)) +}
\ No newline at end of file diff --git a/test/files/pos/sammy_scope.flags b/test/files/pos/sammy_scope.flags new file mode 100644 index 0000000000..48fd867160 --- /dev/null +++ b/test/files/pos/sammy_scope.flags @@ -0,0 +1 @@ +-Xexperimental diff --git a/test/files/pos/sammy_scope.scala b/test/files/pos/sammy_scope.scala new file mode 100644 index 0000000000..8f1fe7058e --- /dev/null +++ b/test/files/pos/sammy_scope.scala @@ -0,0 +1,8 @@ +// test synthesizeSAMFunction: scope hygiene +abstract class SamFun[T1, R] { self => + def apply(v1: T1): R + + // this should type check, as the apply ref is equivalent to self.apply + // it shouldn't resolve to the sam's apply that's synthesized (that wouldn't type check, hence the pos test) + def compose[A](g: SamFun[A, T1]): SamFun[A, R] = { x => apply(g(x)) } +}
\ No newline at end of file diff --git a/test/files/pos/sammy_single.flags b/test/files/pos/sammy_single.flags new file mode 100644 index 0000000000..48fd867160 --- /dev/null +++ b/test/files/pos/sammy_single.flags @@ -0,0 +1 @@ +-Xexperimental diff --git a/test/files/pos/sammy_single.scala b/test/files/pos/sammy_single.scala new file mode 100644 index 0000000000..7a3d272983 --- /dev/null +++ b/test/files/pos/sammy_single.scala @@ -0,0 +1,9 @@ +// test that dependent types work +// TODO: def apply(x: String): x.type does NOT work yet +object Test { + val s: String = "" + + trait T { def apply(x: s.type): s.type } + + val preservedResult: s.type = ((x => x): T)(s) +}
\ No newline at end of file diff --git a/test/files/pos/sammy_twice.flags b/test/files/pos/sammy_twice.flags new file mode 100644 index 0000000000..48fd867160 --- /dev/null +++ b/test/files/pos/sammy_twice.flags @@ -0,0 +1 @@ +-Xexperimental diff --git a/test/files/pos/sammy_twice.scala b/test/files/pos/sammy_twice.scala new file mode 100644 index 0000000000..c91f5b9fd2 --- /dev/null +++ b/test/files/pos/sammy_twice.scala @@ -0,0 +1,9 @@ +// test repeated synthesizeSAMFunction where the sam type is not fully defined +// the naive implementation would enter the same apply$body in the same scope twice +trait F[T, U] { def apply(x: T): U } + +class C { + def app[T, U](x: T)(f: F[T, U]): U = f(x) + app(1)(x => List(x)) + app(2)(x => List(x)) +}
\ No newline at end of file diff --git a/test/files/pos/scala-singleton.scala b/test/files/pos/scala-singleton.scala index 5e0baa0cb2..08038db93b 100644 --- a/test/files/pos/scala-singleton.scala +++ b/test/files/pos/scala-singleton.scala @@ -3,12 +3,12 @@ object Test { def f1(x: AnyRef with Singleton): AnyRef with Singleton = x def f2[T <: AnyRef with Singleton](x: T): T = x - + val x1: AnyRef with Singleton = "abc" val x2 = "def" final val x3 = "ghi" val x4: String = "jkl" - + // compiles... def narrow1(x: AnyRef): AnyRef with Singleton = x @@ -17,26 +17,26 @@ object Test { // fails, wait, what? This fails and narrow1 compiles? def narrow3(x: AnyRef): AnyRef with Singleton = x.asInstanceOf[AnyRef with Singleton] - + // ok def narrow4[T <: AnyRef](x: T): AnyRef with Singleton = x - + object imp { implicit def narrow4[T <: AnyRef](x: T): AnyRef with Singleton = x val x5: String = "mno" def imp1 = f1(x5) - + // f2(x5) // doesn't work but I think it should def imp2 = f2(narrow4(x5)) } - + def main(args: Array[String]): Unit = { // compiles f1(x1) f1(x2) f1(x3) f1(x4) - + f2(x1) // f2(x2) // f2(x3) // maybe this one should work diff --git a/test/files/pos/scoping1.scala b/test/files/pos/scoping1.scala index 548f154b6b..9fe1b5f3e5 100644 --- a/test/files/pos/scoping1.scala +++ b/test/files/pos/scoping1.scala @@ -9,4 +9,4 @@ object This extends App { def foo() = () } val c: C = new D -} +} diff --git a/test/files/pos/sealed-final.flags b/test/files/pos/sealed-final.flags new file mode 100644 index 0000000000..cfabf7a5b4 --- /dev/null +++ b/test/files/pos/sealed-final.flags @@ -0,0 +1 @@ +-Xfatal-warnings -Yinline-warnings -optimise
\ No newline at end of file diff --git a/test/files/pos/sealed-final.scala b/test/files/pos/sealed-final.scala new file mode 100644 index 0000000000..bdedb5c1f6 --- /dev/null +++ b/test/files/pos/sealed-final.scala @@ -0,0 +1,14 @@ +sealed abstract class Foo { + @inline def bar(x: Int) = x + 1 +} +object Foo { + def mkFoo(): Foo = new Baz2 +} + +object Baz1 extends Foo +final class Baz2 extends Foo + +object Test { + // bar should be inlined now + def f = Foo.mkFoo() bar 10 +} diff --git a/test/files/pos/selftails.scala b/test/files/pos/selftails.scala index 7c58543747..a4253b80c7 100644 --- a/test/files/pos/selftails.scala +++ b/test/files/pos/selftails.scala @@ -1,10 +1,10 @@ package net.liftweb.util - + /** * This trait adds functionality to Scala standard types */ trait BasicTypesHelpers { self: StringHelpers with ControlHelpers => - + /** * Compare two arrays of Byte for byte equality. * @return true if two Byte arrays contain the same bytes @@ -19,5 +19,5 @@ trait BasicTypesHelpers { self: StringHelpers with ControlHelpers => } } -trait StringHelpers +trait StringHelpers trait ControlHelpers diff --git a/test/files/pos/seq-ordering.scala b/test/files/pos/seq-ordering.scala index 8f1d293c40..517d8ae8aa 100644 --- a/test/files/pos/seq-ordering.scala +++ b/test/files/pos/seq-ordering.scala @@ -2,7 +2,7 @@ import Ordering.Implicits._ class A { import Predef.{ implicitly => ? } - + ?[Ordering[List[Int]]] ?[Ordering[IndexedSeq[(Int, String)]]] ?[Ordering[Seq[Seq[Int]]]] diff --git a/test/files/pos/signatures/Test.java b/test/files/pos/signatures/Test.java index 78c196526b..3d1e3756a7 100644 --- a/test/files/pos/signatures/Test.java +++ b/test/files/pos/signatures/Test.java @@ -3,7 +3,7 @@ import test.Outer; /* Test correct generation of java signatures. The Outer class should not * have a Java signature attribute for the inner method definition. Trait - * Mutable should have one, even though it is also a nested definition. + * Mutable should have one, even though it is also a nested definition. * (but for classes there is a way to tell about nesting to the JVM). */ class Test { diff --git a/test/files/pos/signatures/sig.scala b/test/files/pos/signatures/sig.scala index 3feb9c456a..4236f27bed 100644 --- a/test/files/pos/signatures/sig.scala +++ b/test/files/pos/signatures/sig.scala @@ -1,7 +1,7 @@ package test /* Tests correct generation of Java signatures. The local method 'bar' should - * not get a generic signature, as it may refer to type parameters of the enclosing + * not get a generic signature, as it may refer to type parameters of the enclosing * method, and the JVM does not know about nested methods. */ class Outer { diff --git a/test/files/pos/simple-exceptions.scala b/test/files/pos/simple-exceptions.scala index 38f2fc8500..a9f16bf90b 100644 --- a/test/files/pos/simple-exceptions.scala +++ b/test/files/pos/simple-exceptions.scala @@ -8,7 +8,7 @@ object Test { try { try { Console.println("hi!") - error("xx") + sys.error("xx") } finally Console.println("ho!") } diff --git a/test/files/pos/spec-Function1.scala b/test/files/pos/spec-Function1.scala index 5b6af67a74..5a115501d8 100644 --- a/test/files/pos/spec-Function1.scala +++ b/test/files/pos/spec-Function1.scala @@ -1,6 +1,6 @@ /* __ *\ ** ________ ___ / / ___ Scala API ** -** / __/ __// _ | / / / _ | (c) 2002-2011, LAMP/EPFL ** +** / __/ __// _ | / / / _ | (c) 2002-2013, LAMP/EPFL ** ** __\ \/ /__/ __ |/ /__/ __ | http://scala-lang.org/ ** ** /____/\___/_/ |_/____/_/ | | ** ** |/ ** @@ -35,11 +35,11 @@ package scalabip trait Function1[@specialized -T1, @specialized +R] extends AnyRef { self => def apply(v1:T1): R override def toString() = "<function>" - + /** (f compose g)(x) == f(g(x)) */ def compose[A](g: A => T1): A => R = { x => apply(g(x)) } - + /** (f andThen g)(x) == g(f(x)) */ def andThen[A](g: R => A): T1 => A = { x => g(apply(x)) } diff --git a/test/files/pos/spec-annotations.scala b/test/files/pos/spec-annotations.scala index 48281e5df5..b23abf48e8 100644 --- a/test/files/pos/spec-annotations.scala +++ b/test/files/pos/spec-annotations.scala @@ -1,7 +1,7 @@ class ann(i: Int) extends scala.annotation.Annotation // annotations on abstract types -abstract class C1[@serializable @cloneable +T, U, V[_]] +abstract class C1[@annotation.elidable(0) +T, U, V[_]] abstract class C2[@deprecated @ann(1) T <: Number, V] diff --git a/test/files/pos/spec-arrays.scala b/test/files/pos/spec-arrays.scala index 84f6eef071..883bc2fe62 100644 --- a/test/files/pos/spec-arrays.scala +++ b/test/files/pos/spec-arrays.scala @@ -20,7 +20,7 @@ abstract class AbsArray[T] { def updateBoolean(idx: Int, elem: Boolean) = update(idx, elem.asInstanceOf[T]) def applyObject(idx: Int): Object = apply(idx).asInstanceOf[Object] def updateObject(idx: Int, elem: Object) = update(idx, elem.asInstanceOf[T]) -} +} final class IntArray(arr: Array[Int]) extends AbsArray[Int] { def apply(idx: Int): Int = applyInt(idx) @@ -64,7 +64,7 @@ class ScalaSpecTest extends Test { while (i < arr.length) { acc = acc + arr.applyInt(i); i += 1 } acc } - + def modify(j: Int) = { val base = j * 100 % 1000 var i = 0 @@ -74,7 +74,7 @@ class ScalaSpecTest extends Test { } } } - + class ScalaSpec2Test extends Test { val arr: AbsArray[Int] = new IntArray(new Array[Int](1000)) @@ -84,7 +84,7 @@ class ScalaSpec2Test extends Test { while (i < arr.length) { acc = acc + arr.applyInt(i); i += 1 } acc } - + def modify(j: Int) = { val base = j * 100 % 1000 var i = 0 @@ -94,7 +94,7 @@ class ScalaSpec2Test extends Test { } } } - + class ScalaWrapTest extends Test { val arr: AbsArray[Int] = new ArraySeq(new Array[Int](1000)) @@ -104,7 +104,7 @@ class ScalaWrapTest extends Test { while (i < arr.length) { acc = acc + arr.applyInt(i); i += 1 } acc } - + def modify(j: Int) = { val base = j * 100 % 1000 var i = 0 @@ -114,7 +114,7 @@ class ScalaWrapTest extends Test { } } } - + class ScalaGenTest extends Test { val arr: AbsArray[Integer] = new ArraySeq(new Array[Integer](1000)) for (i <- 0 until arr.length) arr(i) = new Integer(0) @@ -125,7 +125,7 @@ class ScalaGenTest extends Test { while (i < arr.length) { acc = acc + arr.apply(i).intValue; i += 1 } acc } - + def modify(j: Int) = { val base = j * 100 % 1000 var i = 0 @@ -135,7 +135,7 @@ class ScalaGenTest extends Test { } } } - + class JavaTest extends Test { val arr = new Array[Int](1000) @@ -145,7 +145,7 @@ class JavaTest extends Test { while (i < arr.length) { acc = acc + arr(i); i += 1 } acc } - + def modify(j: Int) = { val base = j * 100 % 1000 var i = 0 @@ -166,7 +166,7 @@ class ScalaSpec3Test extends Test { while (i < arr.length) { acc = acc + arr(i); i += 1 } acc } - + def modify(j: Int) = { val base = j * 100 % 1000 var i = 0 @@ -177,38 +177,11 @@ class ScalaSpec3Test extends Test { } } -object TestJava extends scala.testing.Benchmark { - def run() { - (new JavaTest).run() - } -} - -object TestSpec extends scala.testing.Benchmark { - def run() { - (new ScalaSpecTest).run() - } -} - -object TestSpec2 extends scala.testing.Benchmark { - def run() { - (new ScalaSpec2Test).run() - } -} - -object TestGen extends scala.testing.Benchmark { - def run() { - (new ScalaGenTest).run() - } -} - -object TestWrap extends scala.testing.Benchmark { - def run() { - (new ScalaWrapTest).run() - } -} - -object TestSpec3 extends scala.testing.Benchmark { - def run() { - (new ScalaSpec3Test).run() - } +object TestRunner { + (new JavaTest).run() + (new ScalaSpecTest).run() + (new ScalaSpec2Test).run() + (new ScalaGenTest).run() + (new ScalaWrapTest).run() + (new ScalaSpec3Test).run() } diff --git a/test/files/pos/spec-asseenfrom.scala b/test/files/pos/spec-asseenfrom.scala index cf20fc5ffa..ede5791709 100644 --- a/test/files/pos/spec-asseenfrom.scala +++ b/test/files/pos/spec-asseenfrom.scala @@ -1,8 +1,8 @@ -class Automaton[@specialized(Double) W,State] { +class Automaton[@specialized(Double) W,State] { - def finalWeight(s: State): W = error("todo"); + def finalWeight(s: State): W = sys.error("todo"); - def allStates: Set[State] = error("toodo"); + def allStates: Set[State] = sys.error("toodo"); /** * Returns a map from states to its final weight. may expand all nodes. diff --git a/test/files/pos/spec-cyclic.scala b/test/files/pos/spec-cyclic.scala index b983caa6db..6cd7685370 100644 --- a/test/files/pos/spec-cyclic.scala +++ b/test/files/pos/spec-cyclic.scala @@ -6,25 +6,25 @@ trait MyPartialFunction[-A, +B] extends AnyRef with AbsFun[A, B] trait ColMap[A, +B] extends MyPartialFunction[A, B] /*with Collection[(A, B)] */ -trait ColSorted[K,+A] extends ColRanged[K,A] +trait ColSorted[K,+A] extends ColRanged[K,A] -trait ColSortedMap[K,+E] extends ColMap[K,E] with ColSorted[K,Tuple2[K,E]] +trait ColSortedMap[K,+E] extends ColMap[K,E] with ColSorted[K,Tuple2[K,E]] trait MutMap[A, B] extends AnyRef with ColMap[A, B] -trait ColRanged[K, +A] //extends Iterable[A] +trait ColRanged[K, +A] //extends Iterable[A] trait JclRanged[K,A] extends ColRanged[K,A] //with MutableIterable[A] { -trait JclMap[K,E] extends /*collection.jcl.MutableIterable[Tuple2[K,E]] with*/ MutMap[K,E] +trait JclMap[K,E] extends /*collection.jcl.MutableIterable[Tuple2[K,E]] with*/ MutMap[K,E] trait JclSorted[K,A] extends ColSorted[K,A] with JclRanged[K,A] trait JclSortedMap[K,E] extends ColSortedMap[K,E] with JclMap[K,E] with JclSorted[K,Tuple2[K,E]] class Foo[A, B] extends JclSortedMap[A, B] { - def apply(x: A): B = error("NYI") + def apply(x: A): B = sys.error("NYI") } class Bar { diff --git a/test/files/pos/spec-doubledef-new.scala b/test/files/pos/spec-doubledef-new.scala index ad9c6399a5..589ceb33b2 100644 --- a/test/files/pos/spec-doubledef-new.scala +++ b/test/files/pos/spec-doubledef-new.scala @@ -19,12 +19,12 @@ abstract class B[T, @specialized(scala.Int) U : TypeTag, @specialized(scala.Int) val u: U val v: V - def f(t: T, v2: V): Pair[U, V] = { + def f(t: T, v2: V): Tuple2[U, V] = { val m: Array[U] = null if (m.isEmpty) { - Pair(u, v) + (u, v) } else { - Pair(u, v2) + (u, v2) } } }
\ No newline at end of file diff --git a/test/files/pos/spec-doubledef-old.scala b/test/files/pos/spec-doubledef-old.scala index 86b0d857d3..bde259e4fa 100644 --- a/test/files/pos/spec-doubledef-old.scala +++ b/test/files/pos/spec-doubledef-old.scala @@ -17,12 +17,12 @@ abstract class B[T, @specialized(scala.Int) U : Manifest, @specialized(scala.Int val u: U val v: V - def f(t: T, v2: V): Pair[U, V] = { + def f(t: T, v2: V): Tuple2[U, V] = { val m: Array[U] = null if (m.isEmpty) { - Pair(u, v) + (u, v) } else { - Pair(u, v2) + (u, v2) } } } diff --git a/test/files/pos/spec-funs.scala b/test/files/pos/spec-funs.scala index 611ec0ef62..f92ae9899d 100644 --- a/test/files/pos/spec-funs.scala +++ b/test/files/pos/spec-funs.scala @@ -19,7 +19,7 @@ final class IntTest { val xs = new Array[Int](10000) val f = new AbsFunction1[Int, Int] { def apply(x: Int): Int = x * x - } + } for (j <- 0 until niters) { transF(xs, f) } @@ -54,10 +54,7 @@ final class ClosureTest { } } -object TestInt extends scala.testing.Benchmark { - def run() = (new IntTest).run() -} - -object TestClosure extends scala.testing.Benchmark { - def run() = (new ClosureTest).run() +object TestRunner { + (new IntTest).run() + (new ClosureTest).run() } diff --git a/test/files/pos/spec-params-old.scala b/test/files/pos/spec-params-old.scala index f522512846..33a252120c 100644 --- a/test/files/pos/spec-params-old.scala +++ b/test/files/pos/spec-params-old.scala @@ -10,7 +10,7 @@ class Foo[@specialized A: ClassManifest] { def m2[@specialized B <: String](x: B) = x.concat("a") // conflicting in bounds, no mention of other spec members - // expect an overload here plus implementation in + // expect an overload here plus implementation in // compatible specialized subclasses def m3[@specialized B >: A](x: B) = () @@ -19,10 +19,10 @@ class Foo[@specialized A: ClassManifest] { // non-conflicting, expect a normalized overload implementation here def m5[@specialized B](x: B) = x - + // non-conflicting, expect a normalized implementation here // and specialized implementations for all expansions in specialized subclasses - def m6[@specialized B](x: B, y: A) = + def m6[@specialized B](x: B, y: A) = goal(y) def goal(x: A) = { diff --git a/test/files/pos/spec-sealed.scala b/test/files/pos/spec-sealed.scala index 5782930899..d7ecfaaabd 100644 --- a/test/files/pos/spec-sealed.scala +++ b/test/files/pos/spec-sealed.scala @@ -2,13 +2,13 @@ sealed abstract class MyList[@specialized +A] { def head: A def tail: MyList[A] - def ::[@specialized B >: A](x: B): MyList[B] = + def ::[@specialized B >: A](x: B): MyList[B] = new Cons[B](x, this) } case object MyNil extends MyList[Nothing] { - def head = error("nil") - def tail = error("nil") + def head = sys.error("nil") + def tail = sys.error("nil") } case class Cons[@specialized a](private val hd: a, tl: MyList[a]) extends MyList[a] { @@ -19,7 +19,7 @@ case class Cons[@specialized a](private val hd: a, tl: MyList[a]) extends MyList abstract class IntList extends MyList[Int] object Main extends App { - val xs = 1 :: 2 :: 3 :: MyNil + val xs = 1 :: 2 :: 3 :: MyNil println(xs) } diff --git a/test/files/pos/spec-short.scala b/test/files/pos/spec-short.scala index 94a8007c6e..71e56a485a 100644 --- a/test/files/pos/spec-short.scala +++ b/test/files/pos/spec-short.scala @@ -5,7 +5,7 @@ abstract class AbsFun[@specialized T, @specialized U] { // abstract function, specialized def sum(xs: List[T]): Int - def prod(xs: List[T], mul: (Int, T) => Int): Int = + def prod(xs: List[T], mul: (Int, T) => Int): Int = (1 /: xs)(mul) // concrete function, not specialized @@ -18,9 +18,9 @@ abstract class AbsFun[@specialized T, @specialized U] { class Square extends AbsFun[Int, Int] { def apply(x: Int): Int = x * x - def sum(xs: List[Int]): Int = + def sum(xs: List[Int]): Int = (0 /: xs) (_ + _) - def abs(m: Int): Int = + def abs(m: Int): Int = sum(List(1, 2, 3)) } diff --git a/test/files/pos/spec-sparsearray-new.scala b/test/files/pos/spec-sparsearray-new.scala index 7b3934c476..df31089fe2 100644 --- a/test/files/pos/spec-sparsearray-new.scala +++ b/test/files/pos/spec-sparsearray-new.scala @@ -4,7 +4,7 @@ import scala.collection.mutable.MapLike class SparseArray[@specialized(Int) T:ClassTag] extends collection.mutable.Map[Int,T] with collection.mutable.MapLike[Int,T,SparseArray[T]] { override def get(x: Int) = { val ind = findOffset(x) - if(ind < 0) None else Some(error("ignore")) + if(ind < 0) None else Some(sys.error("ignore")) } /** @@ -13,13 +13,13 @@ class SparseArray[@specialized(Int) T:ClassTag] extends collection.mutable.Map[I * negative and can be converted into an insertion point with -(rv+1). */ private def findOffset(i : Int) : Int = { - error("impl doesn't matter") + sys.error("impl doesn't matter") } - override def apply(i : Int) : T = { error("ignore") } - override def update(i : Int, value : T) = error("ignore") + override def apply(i : Int) : T = { sys.error("ignore") } + override def update(i : Int, value : T) = sys.error("ignore") override def empty = new SparseArray[T] - def -=(ind: Int) = error("ignore") - def +=(kv: (Int,T)) = error("ignore") - override final def iterator = error("ignore") -}
\ No newline at end of file + def -=(ind: Int) = sys.error("ignore") + def +=(kv: (Int,T)) = sys.error("ignore") + override final def iterator = sys.error("ignore") +} diff --git a/test/files/pos/spec-sparsearray-old.scala b/test/files/pos/spec-sparsearray-old.scala index ea7710a785..e10dabd542 100644 --- a/test/files/pos/spec-sparsearray-old.scala +++ b/test/files/pos/spec-sparsearray-old.scala @@ -3,7 +3,7 @@ import scala.collection.mutable.MapLike class SparseArray[@specialized(Int) T:ClassManifest] extends collection.mutable.Map[Int,T] with collection.mutable.MapLike[Int,T,SparseArray[T]] { override def get(x: Int) = { val ind = findOffset(x) - if(ind < 0) None else Some(error("ignore")) + if(ind < 0) None else Some(sys.error("ignore")) } /** @@ -12,13 +12,13 @@ class SparseArray[@specialized(Int) T:ClassManifest] extends collection.mutable. * negative and can be converted into an insertion point with -(rv+1). */ private def findOffset(i : Int) : Int = { - error("impl doesn't matter") + sys.error("impl doesn't matter") } - override def apply(i : Int) : T = { error("ignore") } - override def update(i : Int, value : T) = error("ignore") + override def apply(i : Int) : T = { sys.error("ignore") } + override def update(i : Int, value : T) = sys.error("ignore") override def empty = new SparseArray[T] - def -=(ind: Int) = error("ignore") - def +=(kv: (Int,T)) = error("ignore") - override final def iterator = error("ignore") + def -=(ind: Int) = sys.error("ignore") + def +=(kv: (Int,T)) = sys.error("ignore") + override final def iterator = sys.error("ignore") } diff --git a/test/files/pos/spec-t3497.scala b/test/files/pos/spec-t3497.scala index 6cc0e24f89..ff054aa7de 100644 --- a/test/files/pos/spec-t3497.scala +++ b/test/files/pos/spec-t3497.scala @@ -10,7 +10,7 @@ object B extends A[ Array[Byte], Int ] { return -1 } } - + return 0 } } diff --git a/test/files/pos/spec-tailcall.scala b/test/files/pos/spec-tailcall.scala index d91e2f59ce..703ec011ad 100644 --- a/test/files/pos/spec-tailcall.scala +++ b/test/files/pos/spec-tailcall.scala @@ -1,5 +1,5 @@ class TailCall[@specialized T] { - final def dropLeft(n: Int, xs: List[T]): List[T] = + final def dropLeft(n: Int, xs: List[T]): List[T] = if (n == 0) xs else dropLeft(n - 1, xs.tail) /* @@ -7,7 +7,7 @@ class TailCall[@specialized T] { def crash(o: Option[String]) = filter { case None if { - def dropLeft[T](n: Int, xs: List[T]): List[T] = + def dropLeft[T](n: Int, xs: List[T]): List[T] = if (n == 0) xs else dropLeft(n - 1, xs.tail) dropLeft(2, List(1, 2, 3)).isEmpty diff --git a/test/files/pos/spec-traits.scala b/test/files/pos/spec-traits.scala index c6cc2921b7..074f6c3d3c 100644 --- a/test/files/pos/spec-traits.scala +++ b/test/files/pos/spec-traits.scala @@ -11,19 +11,19 @@ class Lazy { // issue 3307 class Bug3307 { - def f[Z](block: String => Z) { - block("abc") + def f[Z](block: String => Z) { + block("abc") } - - ({ () => - f { implicit x => println(x) } })() + + ({ () => + f { implicit x => println(x) } })() } // issue 3301 trait T[X] class Bug3301 { - def t[A]: T[A] = error("stub") + def t[A]: T[A] = sys.error("stub") () => { type X = Int diff --git a/test/files/pos/spec-vector.scala b/test/files/pos/spec-vector.scala index 06e49b521f..392949c669 100644 --- a/test/files/pos/spec-vector.scala +++ b/test/files/pos/spec-vector.scala @@ -1,4 +1,4 @@ // ticket #3379, abstract overrides trait Vector extends (Int=>Double) { - override def apply(i: Int): Double + override def apply(i: Int): Double } diff --git a/test/files/pos/spec.scala b/test/files/pos/spec.scala index 093d3cded4..cc060ffe84 100644 --- a/test/files/pos/spec.scala +++ b/test/files/pos/spec.scala @@ -7,7 +7,7 @@ class Bar[@specialized(Int, AnyRef) A](a: A) { } -class WithInner[@specialized(Int, AnyRef) A](a: A) { +class WithInner[@specialized(Int, AnyRef) A](a: A) { class Inner { def meth = a } @@ -42,7 +42,7 @@ class Qux[@specialized(AnyRef) A] { class Foo[@specialized(Int, AnyRef) A](val a: Array[A]) { a(0) - + def id(elem: A) = a(0) = elem } @@ -52,13 +52,13 @@ object Test { def main(arg: Array[String]) { val f = new Foo(new Array[String](5)) f.id("") - + val z = new Baz[Int, Double] z.ab(1, 1.0) - + testspec(new Array[String](5)) testspec(new Array[Int](5)) } - + def testspec[@specialized(Int, AnyRef) T](arr: Array[T]) = arr(0) } diff --git a/test/files/pos/specializes-sym-crash.scala b/test/files/pos/specializes-sym-crash.scala index c46f435ac4..7778ba277b 100644 --- a/test/files/pos/specializes-sym-crash.scala +++ b/test/files/pos/specializes-sym-crash.scala @@ -2,11 +2,11 @@ import scala.collection._ trait Foo[+A, +Coll, - +This <: GenSeqView[A, Coll] with GenSeqViewLike[A, Coll, This]] -extends GenSeq[A] with GenSeqLike[A, This] with GenIterableView[A, Coll] with GenIterableViewLike[A, Coll, This] { + +This <: SeqView[A, Coll] with SeqViewLike[A, Coll, This]] +extends Seq[A] with SeqLike[A, This] with IterableView[A, Coll] with IterableViewLike[A, Coll, This] { self => - trait Transformed[+B] extends GenSeqView[B, Coll] with super.Transformed[B] { + trait Transformed[+B] extends SeqView[B, Coll] with super.Transformed[B] { def length: Int def apply(idx: Int): B override def toString = viewToString diff --git a/test/files/pos/strings.scala b/test/files/pos/strings.scala index 83b8179706..9fe8cfd94b 100644 --- a/test/files/pos/strings.scala +++ b/test/files/pos/strings.scala @@ -6,5 +6,5 @@ object test { } // #1000 object A { - println("""This a "raw" string ending with a "double quote"""") + println("""This a "raw" string ending with a "double quote"""") } diff --git a/test/files/pos/sudoku.scala b/test/files/pos/sudoku.scala index 336dc756a9..9435f504d6 100644 --- a/test/files/pos/sudoku.scala +++ b/test/files/pos/sudoku.scala @@ -3,22 +3,22 @@ object SudokuSolver extends App { // held in a global variable m. The program begins by reading 9 lines // of input to fill the board var m: Array[Array[Char]] = Array.tabulate(9)((x: Int) => readLine.toArray) - + // For printing m, a method print is defined def print = { println(""); m map (carr => println(new String(carr))) } - + // The test for validity is performed by looping over i=0..8 and // testing the row, column and 3x3 square containing the given // coordinate def invalid(i: Int, x: Int, y: Int, n: Char): Boolean = i<9 && (m(y)(i) == n || m(i)(x) == n || m(y/3*3 + i/3)(x/3*3 + i % 3) == n || invalid(i+1, x, y, n)) - + // Looping over a half-closed range of consecutive integers [l..u) // is factored out into a higher-order function def fold(f: (Int, Int) => Int, accu: Int, l: Int, u: Int): Int = if(l==u) accu else fold(f, f(accu, l), l+1, u) - + // The search function examines each position on the board in turn, // trying the numbers 1..9 in each unfilled position // The function is itself a higher-order fold, accumulating the value @@ -34,7 +34,7 @@ object SudokuSolver extends App { val newaccu = search(x+1, y, f, accu); m(y)(x) = '0'; newaccu}, accu, 1, 10)} - + // The main part of the program uses the search function to accumulate // the total number of solutions println("\n"+search(0,0,i => {print; i+1},0)+" solution(s)") diff --git a/test/files/pos/super.cmds b/test/files/pos/super.cmds deleted file mode 100644 index 8f3f8a4172..0000000000 --- a/test/files/pos/super.cmds +++ /dev/null @@ -1,2 +0,0 @@ -javac Super_1.java -scalac Super_2.scala diff --git a/test/files/pos/super/Super_1.java b/test/files/pos/super/Super_1.java index 418ae96bc0..9acbba0ec4 100644 --- a/test/files/pos/super/Super_1.java +++ b/test/files/pos/super/Super_1.java @@ -1,6 +1,6 @@ // A.java interface Inter<T> { } -class Super implements Inter<Super.Inner> { +class Super implements Inter<Super.Inner> { public class Inner { }; } diff --git a/test/files/pos/switch-small.flags b/test/files/pos/switch-small.flags new file mode 100644 index 0000000000..85d8eb2ba2 --- /dev/null +++ b/test/files/pos/switch-small.flags @@ -0,0 +1 @@ +-Xfatal-warnings diff --git a/test/files/pos/t0031.scala b/test/files/pos/t0031.scala index ec6eae9282..d4050c8184 100644 --- a/test/files/pos/t0031.scala +++ b/test/files/pos/t0031.scala @@ -4,17 +4,17 @@ object Main { def ensure(postcondition: a => Boolean): a } - def require[a](precondition: => Boolean)(command: => a): Ensure[a] = + def require[a](precondition: => Boolean)(command: => a): Ensure[a] = if (precondition) new Ensure[a] { def ensure(postcondition: a => Boolean): a = { val result = command; if (postcondition(result)) result - else error("Assertion error") + else sys.error("Assertion error") } } else - error("Assertion error"); + sys.error("Assertion error"); def arb[a](s: List[a]) = require (! s.isEmpty) { diff --git a/test/files/pos/t0064.scala b/test/files/pos/t0064.scala index c2ce4bf6d0..1eeca8dcad 100644 --- a/test/files/pos/t0064.scala +++ b/test/files/pos/t0064.scala @@ -1,6 +1,6 @@ object B { def main(Args:Array[String]) = { - val Pair(_,x) = Pair(1,2); + val (_,x) = (1,2); x + 1; } } diff --git a/test/files/pos/t0066.scala b/test/files/pos/t0066.scala index 9317da7165..2153264e7a 100644 --- a/test/files/pos/t0066.scala +++ b/test/files/pos/t0066.scala @@ -3,5 +3,5 @@ class GBTree[A, B] /*with Map[A, B, GBTree[A,B]]*/ { case class Node[A,B](key:A,value:B,smaller:Node[A,B],bigger:Node[A,B]) extends Tree[A,B]; case class Nil[A,B]() extends Tree[A,B]; - + } diff --git a/test/files/pos/t0069.scala b/test/files/pos/t0069.scala index 5a8c15cd5a..e4c242c0ee 100644 --- a/test/files/pos/t0069.scala +++ b/test/files/pos/t0069.scala @@ -8,4 +8,3 @@ object testCQ { */ } - diff --git a/test/files/pos/t0227.scala b/test/files/pos/t0227.scala index 8650350c4a..806b20d409 100644 --- a/test/files/pos/t0227.scala +++ b/test/files/pos/t0227.scala @@ -5,7 +5,7 @@ final class Settings { abstract class Factory { type libraryType <: Base - final def apply(settings: Settings): libraryType = error("bla") + final def apply(settings: Settings): libraryType = sys.error("bla") } abstract class Base { @@ -19,7 +19,7 @@ class SA(val settings: Settings) extends Base { SD ) ::: settings.f( SC - ) + ) } object SC extends Factory { diff --git a/test/files/pos/t0288/Foo.scala b/test/files/pos/t0288/Foo.scala index 1f7d81327d..778ba65f58 100644 --- a/test/files/pos/t0288/Foo.scala +++ b/test/files/pos/t0288/Foo.scala @@ -6,4 +6,4 @@ class Foo extends Outer{ val bar = new Inner(); // Shouldn't this work? -} +} diff --git a/test/files/pos/t0288/Outer.java b/test/files/pos/t0288/Outer.java index 7a3754fb5d..bea3e3f8d0 100644 --- a/test/files/pos/t0288/Outer.java +++ b/test/files/pos/t0288/Outer.java @@ -6,4 +6,4 @@ public class Outer{ } -} +} diff --git a/test/files/pos/t0301.scala b/test/files/pos/t0301.scala index cb68f38062..24b4776010 100644 --- a/test/files/pos/t0301.scala +++ b/test/files/pos/t0301.scala @@ -1,7 +1,7 @@ package fos abstract class Expr -case class Var extends Expr +case class Var() extends Expr object Analyzer { def substitution(expr: Expr, cls: (Var,Var)): Expr = diff --git a/test/files/pos/t0305.scala b/test/files/pos/t0305.scala index 4d37a02eb3..4838b1fcf8 100644 --- a/test/files/pos/t0305.scala +++ b/test/files/pos/t0305.scala @@ -1,5 +1,5 @@ object Test extends App { - + def foo(is:Int*) = 1; def foo(i:Int) = 2; diff --git a/test/files/pos/t0422.scala b/test/files/pos/t0422.scala deleted file mode 100644 index cb3ba279d4..0000000000 --- a/test/files/pos/t0422.scala +++ /dev/null @@ -1,17 +0,0 @@ -import scala.util.regexp.WordExp; -import scala.util.automata.WordBerrySethi; - -object BoolWordExp extends WordExp { - type _labelT = MyLabels; - type _regexpT = RegExp; - abstract class MyLabels extends Label ; - case class MyLabel(c:Char) extends MyLabels; -} - -object MyTranslator extends WordBerrySethi { - override val lang = BoolWordExp; - import lang._; - override protected def seenLabel( r:RegExp, i:Int, label: _labelT ): Unit = { - super.seenLabel(r,i,label) - } -} diff --git a/test/files/pos/t0438.scala b/test/files/pos/t0438.scala index 33b7efeaac..fa5b7711ff 100644 --- a/test/files/pos/t0438.scala +++ b/test/files/pos/t0438.scala @@ -1,9 +1,9 @@ class Foo { - implicit def pair2fun2[A, B, C](f: (A, B) => C) = + implicit def pair2fun2[A, B, C](f: (A, B) => C) = {p: (A, B) => f(p._1, p._2) } def foo(f: ((Int, Int)) => Int) = f - def bar(x: Int, y: Int) = x + y + def bar(x: Int, y: Int) = x + y foo({ (x: Int, y: Int) => x + y }) // works foo(pair2fun2(bar _)) // works diff --git a/test/files/pos/t0453.scala b/test/files/pos/t0453.scala index d59a3d22f2..dfacc5eed7 100644 --- a/test/files/pos/t0453.scala +++ b/test/files/pos/t0453.scala @@ -1,5 +1,5 @@ object Test { - val foo = new { + val foo = new { trait Bar def l () : Bar = { new Bar {} } } diff --git a/test/files/pos/t0599.scala b/test/files/pos/t0599.scala index 6125b99ce2..885159af66 100644 --- a/test/files/pos/t0599.scala +++ b/test/files/pos/t0599.scala @@ -15,4 +15,4 @@ abstract class FooA { a.xxx; doB.xxx; } - } + } diff --git a/test/files/pos/t0625.scala b/test/files/pos/t0625.scala index bda463d6a6..5614542599 100644 --- a/test/files/pos/t0625.scala +++ b/test/files/pos/t0625.scala @@ -1,6 +1,6 @@ object Test { def idMap[C[_],T](m: { def map[U](f: T => U): C[U] }): C[T] = m.map(t => t) - + def main(args: Array[String]): Unit = { idMap(Some(5)) idMap(Responder.constant(5)) diff --git a/test/files/pos/t0646.scala b/test/files/pos/t0646.scala deleted file mode 100644 index 6146e60020..0000000000 --- a/test/files/pos/t0646.scala +++ /dev/null @@ -1,21 +0,0 @@ -object xfor { - - import scala.xml.NodeSeq - - val books = - <bks> - <title>Blabla</title> - <title>Blubabla</title> - <title>Baaaaaaalabla</title> - </bks>; - - new NodeSeq { val theSeq = books.child } match { - case t @ Seq(<title>Blabla</title>) => t - } - - //val n: NodeSeq = new NodeSeq { val theSeq = books.child } - //n match { - // case t @ <title>Blabla</title> => t - //} - -} diff --git a/test/files/pos/t0770.scala b/test/files/pos/t0770.scala index bb438f1918..7a0a2bf9bb 100644 --- a/test/files/pos/t0770.scala +++ b/test/files/pos/t0770.scala @@ -1,7 +1,7 @@ trait A { private[this] val p = 5 - + def f = (b: Byte) => p } diff --git a/test/files/pos/t0774/unrelated.scala b/test/files/pos/t0774/unrelated.scala index 483f836d0c..1efdb2505e 100644 --- a/test/files/pos/t0774/unrelated.scala +++ b/test/files/pos/t0774/unrelated.scala @@ -1,8 +1,8 @@ object Outer { import Inner._ - + deathname - + object Inner { def deathname: Int = 1 } diff --git a/test/files/pos/t0786.scala b/test/files/pos/t0786.scala index 4d9f1d0dc9..f40cf7d2e1 100644 --- a/test/files/pos/t0786.scala +++ b/test/files/pos/t0786.scala @@ -2,15 +2,15 @@ object ImplicitProblem { class M[T] def nullval[T] = null.asInstanceOf[T]; - + trait Rep[T] { def eval: Int } - + implicit def toRep0(n: Int) = new Rep[Int] { def eval = 0 } - + implicit def toRepN[T](n: M[T])(implicit f: T => Rep[T]) = new Rep[M[T]] { def eval = f(nullval[T]).eval + 1 } @@ -18,11 +18,11 @@ object ImplicitProblem { def depth[T <% Rep[T]](n: T) = n.eval def main(args: Array[String]) { - println(depth(nullval[M[Int]])) // (1) this works + println(depth(nullval[M[Int]])) // (1) this works println(nullval[M[Int]].eval) // (2) this works - + type m = M[Int] - println(depth(nullval[m])) // (3) this doesn't compile on 2.7.RC1 + println(depth(nullval[m])) // (3) this doesn't compile on 2.7.RC1 println(nullval[m].eval) // (4) this works } diff --git a/test/files/pos/t0851.scala b/test/files/pos/t0851.scala new file mode 100644 index 0000000000..fc7109dcd4 --- /dev/null +++ b/test/files/pos/t0851.scala @@ -0,0 +1,14 @@ +package test + +object test1 { + case class Foo[T,T2](f : (T,T2) => String) extends (((T,T2)) => String){ + def apply(t : T) = (s:T2) => f(t,s) + def apply(p : (T,T2)) = f(p._1,p._2) + } + implicit def g[T](f : (T,String) => String) = Foo(f) + def main(args : Array[String]) : Unit = { + val f = (x:Int,s:String) => s + x + println(f(1)) + () + } +} diff --git a/test/files/pos/t0872.scala b/test/files/pos/t0872.scala new file mode 100644 index 0000000000..8f4c1c4436 --- /dev/null +++ b/test/files/pos/t0872.scala @@ -0,0 +1,8 @@ +object Main { + def main(args : Array[String]) { + val fn = (a : Int, str : String) => "a: " + a + ", str: " + str + implicit def fx[T](f : (T,String) => String) = (x:T) => f(x,null) + println(fn(1)) + () + } +} diff --git a/test/files/pos/t1000.scala b/test/files/pos/t1000.scala index fabef94fff..613af76b94 100644 --- a/test/files/pos/t1000.scala +++ b/test/files/pos/t1000.scala @@ -1,5 +1,5 @@ object A { - println("""This a "raw" string ending with a "double quote"""") + println("""This a "raw" string ending with a "double quote"""") } object Test extends App { diff --git a/test/files/pos/t1014.scala b/test/files/pos/t1014.scala index 3fc10d10dc..6fb7f7ba49 100644 --- a/test/files/pos/t1014.scala +++ b/test/files/pos/t1014.scala @@ -1,9 +1,10 @@ -import scala.xml.{NodeSeq, Elem} +class NodeSeq +class Elem extends NodeSeq class EO extends App with Moo { // return type is Flog, inherited from overridden method. // implicit conversions are applied because expected type `pt` is `Flog` when `computeType(rhs, pt)`. - def cat = <cat>dog</cat> + def cat = (??? : Elem) implicit def nodeSeqToFlog(in: Elem): Flog = new Flog(in) } diff --git a/test/files/pos/t1029.cmds b/test/files/pos/t1029.cmds deleted file mode 100644 index 06b863dc03..0000000000 --- a/test/files/pos/t1029.cmds +++ /dev/null @@ -1,2 +0,0 @@ -scalac Test_1.scala -scalac Test_2.scala diff --git a/test/files/pos/t1035.scala b/test/files/pos/t1035.scala index bd693d9e68..e0a9379c7e 100644 --- a/test/files/pos/t1035.scala +++ b/test/files/pos/t1035.scala @@ -7,7 +7,7 @@ class A { var name:String = _ def getName() = name def this(name:String, age:Int){this();this.name=name} - + } class B(name:String) extends A(name,0){ @@ -18,15 +18,15 @@ class D { object A { def unapply(p:A) = Some(p.getName) } - + object B { def unapply(p:B) = Some(p.getName) } def foo(p:Any) = p match { - case B(n) => println("B") - case A(n) => println("A") - - + case B(n) => println("B") + case A(n) => println("A") + + } } diff --git a/test/files/pos/t1048.scala b/test/files/pos/t1048.scala index ce57e72391..cd16db5b60 100644 --- a/test/files/pos/t1048.scala +++ b/test/files/pos/t1048.scala @@ -1,7 +1,7 @@ trait T[U] { def x: T[V] forSome { type V <: U } } - + object T { def unapply[U](t: T[U]): Option[T[V] forSome { type V <: U }] = Some(t.x) } @@ -12,4 +12,3 @@ object Test { } } - diff --git a/test/files/pos/t1059.scala b/test/files/pos/t1059.scala deleted file mode 100644 index bcd8f0374f..0000000000 --- a/test/files/pos/t1059.scala +++ /dev/null @@ -1,28 +0,0 @@ -package com; - -import scala.xml._ - -object Main { - - def main(args : Array[String]) : Unit = { - - var m : PartialFunction[Any, Any] = { - - case SafeNodeSeq(s @ _*) => println(s) } - - println(m(<a/> ++ <b/>)) - println(m.isDefinedAt(<a/> ++ <b/>)) - - } - -} - -object SafeNodeSeq { - - def unapplySeq(any: Any) : Option[Seq[Node]] = any match { case s: Seq[_] => Some(s flatMap ( _ match { - - case n: Node => n case _ => NodeSeq.Empty - - })) case _ => None } - -} diff --git a/test/files/pos/t1071.scala b/test/files/pos/t1071.scala index 7fb802f8b0..59149a021b 100644 --- a/test/files/pos/t1071.scala +++ b/test/files/pos/t1071.scala @@ -12,6 +12,6 @@ object Test { val c = new C (c: D).a // works - c.a // error + c.a // error } diff --git a/test/files/pos/t1090.scala b/test/files/pos/t1090.scala index dca762af4f..a9bce90b00 100644 --- a/test/files/pos/t1090.scala +++ b/test/files/pos/t1090.scala @@ -10,7 +10,7 @@ object Test { type Node = Core.this.Node } def f(manager : Manager) = manager.iterator.foreach{ - case node : NodeImpl => + case node : NodeImpl => } } } diff --git a/test/files/pos/t1107.scala b/test/files/pos/t1107a.scala index 0bf40bb4cc..0bf40bb4cc 100644 --- a/test/files/pos/t1107.scala +++ b/test/files/pos/t1107a.scala diff --git a/test/files/pos/t1107b/O.scala b/test/files/pos/t1107b/O.scala index aa605a6d09..0198867704 100644 --- a/test/files/pos/t1107b/O.scala +++ b/test/files/pos/t1107b/O.scala @@ -4,10 +4,10 @@ object O case s: Sub => true case _ => false } - + def main(args: Array[String]): Unit = { val c = new AnyRef with C c.bob.toString + c.bob2.toString - } + } } diff --git a/test/files/pos/t1107b/T.scala b/test/files/pos/t1107b/T.scala index 1f3712d529..0dff0b94fd 100644 --- a/test/files/pos/t1107b/T.scala +++ b/test/files/pos/t1107b/T.scala @@ -1,6 +1,6 @@ sealed trait Top sealed trait Sub extends Top -trait C { +trait C { private object P extends Sub def bob() = P.getClass def bob2() = O.d(P) diff --git a/test/files/pos/t1123.scala b/test/files/pos/t1123.scala index a7b009cbbe..3812fa3eb3 100644 --- a/test/files/pos/t1123.scala +++ b/test/files/pos/t1123.scala @@ -7,5 +7,5 @@ object Test { } def f = extraListener.h } - def main(args : Array[String]) : Unit = (new Editor).f + def main(args : Array[String]) : Unit = (new Editor).f } diff --git a/test/files/pos/t1133.scala b/test/files/pos/t1133.scala index 4538de5f5f..562b528ea3 100644 --- a/test/files/pos/t1133.scala +++ b/test/files/pos/t1133.scala @@ -8,21 +8,21 @@ object Match case _ => println("fail") } } - + object Extractor1 { def unapply(x: Any) = x match { case x: String => Some(x, x+x, x+x+x, x+x, x) case _ => None } } - + object Extractor2 { def unapply(x: Any) = x match { case x: String => Some(x, x+x, x+x+x) case _ => None } } - + object Extractor3 { def unapply(x: Any) = x match { case x: String => Some(x, x, x) diff --git a/test/files/pos/t1164.scala b/test/files/pos/t1164.scala index 307ca92c85..ab58c1d6b4 100644 --- a/test/files/pos/t1164.scala +++ b/test/files/pos/t1164.scala @@ -1,29 +1,29 @@ -object test { +object test { - class Foo[a](val arg : a) + class Foo[a](val arg : a) + + object Foo { + def apply [a](arg : a, right :a) = new Foo[a](arg) + def unapply [a](m : Foo[a]) = Some (m.arg) + } - object Foo { - def apply [a](arg : a, right :a) = new Foo[a](arg) - def unapply [a](m : Foo[a]) = Some (m.arg) - } - def matchAndGetArgFromFoo[a]( e:Foo[a]):a = {e match { case Foo(x) => x }} - - + + // Try the same thing as above but use function as argument to Bar // constructor - + type FunIntToA [a] = (Int) => a - class Bar[a] (var f: FunIntToA[a]) - + class Bar[a] (var f: FunIntToA[a]) + object Bar { def apply[a](f: FunIntToA[a]) = new Bar[a](f) def unapply[a](m: Bar[a]) = Some (m.f) } - + def matchAndGetFunFromBar[a](b:Bar[a]) : FunIntToA[a] = { b match { case Bar(x) => x}} - + } diff --git a/test/files/pos/t1168.scala b/test/files/pos/t1168.scala index d9f38714b8..75638e792f 100644 --- a/test/files/pos/t1168.scala +++ b/test/files/pos/t1168.scala @@ -1,5 +1,5 @@ object Test extends App { - + trait SpecialException {} try { diff --git a/test/files/pos/t1203.scala b/test/files/pos/t1203.scala deleted file mode 100644 index 062ef93fc6..0000000000 --- a/test/files/pos/t1203.scala +++ /dev/null @@ -1,7 +0,0 @@ -case class ant(t: String) extends scala.annotation.Annotation -object Test { - def main(args: Array[String]): Unit = { - val a: scala.xml.NodeSeq @ant("12") = Nil - println(a) - } -} diff --git a/test/files/pos/t1203a.scala b/test/files/pos/t1203a.scala new file mode 100644 index 0000000000..cf5ab9fba0 --- /dev/null +++ b/test/files/pos/t1203a.scala @@ -0,0 +1,13 @@ +class Node +object NodeSeq { + implicit def seqToNodeSeq(s: Seq[Node]): NodeSeq = ??? +} +abstract class NodeSeq extends collection.immutable.Seq[Node] + +case class ant(t: String) extends scala.annotation.Annotation +object Test { + def main(args: Array[String]): Unit = { + val a: NodeSeq @ant("12") = Nil + println(a) + } +} diff --git a/test/files/pos/t1210a.scala b/test/files/pos/t1210a.scala index fbb0a611d6..b3492f96e4 100644 --- a/test/files/pos/t1210a.scala +++ b/test/files/pos/t1210a.scala @@ -1,9 +1,9 @@ // both styles of abstraction should behave the same // related to 1210 because that bug broke the OO version below -trait OO { +trait OO { abstract class Test { self => type T - + val v: Test {type T = self.T} = self.v.v } } diff --git a/test/files/pos/t122.scala b/test/files/pos/t122.scala index e3daeef73e..630e24ce4a 100644 --- a/test/files/pos/t122.scala +++ b/test/files/pos/t122.scala @@ -1,4 +1,4 @@ class L { - val List(v:Int, 2) = List(2, v:Int) + val List(v:Int, 2) = List(2, v:Int) val (a:Int, b:Int) = (1, a) } diff --git a/test/files/pos/t1230/S.scala b/test/files/pos/t1230/S.scala index f8a691b6de..530dd4b853 100644 --- a/test/files/pos/t1230/S.scala +++ b/test/files/pos/t1230/S.scala @@ -1 +1 @@ -object S extends Application { (new J).foo = 5 } +object S extends App { (new J).foo = 5 } diff --git a/test/files/pos/t1231/S.scala b/test/files/pos/t1231/S.scala index ee08866e04..f14aa2561b 100644 --- a/test/files/pos/t1231/S.scala +++ b/test/files/pos/t1231/S.scala @@ -1 +1 @@ -object S extends Application { println(J.j1) } +object S extends App { println(J.j1) } diff --git a/test/files/pos/t1236.scala b/test/files/pos/t1236.scala index 7028162ee0..5e221ce411 100644 --- a/test/files/pos/t1236.scala +++ b/test/files/pos/t1236.scala @@ -1,5 +1,5 @@ trait Empty[E[_]] { - def e[A]: E[A] + def e[A]: E[A] } object T { diff --git a/test/files/pos/t1237.scala b/test/files/pos/t1237.scala index 0d1dd05d50..7777372138 100644 --- a/test/files/pos/t1237.scala +++ b/test/files/pos/t1237.scala @@ -1,11 +1,11 @@ -class HelloWorld { - def main(args: Array[String]) { +class HelloWorld { + def main(args: Array[String]) { object TypeBool; trait Fct { def g(x : Int) = TypeBool // breaks. - + // def g(x : Int) = 3 // fine. } diff --git a/test/files/pos/t1254/t1254.java b/test/files/pos/t1254/t1254.java index 17dc391672..17e1c60bf5 100644 --- a/test/files/pos/t1254/t1254.java +++ b/test/files/pos/t1254/t1254.java @@ -11,7 +11,7 @@ class NothingBug3 { scala.Option<?> o = scala.None$.MODULE$; test(o); - None.toLeft(new scala.runtime.AbstractFunction0<Integer>() { + None.toLeft(new scala.runtime.AbstractFunction0<Integer>() { public Integer apply() { return 0; } }); } diff --git a/test/files/pos/t1263/test.scala b/test/files/pos/t1263/test.scala index 7ced59083a..92d8c1cdfa 100644 --- a/test/files/pos/t1263/test.scala +++ b/test/files/pos/t1263/test.scala @@ -2,7 +2,7 @@ package test trait Map[A, +B] { def plus(key: A): MapTo = new MapTo(key) - + class MapTo(key: A) { def arrow [B1 >: B](value: B1) = null } diff --git a/test/files/pos/t1272.scala b/test/files/pos/t1272.scala index aab1a886c7..d86a909ae5 100644 --- a/test/files/pos/t1272.scala +++ b/test/files/pos/t1272.scala @@ -2,8 +2,8 @@ object ImplicitTest { implicit val i : Int = 10 implicit def a(implicit i : Int) : Array[Byte] = null implicit def b[T](implicit i : Int) : Array[T] = null - + def fn[T](implicit x : T) = 0 - + val x = fn[Array[Byte]] }
\ No newline at end of file diff --git a/test/files/pos/t1292.scala b/test/files/pos/t1292.scala index 3ed153abf2..83a996d530 100644 --- a/test/files/pos/t1292.scala +++ b/test/files/pos/t1292.scala @@ -1,5 +1,5 @@ trait Foo[T <: Foo[T, Enum], Enum <: Enumeration] { - type StV = Enum#Value + type StV = Enum#Value type Meta = MegaFoo[T, Enum] type Slog <: Enumeration diff --git a/test/files/pos/t1318.scala b/test/files/pos/t1318.scala index 3fc6e3060f..f3d2f7ab5a 100644 --- a/test/files/pos/t1318.scala +++ b/test/files/pos/t1318.scala @@ -19,7 +19,7 @@ object A extends A0 {} abstract class B0 extends M { type mType = B0 - def fs: List[fType] = Nil + def fs: List[fType] = Nil } object B extends B0 {} diff --git a/test/files/pos/t1357.scala b/test/files/pos/t1357.scala index 7bc6d45034..fcdecb3ad3 100644 --- a/test/files/pos/t1357.scala +++ b/test/files/pos/t1357.scala @@ -6,7 +6,7 @@ object NonEmptyCons { object Main { type BT[+H, +T <: Tuple2[Tuple2[H, T], Tuple2[H, T]]] = Tuple2[H, T] - + // type T = Tuple2[String,String] type BinaryTree[+E] = BT[E, T forSome { type T <: Tuple2[BT[E, T], BT[E, T]] }] diff --git a/test/files/pos/t1385.scala b/test/files/pos/t1385.scala index 59953bcc39..aefd9c35b3 100644 --- a/test/files/pos/t1385.scala +++ b/test/files/pos/t1385.scala @@ -1,3 +1,3 @@ -@serializable object Test { - private def readResolve:AnyRef = this +object Test extends Serializable { + private def readResolve: AnyRef = this } diff --git a/test/files/pos/t1439.flags b/test/files/pos/t1439.flags index 1e70f5c5c7..bca57e4785 100644 --- a/test/files/pos/t1439.flags +++ b/test/files/pos/t1439.flags @@ -1 +1 @@ --unchecked -Xfatal-warnings -Xoldpatmat -language:higherKinds +-unchecked -Xfatal-warnings -language:higherKinds diff --git a/test/files/pos/t1480.scala b/test/files/pos/t1480.scala index 3dc3062ca0..1d9f94d2e9 100644 --- a/test/files/pos/t1480.scala +++ b/test/files/pos/t1480.scala @@ -1,6 +1,6 @@ class Foo{ def compare(newP : Any, oldP : Any) : Boolean = (newP,oldP) match { - case (newP : AnyRef, oldP : AnyRef) if newP == oldP => newP == oldP - case (newS : Symbol, oldS: Symbol) if newS == oldS => newS == oldS + case (newP : AnyRef, oldP : AnyRef) if newP == oldP => newP == oldP + case (newS : Symbol, oldS: Symbol) if newS == oldS => newS == oldS } } diff --git a/test/files/pos/t1560.scala b/test/files/pos/t1560.scala index fb5592016a..2af299af86 100644 --- a/test/files/pos/t1560.scala +++ b/test/files/pos/t1560.scala @@ -1,13 +1,13 @@ object Test extends App { - + trait C[T] { def t: T } - + def b: Option[C[x] forSome { type x }] = null - + def c = b match { case Some(b) => b.t } - + } diff --git a/test/files/pos/t1565.scala b/test/files/pos/t1565.scala index 030086c541..df333151d5 100644 --- a/test/files/pos/t1565.scala +++ b/test/files/pos/t1565.scala @@ -3,7 +3,7 @@ object Bug1565 { def x() = { 0; (a : Int, b : Int) => println(List(a, b)) ; 0 } (a : Int, b : Int) => println(List(a, b)) - + // various function syntaxes to exercise the parser val xs = List(1,2,3) xs.filter(x => x < 2) diff --git a/test/files/pos/t1591b.scala b/test/files/pos/t1591b.scala index 84372bb084..c671ad6472 100644 --- a/test/files/pos/t1591b.scala +++ b/test/files/pos/t1591b.scala @@ -1,10 +1,10 @@ import scala.tools.nsc._ -class SemanticTokens(val compiler: Global) { - import compiler._ +class SemanticTokens(val compiler: Global) { + import compiler._ def build() = ErrorType - + class Process { def f() = analyzer // or to crash the compiler instead of a nice message, diff --git a/test/files/pos/t1626.scala b/test/files/pos/t1626.scala deleted file mode 100644 index 200be47430..0000000000 --- a/test/files/pos/t1626.scala +++ /dev/null @@ -1,4 +0,0 @@ -object o { - val n = <a xmlns=""/> - n.namespace == null -} diff --git a/test/files/pos/t1648.scala b/test/files/pos/t1648.scala deleted file mode 100644 index 6d53ce11ee..0000000000 --- a/test/files/pos/t1648.scala +++ /dev/null @@ -1,4 +0,0 @@ -object Test { - class MyClass extends scala.util.logging.Logged { } - val x = new MyClass with scala.util.logging.ConsoleLogger -} diff --git a/test/files/pos/t1711/Seq.scala b/test/files/pos/t1711/Seq.scala index 5f426ea0f7..c18f05cd73 100644 --- a/test/files/pos/t1711/Seq.scala +++ b/test/files/pos/t1711/Seq.scala @@ -3,7 +3,7 @@ package com object Sequence { def filteringFunction[V](filter: V => Boolean): List[V] => List[V] = { - def include(v: V) = + def include(v: V) = filter(v) (l: List[V]) => l.filter(include) } diff --git a/test/files/pos/t1722-A.scala b/test/files/pos/t1722-A.scala index 9e522a5059..d059bf22f8 100644 --- a/test/files/pos/t1722-A.scala +++ b/test/files/pos/t1722-A.scala @@ -1,8 +1,8 @@ sealed trait Top trait C { private object P extends Top -} -/* +} +/* $ scala -e 'new AnyRef with C' error: error while loading Top, class file '/private/tmp/bobobo/./Top.class' is broken (error reading Scala signature of /private/tmp/bobobo/./Top.class: malformed Scala signature of Top at 185; reference value P of trait C refers to nonexisting symbol.) diff --git a/test/files/pos/t1722/Test.scala b/test/files/pos/t1722/Test.scala index 5685d8f40a..f236d3fdc4 100755 --- a/test/files/pos/t1722/Test.scala +++ b/test/files/pos/t1722/Test.scala @@ -1,5 +1,5 @@ package t1722 object Test { - val x = new AnyRef with C + val x = new AnyRef with C } diff --git a/test/files/pos/t1722/Top.scala b/test/files/pos/t1722/Top.scala index cec4c531f9..4ac52412aa 100755 --- a/test/files/pos/t1722/Top.scala +++ b/test/files/pos/t1722/Top.scala @@ -3,8 +3,8 @@ package t1722 sealed trait Top trait C { private object P extends Top -} -/* +} +/* $ scala -e 'new AnyRef with C' error: error while loading Top, class file '/private/tmp/bobobo/./Top.class' is broken (error reading Scala signature of /private/tmp/bobobo/./Top.class: malformed Scala signature of Top at 185; reference value P of trait C refers to nonexisting symbol.) diff --git a/test/files/pos/t1745/J.java b/test/files/pos/t1745/J.java index d95efe8e6f..8444eabb24 100644 --- a/test/files/pos/t1745/J.java +++ b/test/files/pos/t1745/J.java @@ -1,9 +1,9 @@ -class J { +class J { S1 s1; S2 s2; - + String s = bar(S3.foo(), S3.bar("def")); - + private String bar(String s1, String s2) { return s1 + s2; } diff --git a/test/files/pos/t1751/A1_2.scala b/test/files/pos/t1751/A1_2.scala new file mode 100644 index 0000000000..354d5eecd0 --- /dev/null +++ b/test/files/pos/t1751/A1_2.scala @@ -0,0 +1,2 @@ +@SuiteClasses(Array(classOf[A2])) +class A1 diff --git a/test/files/pos/t1751/A2_1.scala b/test/files/pos/t1751/A2_1.scala new file mode 100644 index 0000000000..c768062e43 --- /dev/null +++ b/test/files/pos/t1751/A2_1.scala @@ -0,0 +1,2 @@ +@SuiteClasses(Array()) +class A2 diff --git a/test/files/pos/t1751/SuiteClasses.java b/test/files/pos/t1751/SuiteClasses.java new file mode 100644 index 0000000000..a415e4f572 --- /dev/null +++ b/test/files/pos/t1751/SuiteClasses.java @@ -0,0 +1,3 @@ +public @interface SuiteClasses { + public Class<?>[] value(); +} diff --git a/test/files/pos/t1756.scala b/test/files/pos/t1756.scala index 2e09c8a94a..1d067c3b04 100755 --- a/test/files/pos/t1756.scala +++ b/test/files/pos/t1756.scala @@ -1,5 +1,5 @@ -/** +/** This is a tricky issue which has to do with the fact that too much conflicting type information is propagated into a single implicit search, where the intended solution applies two implicit searches. @@ -35,20 +35,20 @@ class Poly[C <: Ring[C]](val c: C) extends Ring[Poly[C]] { } object Test extends App { - + implicit def coef2poly[C <: Ring[C]](c: C): Poly[C] = new Poly(c) val a = new A val x = new Poly(new A) - + println(x+a) // works println(a+x) // works - + val y = new Poly(new Poly(new A)) - + println(x+y*x) // works println(x*y+x) // works println(y*x+x) // works - + println(x+x*y) // failed before } diff --git a/test/files/pos/t1761.scala b/test/files/pos/t1761.scala deleted file mode 100644 index 2af7280734..0000000000 --- a/test/files/pos/t1761.scala +++ /dev/null @@ -1,10 +0,0 @@ -import scala.xml._ - -class Foo { - val elements: Seq[Node] = Nil - val innerTransform: PartialFunction[Elem, String] = { - case Elem(_, l: String, _, _, _ @ _*) if elements.exists(_.label == l) => - l - } -} - diff --git a/test/files/pos/t1782/Ann.java b/test/files/pos/t1782/Ann.java new file mode 100644 index 0000000000..0dcfbd2ed7 --- /dev/null +++ b/test/files/pos/t1782/Ann.java @@ -0,0 +1,3 @@ +public @interface Ann { + public Days value(); +} diff --git a/test/files/pos/t1782/Days.java b/test/files/pos/t1782/Days.java new file mode 100644 index 0000000000..203a87b1c2 --- /dev/null +++ b/test/files/pos/t1782/Days.java @@ -0,0 +1,3 @@ +public enum Days { + Friday, Sunday +} diff --git a/test/files/pos/t1782/ImplementedBy.java b/test/files/pos/t1782/ImplementedBy.java new file mode 100644 index 0000000000..6aa8b4fa9e --- /dev/null +++ b/test/files/pos/t1782/ImplementedBy.java @@ -0,0 +1,3 @@ +public @interface ImplementedBy { + public Class<?> value(); +} diff --git a/test/files/pos/t1782/Test_1.scala b/test/files/pos/t1782/Test_1.scala new file mode 100644 index 0000000000..6467a74c29 --- /dev/null +++ b/test/files/pos/t1782/Test_1.scala @@ -0,0 +1,16 @@ +@ImplementedBy(classOf[Provider]) +trait Service { + def someMethod() +} + +class Provider + extends Service +{ + // test enumeration java annotations + @Ann(Days.Friday) def someMethod() = () + + // #2103 + @scala.beans.BeanProperty + @Ann(value = Days.Sunday) + val t2103 = "test" +} diff --git a/test/files/pos/t1786-counter.scala b/test/files/pos/t1786-counter.scala new file mode 100644 index 0000000000..c1ad2c204f --- /dev/null +++ b/test/files/pos/t1786-counter.scala @@ -0,0 +1,38 @@ +trait ShapeLevel + +object Fail { + abstract class ProductNodeShape[Level <: ShapeLevel, C, M <: C, U <: C, P <: C] extends Shape[Level, M, U, P] { + def copy(shapes: Seq[Shape[_, _, _, _]]): Shape[Level, _, _, _] + } + + abstract class Shape[Level <: ShapeLevel, -Mixed_, Unpacked_, Packed_] + + final class TupleShape[Level <: ShapeLevel, M <: Product, U <: Product, P <: Product](val shapes: Shape[_, _, _, _]*) extends ProductNodeShape[Level, Product, M, U, P] { + def copy(shapes: Seq[Shape[_, _, _, _]]): Shape[Level, _, _, _] = ??? + } + + trait ShapeLevel +} + +object Ok { + abstract class Shape[Level <: ShapeLevel, -Mixed_, Unpacked_, Packed_] + + abstract class ProductNodeShape[Level <: ShapeLevel, C, M <: C, U <: C, P <: C] extends Shape[Level, M, U, P] { + def copy(shapes: Seq[Shape[_, _, _, _]]): Shape[Level, _, _, _] + } + + final class TupleShape[Level <: ShapeLevel, M <: Product, U <: Product, P <: Product](val shapes: Shape[_, _, _, _]*) extends ProductNodeShape[Level, Product, M, U, P] { + def copy(shapes: Seq[Shape[_, _, _, _]]): Shape[Level, _, _, _] = ??? + } +} + +// This is why we reverted the fix for SI-1786 -- see SI-6169 for a potential alternative that could be extended to cover this. +// both objects type check on 2.10.3, but only Ok was accepted by 2.11 after the original fix to SI-1786. +// Fail results in: +/* +t1786-counter.scala:10: error: class TupleShape needs to be abstract, since method copy in class ProductNodeShape of type (shapes: Seq[Fail.Shape[_, _, _, _]])Fail.Shape[Level, _, _, _] is not defined +(Note that Seq[Fail.Shape[_, _, _, _]] does not match Seq[Fail.Shape[_ <: Fail.ShapeLevel, _, _, _]]: their type parameters differ) + final class TupleShape[Level <: ShapeLevel, M <: Product, U <: Product, P <: Product](val shapes: Shape[_, _, _, _]*) extends ProductNodeShape[Level, Product, M, U, P] { + ^ +one error found +*/
\ No newline at end of file diff --git a/test/files/pos/t1786-cycle.scala b/test/files/pos/t1786-cycle.scala new file mode 100644 index 0000000000..af5d892c6a --- /dev/null +++ b/test/files/pos/t1786-cycle.scala @@ -0,0 +1,57 @@ +trait GenTraversableLike[+A, +Repr] extends Any + +object O { + (null: Any) match { + case _: LongTraversableLike[_] => + } +} + +trait LongTraversable extends LongTraversableLike[LongTraversable] + +trait LongTraversableLike[+Repr <: LongTraversableLike[Repr]] extends GenTraversableLike[Any, Repr] + +/* +% scalac-hash v2.11.0-M8 test/files/pos/t1786-cycle.scala +[warn] v2.11.0-M8 failed, using closest available +test/files/pos/t1786-cycle.scala:11: error: illegal cyclic reference involving trait LongTraversableLike +trait LongTraversableLike[+Repr <: LongTraversableLike[Repr]] extends GenTraversableLike[Any, Repr] + ^ +one error found + +Okay again after SI-1786 was reverted. + + +|-- object O BYVALmode-EXPRmode (site: package <empty>) +| |-- super EXPRmode-POLYmode-QUALmode (silent: <init> in O) +| | |-- this EXPRmode (silent: <init> in O) +| | | \-> O.type +| | \-> O.type +| |-- (null: Any) match { case (_: LongTraversableLike[(_ @ <em... BYVALmode-EXPRmode (site: value <local O> in O) +| | |-- (null: Any) BYVALmode-EXPRmode (site: value <local O> in O) +| | | |-- Any TYPEmode (site: value <local O> in O) +| | | | \-> Any +| | | |-- null : pt=Any EXPRmode (site: value <local O> in O) +| | | | \-> Null(null) +| | | \-> Any +| | |-- (_: LongTraversableLike[(_ @ <empty>)]) : pt=Any PATTERNmode (site: value <local O> in O) enrichment only +| | | |-- LongTraversableLike[(_ @ <empty>)] TYPEPATmode-TYPEmode (site: value <local O> in O) enrichment only +| | | | |-- <: LongTraversableLike[Repr] TYPEmode (site: type Repr in <empty>) +| | | | | |-- LongTraversableLike[Repr] TYPEmode (site: type Repr in <empty>) +| | | | | | |-- Repr NOmode (site: type Repr in <empty>) +| | | | | | | \-> Repr +| | | | | | \-> LongTraversableLike[Repr] +| | | | | [adapt] <: LongTraversableLike[Repr] is now a TypeTree( <: LongTraversableLike[Repr]) +| | | | | \-> <: LongTraversableLike[Repr] +| | | | |-- (_ @ <empty>) TYPEPATmode-TYPEmode (site: value <local O> in O) enrichment only +| | | | | \-> _ +| | | | |-- GenTraversableLike FUNmode-TYPEmode (site: trait LongTraversableLike) +| | | | | \-> GenTraversableLike +| | | | |-- GenTraversableLike[Any, Repr] TYPEmode (site: trait LongTraversableLike) +| | | | | |-- Any TYPEmode (site: trait LongTraversableLike) +| | | | | | \-> Any +| | | | | |-- Repr TYPEmode (site: trait LongTraversableLike) +| | | | | | \-> Repr +| | | | | caught scala.reflect.internal.Symbols$CyclicReference: illegal cyclic reference involving trait LongTraversableLike: while typing GenTraversableLike[Any, Repr] +test/files/pos/t1786-cycle.scala:11: error: illegal cyclic reference involving trait LongTraversableLike +trait LongTraversableLike[+Repr <: LongTraversableLike[Repr]] extends GenT +*/
\ No newline at end of file diff --git a/test/files/pos/t1798.scala b/test/files/pos/t1798.scala index 93df61e844..1624e3025e 100644 --- a/test/files/pos/t1798.scala +++ b/test/files/pos/t1798.scala @@ -2,7 +2,7 @@ object Foo { private def bar(): Int = 55 } class Foo(x: Int) { def this() = this(Foo.bar()) } /* - * scalac28 a.scala + * scalac28 a.scala a.scala:2: error: method bar cannot be accessed in object Foo class Foo(x: Int) { def this() = this(Foo.bar()) } ^ diff --git a/test/files/pos/t1832.scala b/test/files/pos/t1832.scala index c7b1ffb838..f3bb556e32 100644 --- a/test/files/pos/t1832.scala +++ b/test/files/pos/t1832.scala @@ -1,7 +1,7 @@ trait Cloning { trait Foo def fn(g: Any => Unit): Foo - + implicit def mkStar(i: Int) = new { def *(a: Foo): Foo = null } val pool = 4 * fn { case ghostSYMBOL: Int => ghostSYMBOL * 2 } diff --git a/test/files/pos/t1840/J.java b/test/files/pos/t1840/J.java index a697596fdd..fd98b6c4a5 100644 --- a/test/files/pos/t1840/J.java +++ b/test/files/pos/t1840/J.java @@ -1,4 +1,4 @@ package p; -class J { - J() {} +class J { + J() {} } diff --git a/test/files/pos/t1909.scala b/test/files/pos/t1909.scala deleted file mode 100644 index 01213f62a3..0000000000 --- a/test/files/pos/t1909.scala +++ /dev/null @@ -1,8 +0,0 @@ -// Until #1909 is fixed, if this compiles the bytecode -// will trigger a VerifyError. This liftings and the one -// in 1909b.scala actually happen in two different places -// (uncurry and lambdalifter.) -class Ticket1909 { - def this(value: Int) = this() - def this(p: String) = this(try 0) -} diff --git a/test/files/pos/t1909b-pos.scala b/test/files/pos/t1909b-pos.scala deleted file mode 100644 index b914bee366..0000000000 --- a/test/files/pos/t1909b-pos.scala +++ /dev/null @@ -1,6 +0,0 @@ -class Ticket1909 (x: Int) { - def this() = this({ - def bar() = 5 - bar - }) -}
\ No newline at end of file diff --git a/test/files/pos/t1942.cmds b/test/files/pos/t1942.cmds deleted file mode 100644 index c14311042a..0000000000 --- a/test/files/pos/t1942.cmds +++ /dev/null @@ -1,2 +0,0 @@ -scalac A_1.scala -scalac Test_2.scala diff --git a/test/files/pos/t1957.scala b/test/files/pos/t1957.scala index f80cf730ed..711ce17deb 100644 --- a/test/files/pos/t1957.scala +++ b/test/files/pos/t1957.scala @@ -23,7 +23,7 @@ object Test { final type commonModuleType = Module {type settingsType = self.settingsType} type selfType >: self.type <: commonModuleType - // BTW: if we use the commented out type declarations, the code compiles successfully + // BTW: if we use the commented out type decls, the code compiles successfully // type gristType = Grist {type settingsType <: self.settingsType; type moduleType <: commonModuleType } val tools: List[Tool {type settingsType = self.settingsType}] diff --git a/test/files/pos/t1974.scala b/test/files/pos/t1974.scala index 3d28478177..a0daa13c21 100644 --- a/test/files/pos/t1974.scala +++ b/test/files/pos/t1974.scala @@ -1,20 +1,20 @@ object Broken { private var map = Map[Class[_], String]() - + def addToMap(c : Class[_], s : String) = map += (c -> s) def fetch(c : Class[_]) = map(c) } object Works { private var map = Map[Class[_], String]() - + def addToMap(c : Class[_], s : String) = map += ((c, s)) def fetch(c : Class[_]) = map(c) } object Works2 { private var map = Map[Class[_], String]() - + def addToMap(c : Class[_], s : String) = map += ((c : Class[_]) -> s) def fetch(c : Class[_]) = map(c) }
\ No newline at end of file diff --git a/test/files/pos/t2023.scala b/test/files/pos/t2023.scala index de3e848fbd..21c6fc96a6 100644 --- a/test/files/pos/t2023.scala +++ b/test/files/pos/t2023.scala @@ -3,11 +3,11 @@ trait C[A] object C { implicit def ipl[A](implicit from: A => Ordered[A]): C[A] = null } - + object P { def foo[A](i: A, j: A)(implicit c: C[A]): Unit = () } - + class ImplicitChainTest { def testTrivial: Unit = { P.foo('0', '9') diff --git a/test/files/pos/t2060.scala b/test/files/pos/t2060.scala index cf7250f545..2c701150e4 100755 --- a/test/files/pos/t2060.scala +++ b/test/files/pos/t2060.scala @@ -4,7 +4,7 @@ * line': * * val failure = 1.0 + new Op[Int] - * + * * we reduce the problem to finding a function from Double to * {+: _ >: Op[Int] <: Any}, that is, a method which takes * an argument which is an Op[Int] or a supertype thereof. diff --git a/test/files/pos/t2066-2.10-compat.flags b/test/files/pos/t2066-2.10-compat.flags new file mode 100644 index 0000000000..94c8056747 --- /dev/null +++ b/test/files/pos/t2066-2.10-compat.flags @@ -0,0 +1 @@ +-Xsource:2.10 diff --git a/test/files/pos/t2066-2.10-compat.scala b/test/files/pos/t2066-2.10-compat.scala new file mode 100644 index 0000000000..fb8103e4ad --- /dev/null +++ b/test/files/pos/t2066-2.10-compat.scala @@ -0,0 +1,71 @@ +import language._ +trait A1 { + def f[T[_]] = () +} + +trait B1 extends A1 { + override def f[T[+_]] = () +} + +trait C1 extends A1 { + override def f[T[-_]] = () +} + + +trait A2 { + def f[T[+_]] = () +} + +trait B2 extends A2 { + override def f[T[_]] = () // okay +} + +trait C2 extends A2 { + override def f[T[-_]] = () +} + + +trait A3 { + def f[T[-_]] = () +} + +trait B3 extends A3 { + override def f[T[_]] = () // okay +} + +trait C3 extends A3 { + override def f[T[-_]] = () +} + + +trait A4 { + def f[T[X[+_]]] = () +} + +trait B4 extends A4 { + override def f[T[X[_]]] = () +} + +trait A5 { + def f[T[X[-_]]] = () +} + +trait B5 extends A5 { + override def f[T[X[_]]] = () +} + + + +trait A6 { + def f[T[X[_]]] = () +} + +trait B6 extends A6 { + override def f[T[X[+_]]] = () // okay +} +trait C6 extends A6 { + override def f[T[X[_]]] = () // okay +} +trait D6 extends A6 { + override def f[T[X[-_]]] = () +} diff --git a/test/files/pos/t2066.scala b/test/files/pos/t2066.scala new file mode 100644 index 0000000000..30cb99d45c --- /dev/null +++ b/test/files/pos/t2066.scala @@ -0,0 +1,25 @@ +trait A1 { + def f[T[+_]] = () +} + +trait B1 extends A1 { + override def f[T[_]] = () +} + + +trait A2 { + def f[T[-_]] = () +} + +trait B2 extends A2 { + override def f[T[_]] = () +} + + +trait A3 { + def f[T[X[_]]] = () +} + +trait B3 extends A3 { + override def f[T[X[+_]]] = () +} diff --git a/test/files/pos/t2081.scala b/test/files/pos/t2081.scala index d772c02dc2..395134f71c 100644 --- a/test/files/pos/t2081.scala +++ b/test/files/pos/t2081.scala @@ -7,5 +7,5 @@ object ScalaForRubyists { val x = 10.days // a couple parser corner cases I wanted not to break - val y = 5.e0 + 5e7 + val y = 5.0e0 + 5e7 } diff --git a/test/files/pos/t2082.scala b/test/files/pos/t2082.scala index 38937d78fb..3a160612fe 100755 --- a/test/files/pos/t2082.scala +++ b/test/files/pos/t2082.scala @@ -1,10 +1,10 @@ trait Mapper[T <: Mapper[T]] -trait KeyedMapper[KeyType, T <: KeyedMapper[KeyType, T]] extends Mapper[T] +trait KeyedMapper[KeyType, T <: KeyedMapper[KeyType, T]] extends Mapper[T] -trait KeyedMetaMapper[KeyType, T <: KeyedMapper[KeyType, T]] +trait KeyedMetaMapper[KeyType, T <: KeyedMapper[KeyType, T]] trait MappedForeignKey[KeyType, Owner <: Mapper[Owner], Other <: KeyedMapper[KeyType, Other]] @@ -19,19 +19,19 @@ class TestRun extends KeyedMapper[Long, TestRun] with IdPK { object TestRun extends TestRun with KeyedMetaMapper[Long, TestRun] class MetaTestSubject extends TestSubject with KeyedMetaMapper[Long, TestSubject] -object TestSubject extends MetaTestSubject +object TestSubject extends MetaTestSubject object Main { - + def oneToOneJoin[PType <: KeyedMapper[Long, PType] with IdPK, CType <: KeyedMapper[Long, CType] with IdPK, - CMetaType <: CType with KeyedMetaMapper[Long, CType], + CMetaType <: CType with KeyedMetaMapper[Long, CType], FKType <: MappedForeignKey[Long, PType, CType]] - (parents: List[PType], metaMapper: CMetaType, keyGetter: (PType) => FKType ): + (parents: List[PType], metaMapper: CMetaType, keyGetter: (PType) => FKType ): Map[Long, CType] = Map.empty - + def callIt { - oneToOneJoin[TestRun, TestSubject, MetaTestSubject, + oneToOneJoin[TestRun, TestSubject, MetaTestSubject, MappedForeignKey[Long, TestRun, TestSubject]]( List(), TestSubject, (tr: TestRun) => tr.testSubject) } diff --git a/test/files/pos/t2130-2.scala b/test/files/pos/t2130-2.scala index 464f5e0d8e..1d0b33c3e5 100644 --- a/test/files/pos/t2130-2.scala +++ b/test/files/pos/t2130-2.scala @@ -10,7 +10,7 @@ package object bar { class Dingus object Dingus case class Dongus(x: Float) - + def apply(xs: Int*) = new Bippy(xs.sum) def apply() = new Bippy(5) } diff --git a/test/files/pos/t2133.scala b/test/files/pos/t2133.scala index 99bac5c38b..c74d0a4bbf 100644 --- a/test/files/pos/t2133.scala +++ b/test/files/pos/t2133.scala @@ -13,6 +13,6 @@ trait Foo2 { class Bob extends AnyRef with Foo with Foo2 { import bip._ import bar._ - + def go() = fn() } diff --git a/test/files/pos/t2168.scala b/test/files/pos/t2168.scala index 845c5b7361..21afb239a0 100644 --- a/test/files/pos/t2168.scala +++ b/test/files/pos/t2168.scala @@ -2,5 +2,3 @@ object Test extends App { def foo1(x: AnyRef) = x match { case x: Function0[_] => x() } def foo2(x: AnyRef) = x match { case x: Function0[Any] => x() } } - - diff --git a/test/files/pos/t2171.scala b/test/files/pos/t2171.scala index a5663c96cd..6c754c76a6 100644 --- a/test/files/pos/t2171.scala +++ b/test/files/pos/t2171.scala @@ -3,5 +3,5 @@ final object test { try 0 catch { case ex => println(msg) } def main (args: Array[String]): Unit = - while (true) logIgnoredException ("...") + while (true) logIgnoredException ("...") } diff --git a/test/files/pos/t2261.scala b/test/files/pos/t2261.scala index af24234235..aac5c9e0fd 100644 --- a/test/files/pos/t2261.scala +++ b/test/files/pos/t2261.scala @@ -5,5 +5,5 @@ object Test { x = List(1,2,3) // the problem here was that somehow the type variable that was used to infer the type argument for List.apply // would accumulate several conflicting constraints - // can't reproduce with + // can't reproduce with }
\ No newline at end of file diff --git a/test/files/pos/t2281.scala b/test/files/pos/t2281.scala deleted file mode 100644 index 3515d2e2e6..0000000000 --- a/test/files/pos/t2281.scala +++ /dev/null @@ -1,41 +0,0 @@ -import scala.collection.mutable.ArrayBuffer - -class A { - def f(x: Boolean) = if (x) <br/><br/> else <br/> -} - -class B { - def splitSentences(text : String) : ArrayBuffer[String] = { - val outarr = new ArrayBuffer[String] - var outstr = new StringBuffer - var prevspace = false - val ctext = text.replaceAll("\n+","\n") - ctext foreach {c => - outstr append c - if(c == '.' || c == '!' || c == '?' || c == '\n' || c == ':' || c == ';' || (prevspace && c == '-') ){ - outarr += outstr.toString - outstr = new StringBuffer - } - if(c == '\n'){ - outarr += "\n\n" - } - prevspace = c == ' ' - } - if(outstr.length > 0){ - outarr += outstr.toString - } - outarr - } - - def spanForSentence(x : String,picktext : String) = - if(x == "\n\n"){ - <br/><br/> - }else{ - <span class='clicksentence' style={if(x == picktext) "background-color: yellow" else ""}>{x}</span> - } - - def selectableSentences(text : String, picktext : String) = { - val sentences = splitSentences(text) - sentences.map(x => spanForSentence(x,picktext)) - } -}
\ No newline at end of file diff --git a/test/files/pos/t2305.scala b/test/files/pos/t2305.scala index d0b103fdba..6b66c5db13 100644 --- a/test/files/pos/t2305.scala +++ b/test/files/pos/t2305.scala @@ -1,6 +1,6 @@ import java.util.ArrayList -trait Bind[Z[_]] +trait Bind[Z[_]] class MySerializable[X] extends java.io.Serializable @@ -17,7 +17,7 @@ object works { object breaks { def runbind(implicit bind: Bind[ArrayList]) {} - runbind + runbind /*java.lang.AssertionError: assertion failed: java.io.Serializable at scala.Predef$.assert(Predef.scala:107) at scala.tools.nsc.symtab.Types$TypeRef.transform(Types.scala:1417) diff --git a/test/files/pos/t2310.scala b/test/files/pos/t2310.scala index e08411a3df..68912b4961 100644 --- a/test/files/pos/t2310.scala +++ b/test/files/pos/t2310.scala @@ -1,15 +1,15 @@ import scala.Stream._ object consistencyError { - /* this gives an error: + /* this gives an error: Consistency problem compiling (virtual file)! Trying to call method body%1(List(scala.collection.immutable.Stream[A])) with arguments (List(tp2, temp6, temp5)) case (l #:: ls, rs) => None ^ scala.tools.nsc.symtab.Types$TypeError: too many arguments for method body%1: (val rs: scala.collection.immutable.Stream[A])None.type - + two errors found - vss(0) = + vss(0) = args = List(tp2, temp6, temp5) vss(1) = value rs, value ls, value l args = List(tp2, temp6, temp5) @@ -18,19 +18,19 @@ object consistencyError { labels(1) = method body%1 labels(0) = method body%0 bx = 1 - label.tpe = (val rs: scala.collection.immutable.Stream[A])None.type + label.tpe = (val rs: scala.collection.immutable.Stream[A])None.type */ def crash[A](lefts: Stream[A], rights: Stream[A]) = (lefts, rights) match { case (Stream.Empty, Stream.Empty) => None case (l #:: ls, rs) => None } - + // These work // def works1[A](lefts: Stream[A]) = lefts match { // case Stream.Empty => None // case l #:: ls => None // } - // + // // def works2[A](lefts: Stream[A], rights: Stream[A]) = (lefts, rights) match { // case (Stream.Empty, Stream.Empty) => None // case (ls, rs) => None diff --git a/test/files/pos/t2331.scala b/test/files/pos/t2331.scala index 9a15b5c2a9..a7f80ac98e 100644 --- a/test/files/pos/t2331.scala +++ b/test/files/pos/t2331.scala @@ -4,8 +4,8 @@ trait C { object Test { val o /*: C --> no crash*/ = new C { - def m[T]: Nothing /*: T --> no crash*/ = error("omitted") + def m[T]: Nothing /*: T --> no crash*/ = sys.error("omitted") } o.m[Nothing] -}
\ No newline at end of file +} diff --git a/test/files/pos/t2399.scala b/test/files/pos/t2399.scala index b009f7856b..07882dd549 100644 --- a/test/files/pos/t2399.scala +++ b/test/files/pos/t2399.scala @@ -3,12 +3,12 @@ trait That2[A, R <: That2[A, R]] trait T[A, This >: Null <: That1[A] with T[A, This]] extends That2[A, This] { self: This => - + private var next: This = _ def isEmpty = next eq null - + def length: Int = { def loop(x: This, cnt: Int): Int = if (x.isEmpty) cnt else loop(x.next, cnt + 1) loop(self, 0) - } + } }
\ No newline at end of file diff --git a/test/files/pos/t2413/TestScalac.scala b/test/files/pos/t2413/TestScalac.scala index 6992a30f2c..098e852dd7 100644 --- a/test/files/pos/t2413/TestScalac.scala +++ b/test/files/pos/t2413/TestScalac.scala @@ -4,7 +4,7 @@ class Foo extends TestJava { // THIS METHOD YIELDS TO CRASH /* def foomethod : Option[String] => Unit = { - case None => + case None => val path = repeatParam("s","a","b","c") () case Some(error) => diff --git a/test/files/pos/t2421.scala b/test/files/pos/t2421.scala index 26e485c160..2544a1cb36 100644 --- a/test/files/pos/t2421.scala +++ b/test/files/pos/t2421.scala @@ -1,14 +1,14 @@ object Test { abstract class <~<[-From, +To] extends (From => To) - implicit def trivial[A]: A <~< A = error("") + implicit def trivial[A]: A <~< A = sys.error("") trait Forcible[T] - implicit val forcibleInt: (Int <~< Forcible[Int]) = error("") + implicit val forcibleInt: (Int <~< Forcible[Int]) = sys.error("") - def headProxy[P <: Forcible[Int]](implicit w: Int <~< P): P = error("") - - headProxy - // trivial[Int] should not be considered a valid implicit, since w would have type Int <~< Int, + def headProxy[P <: Forcible[Int]](implicit w: Int <~< P): P = sys.error("") + + headProxy + // trivial[Int] should not be considered a valid implicit, since w would have type Int <~< Int, // and headProxy's type parameter P cannot be instantiated to Int -}
\ No newline at end of file +} diff --git a/test/files/pos/t2421_delitedsl.scala b/test/files/pos/t2421_delitedsl.scala index ad6afa7bd8..a05887023a 100644 --- a/test/files/pos/t2421_delitedsl.scala +++ b/test/files/pos/t2421_delitedsl.scala @@ -1,10 +1,10 @@ trait DeliteDSL { abstract class <~<[-From, +To] extends (From => To) - implicit def trivial[A]: A <~< A = new (A <~< A) {def apply(x: A) = x} + implicit def trivial[A]: A <~< A = new (A <~< A) {def apply(x: A) = x} trait Forcible[T] object Forcible { - def factory[T](f: T => Forcible[T]) = new (T <~< Forcible[T]){def apply(x: T) = f(x)} + def factory[T](f: T => Forcible[T]) = new (T <~< Forcible[T]){def apply(x: T) = f(x)} } case class DeliteInt(x: Int) extends Forcible[Int] @@ -22,16 +22,16 @@ trait DeliteDSL { // If T is already a proxy (it is forcible), the compiler should use // forcibleIdentity to deduce that P=T. If T is Int, the compiler // should use intToForcible to deduce that P=DeliteInt. - // + // // Without this feature, the user must write 'xs.proxyOfFirst[DeliteInt]', // with the feature they can write 'xs.proxyOfFirst', which is shorter and // avoids exposing internal DELITE types to the world. object Test { - val x = new DeliteCollection(List(1,2,3)).headProxy + val x = new DeliteCollection(List(1,2,3)).headProxy // inferred: val x: Forcible[Int] = new DeliteCollection[Int](List.apply[Int](1, 2, 3)).headProxy[Forcible[Int]](forcibleInt); - val xAlready = new DeliteCollection(List(DeliteInt(1),DeliteInt(2),DeliteInt(3))).headProxy + val xAlready = new DeliteCollection(List(DeliteInt(1),DeliteInt(2),DeliteInt(3))).headProxy // inferred: val xAlready: DeliteInt = new DeliteCollection[DeliteInt](List.apply[DeliteInt](DeliteInt(1), DeliteInt(2), DeliteInt(3))).headProxy[DeliteInt](trivial[DeliteInt]); } }
\ No newline at end of file diff --git a/test/files/pos/t2421b_pos.scala b/test/files/pos/t2421b_pos.scala index 8b848abb75..0df3461662 100644 --- a/test/files/pos/t2421b_pos.scala +++ b/test/files/pos/t2421b_pos.scala @@ -11,7 +11,7 @@ object Test { f } -/* bug: +/* bug: error: ambiguous implicit values: both method b in object Test1 of type [X <: Test1.B]Test1.F[X] and method a in object Test1 of type => Test1.F[Test1.A] diff --git a/test/files/pos/t2429.scala b/test/files/pos/t2429.scala index 3ea3f9e2a5..550681b6a2 100755 --- a/test/files/pos/t2429.scala +++ b/test/files/pos/t2429.scala @@ -1,10 +1,10 @@ object Msg { trait T - + trait TSeq - + object TSeq { - implicit def fromSeq(s: Seq[T]): TSeq = error("stub") + implicit def fromSeq(s: Seq[T]): TSeq = sys.error("stub") } def render { @@ -12,7 +12,7 @@ object Msg { case (a, b) => { a match { case _ => b match { - case _ => error("stub") + case _ => sys.error("stub") } } } @@ -20,6 +20,6 @@ object Msg { } } object Oops { - implicit def someImplicit(s: Seq[_]): String = error("stub") + implicit def someImplicit(s: Seq[_]): String = sys.error("stub") def item: String = Nil map { case e: Any => e } } diff --git a/test/files/pos/t2435.scala b/test/files/pos/t2435.scala index 2db931b99f..697e9e1f2d 100644 --- a/test/files/pos/t2435.scala +++ b/test/files/pos/t2435.scala @@ -9,7 +9,7 @@ object Bug { case class FConstant[E <: FChain](constant:String, tail:E) extends FChain { type T = tail.T } - + object FNil extends FChain { type T = Unit } diff --git a/test/files/pos/t2444.scala b/test/files/pos/t2444.scala index a052270196..fac1e95d0f 100644 --- a/test/files/pos/t2444.scala +++ b/test/files/pos/t2444.scala @@ -2,14 +2,14 @@ object Test { trait Foo - class Bar { + class Bar { object baz extends Foo } - def frob[P1, P2<:Foo](f:P1 => P2) = () + def frob[P1, P2<:Foo](f:P1 => P2) = () def main(args:Array[String]) : Unit = { - frob((p:Bar) => p.baz) + frob((p:Bar) => p.baz) } } diff --git a/test/files/pos/t2464.cmds b/test/files/pos/t2464.cmds deleted file mode 100644 index ca733ef23d..0000000000 --- a/test/files/pos/t2464.cmds +++ /dev/null @@ -1,3 +0,0 @@ -javac JavaOne.java -scalac ScalaOne_1.scala -scalac t2464_2.scala diff --git a/test/files/pos/t2464/ScalaOne_1.scala b/test/files/pos/t2464/ScalaOne_1.scala index 0271b9ce72..1caf8ecae4 100644 --- a/test/files/pos/t2464/ScalaOne_1.scala +++ b/test/files/pos/t2464/ScalaOne_1.scala @@ -1,6 +1,6 @@ class ScalaClassOne extends ClassTwo.Child { def func4() = { func2 - } + } } diff --git a/test/files/pos/t247.scala b/test/files/pos/t247.scala index 983b7998a9..fdcafeb2c6 100644 --- a/test/files/pos/t247.scala +++ b/test/files/pos/t247.scala @@ -12,15 +12,15 @@ class TreeMapFactory[KEY](newOrder:Order[KEY]) extends MapFactory[KEY] { def Empty[V] = new TreeMap[KEY,V](new TreeMapFactory[KEY](order)); } -class Tree[KEY,Entry](order:Order[KEY]) { +class Tree[KEY,Entry](order:Order[KEY]) { def size =0; } -class TreeMap[KEY,VALUE](_factory:TreeMapFactory[KEY]) extends Tree[KEY,Pair[KEY,VALUE]](_factory.order) with scala.collection.DefaultMap[KEY, VALUE] with Map[KEY, VALUE] { +class TreeMap[KEY,VALUE](_factory:TreeMapFactory[KEY]) extends Tree[KEY,Tuple2[KEY,VALUE]](_factory.order) with scala.collection.DefaultMap[KEY, VALUE] with Map[KEY, VALUE] { val factory = _factory val order = _factory.order; def this(newOrder:Order[KEY]) = this(new TreeMapFactory[KEY](newOrder)); def get(key:KEY) = null; - def iterator:Iterator[Pair[KEY,VALUE]] = null; + def iterator:Iterator[Tuple2[KEY,VALUE]] = null; override def size = super[Tree].size } diff --git a/test/files/pos/t2484.scala b/test/files/pos/t2484.scala index 7d1b7cb03c..88da6aaac8 100755 --- a/test/files/pos/t2484.scala +++ b/test/files/pos/t2484.scala @@ -1,7 +1,9 @@ +import concurrent.ExecutionContext.Implicits.global + class Admin extends javax.swing.JApplet { val jScrollPane = new javax.swing.JScrollPane (null, 0, 0) def t2484: Unit = { - scala.concurrent.ops.spawn {jScrollPane.synchronized { + scala.concurrent.Future {jScrollPane.synchronized { def someFunction () = {} //scala.concurrent.ops.spawn {someFunction ()} jScrollPane.addComponentListener (new java.awt.event.ComponentAdapter {override def componentShown (e: java.awt.event.ComponentEvent) = { diff --git a/test/files/pos/t2504.scala b/test/files/pos/t2504.scala index 0abe7dd13e..67f8226852 100755 --- a/test/files/pos/t2504.scala +++ b/test/files/pos/t2504.scala @@ -1,5 +1,5 @@ object Test { val ys: Iterable[_] = Array("abc") - val xs = Array("abc") + val xs = Array("abc") xs sameElements Array("abc") } diff --git a/test/files/pos/t2545.scala b/test/files/pos/t2545.scala index b4238fb718..6ad994223c 100755 --- a/test/files/pos/t2545.scala +++ b/test/files/pos/t2545.scala @@ -1,6 +1,6 @@ trait Frog[T] { - def hello: T - def size: Int + def hello: T + def size: Int } trait OnlyWithFrogs { diff --git a/test/files/pos/t2569/Child.scala b/test/files/pos/t2569/Child.scala index 3d7f4248b5..64f4dc172f 100644 --- a/test/files/pos/t2569/Child.scala +++ b/test/files/pos/t2569/Child.scala @@ -1,9 +1,9 @@ package varargs - + class Child extends Parent { - + override def concatenate(strings: String*): String = strings map("\"" + _ + "\"") mkString("(", ", ", ")") - + } diff --git a/test/files/pos/t2569/Parent.java b/test/files/pos/t2569/Parent.java index 133f2ee567..89421becbd 100644 --- a/test/files/pos/t2569/Parent.java +++ b/test/files/pos/t2569/Parent.java @@ -1,7 +1,7 @@ package varargs; - + public class Parent { - + public String concatenate(String... strings) { StringBuilder builder = new StringBuilder(); for (String s : strings) { @@ -9,5 +9,5 @@ package varargs; } return builder.toString(); } - + } diff --git a/test/files/pos/t261-ab.scala b/test/files/pos/t261-ab.scala deleted file mode 100644 index df641e811a..0000000000 --- a/test/files/pos/t261-ab.scala +++ /dev/null @@ -1,9 +0,0 @@ -trait A { val foo: String = "A" } -trait B { - private val foo: String = "B" - def f = println(foo) -} -object Test extends App with B with A { - println(foo) // prints "A", as expected - f // prints "B", as expected -} diff --git a/test/files/pos/t261-ba.scala b/test/files/pos/t261-ba.scala deleted file mode 100644 index 6c9c5b10b7..0000000000 --- a/test/files/pos/t261-ba.scala +++ /dev/null @@ -1,9 +0,0 @@ -trait B { - private val foo: String = "B" - def f = println(foo) -} -trait A { val foo: String = "A" } -object Test extends App with B with A { - println(foo) // prints "A", as expected - f // prints "B", as expected -} diff --git a/test/files/pos/t2613.scala b/test/files/pos/t2613.scala new file mode 100644 index 0000000000..3a64dbc282 --- /dev/null +++ b/test/files/pos/t2613.scala @@ -0,0 +1,11 @@ +import language.existentials + +object Test { + class Row + + abstract class MyRelation [R <: Row, +Relation <: MyRelation[R, Relation]] + + type M = MyRelation[R, Relation] forSome {type R <: Row; type Relation <: MyRelation[R, Relation]} + + var (x,y): (String, M) = null +} diff --git a/test/files/pos/t262.scala b/test/files/pos/t262.scala index b81490977c..ec6187b36b 100644 --- a/test/files/pos/t262.scala +++ b/test/files/pos/t262.scala @@ -1,11 +1,11 @@ object O { abstract class A { - def f:A; + def f:A; } class B extends A { def f = if(1 == 2) new C else new D; } - class C extends A { + class C extends A { def f = this; } class D extends A { diff --git a/test/files/pos/t2665.scala b/test/files/pos/t2665.scala index 108daf509a..3163e31326 100644 --- a/test/files/pos/t2665.scala +++ b/test/files/pos/t2665.scala @@ -1,3 +1,3 @@ object Test { - val x: Unit = Array("") + val x: Unit = Array("") }
\ No newline at end of file diff --git a/test/files/pos/t2669.scala b/test/files/pos/t2669.scala index e34f08f0f5..72e931178c 100644 --- a/test/files/pos/t2669.scala +++ b/test/files/pos/t2669.scala @@ -23,6 +23,6 @@ import java.util.Vector // scalac cannot detect lack of type params, but then throws AssertionError later: class TVector2639 { - val b = new Vector // this line passed without error detected + val b = new Vector // this line passed without error detected val a = new Vector(1) // this line caused throwing AssertionError when scalac } diff --git a/test/files/pos/t2691.scala b/test/files/pos/t2691.scala index 94012a8177..5f0ddd122f 100644 --- a/test/files/pos/t2691.scala +++ b/test/files/pos/t2691.scala @@ -1,5 +1,5 @@ object Breakdown { - def unapplySeq(x: Int): Some[List[String]] = Some(List("", "there")) + def unapplySeq(x: Int): Some[List[String]] = Some(List("", "there")) } object Test { 42 match { diff --git a/test/files/pos/t2698.scala b/test/files/pos/t2698.scala index 0e2662de61..bce02e48b3 100644 --- a/test/files/pos/t2698.scala +++ b/test/files/pos/t2698.scala @@ -1,5 +1,9 @@ +class WordExp { + abstract class Label + type _labelT <: Label +} + import scala.collection._ -import scala.util.regexp._ abstract class S2 { val lang: WordExp diff --git a/test/files/pos/t2726.cmds b/test/files/pos/t2726.cmds deleted file mode 100644 index 5fcb18bfbb..0000000000 --- a/test/files/pos/t2726.cmds +++ /dev/null @@ -1,2 +0,0 @@ -scalac SQLBuilder_1.scala -scalac test_2.scala diff --git a/test/files/pos/t2726/SQLBuilder_1.scala b/test/files/pos/t2726/SQLBuilder_1.scala index 7b3e3d8322..8d07a88265 100644 --- a/test/files/pos/t2726/SQLBuilder_1.scala +++ b/test/files/pos/t2726/SQLBuilder_1.scala @@ -1,7 +1,7 @@ class SQLBuilder extends SQLBuilder.Segment -object SQLBuilder { - trait Segment +object SQLBuilder { + trait Segment } diff --git a/test/files/pos/t2797.scala b/test/files/pos/t2797.scala index 4323664e91..cf579d8de4 100644 --- a/test/files/pos/t2797.scala +++ b/test/files/pos/t2797.scala @@ -1,9 +1,9 @@ class MyVector[A] { - def map[B](f: A => B): MyVector[B] = error("") + def map[B](f: A => B): MyVector[B] = sys.error("") } object Test { def unzip[B, C](_this: MyVector[(B, C)]): (MyVector[B], MyVector[C]) = { (_this.map{ bc => bc._1 }, _this.map{ bc => bc._2 }) } -}
\ No newline at end of file +} diff --git a/test/files/pos/t2910.scala b/test/files/pos/t2910.scala index 17a6a64809..d4d92fa765 100644 --- a/test/files/pos/t2910.scala +++ b/test/files/pos/t2910.scala @@ -9,9 +9,9 @@ object Test { lazy val s = "abc" } - def test3 { + def test3 { lazy val lazyBar = bar - object bar { + object bar { val foo = 12 } lazy val lazyBar2 = bar @@ -29,5 +29,5 @@ object Test { lazy val f: Int = g Console.println("foo") lazy val g: Int = f - } + } }
\ No newline at end of file diff --git a/test/files/pos/t2913.scala b/test/files/pos/t2913.scala index ee86b9e402..11d8b92053 100755 --- a/test/files/pos/t2913.scala +++ b/test/files/pos/t2913.scala @@ -11,13 +11,13 @@ class RichA { object Test { implicit def AToRichA(a: A) = new RichA - + val a = new A a.foo() a.foo(1) a.foo("") // Without implicits, a type error regarding invalid argument types is generated at `""`. This is - // the same position as an argument, so the 'second try' typing with an Implicit View is tried, + // the same position as an argument, so the 'second try' typing with an Implicit View is tried, // and AToRichA(a).foo("") is found. // // My reading of the spec "7.3 Views" is that `a.foo` denotes a member of `a`, so the view should @@ -48,6 +48,6 @@ object Main { val fn = (a : Int, str : String) => "a: " + a + ", str: " + str implicit def fx[T](f : (T,String) => String) = (x:T) => f(x,null) println(fn(1)) - () + () } } diff --git a/test/files/pos/t2939.scala b/test/files/pos/t2939.scala index 67677f2f18..3be4d4d561 100644 --- a/test/files/pos/t2939.scala +++ b/test/files/pos/t2939.scala @@ -4,10 +4,10 @@ object Proxies { class C1 extends MapProxy[Int,Int] { def self = Map[Int,Int]() } class C2 extends mutable.MapProxy[Int,Int] { def self = mutable.Map[Int,Int]() } class C3 extends immutable.MapProxy[Int,Int] { def self = immutable.Map[Int,Int]() } - + class C4 extends SetProxy[Int] { def self = Set[Int]() } class C5 extends mutable.SetProxy[Int] { def self = mutable.Set[Int]() } class C6 extends immutable.SetProxy[Int] { def self = immutable.Set[Int]() } - + class C7 extends SeqProxy[Int] { def self = Seq[Int]() } }
\ No newline at end of file diff --git a/test/files/pos/t294/Ann.java b/test/files/pos/t294/Ann.java new file mode 100644 index 0000000000..934ca46297 --- /dev/null +++ b/test/files/pos/t294/Ann.java @@ -0,0 +1,3 @@ +public @interface Ann { + public Ann2[] nested(); +} diff --git a/test/files/pos/t294/Ann2.java b/test/files/pos/t294/Ann2.java new file mode 100644 index 0000000000..025b79e794 --- /dev/null +++ b/test/files/pos/t294/Ann2.java @@ -0,0 +1,3 @@ +public @interface Ann2 { + public int value(); +} diff --git a/test/files/pos/t294/Test_1.scala b/test/files/pos/t294/Test_1.scala new file mode 100644 index 0000000000..ff1f34b10e --- /dev/null +++ b/test/files/pos/t294/Test_1.scala @@ -0,0 +1,7 @@ +// also test pickling of java annotations; Test_2.scala will +// read this class file +@Ann(nested = Array(new Ann2(10))) class Test { + @Ann2(100) var ctx: Object = _ + @Ann(nested = Array()) def foo = 10 + @Ann(nested = Array(new Ann2(10), new Ann2(23))) val bam = -3 +} diff --git a/test/files/pos/t294/Test_2.scala b/test/files/pos/t294/Test_2.scala new file mode 100644 index 0000000000..9fb1c6e175 --- /dev/null +++ b/test/files/pos/t294/Test_2.scala @@ -0,0 +1 @@ +class Test2 extends Test diff --git a/test/files/pos/t2940/Error.scala b/test/files/pos/t2940/Error.scala index 7c600667f3..bf5a6bd0df 100644 --- a/test/files/pos/t2940/Error.scala +++ b/test/files/pos/t2940/Error.scala @@ -5,8 +5,8 @@ abstract class Error { object Test { trait Quux[T] extends Cycle[Quux[T]] val x = new Quux[Int] { def doStuff() { } } - + def main(args: Array[String]): Unit = { - + } } diff --git a/test/files/pos/t2994a.scala b/test/files/pos/t2994a.scala index f2d57c34ca..cb4a389e2f 100644 --- a/test/files/pos/t2994a.scala +++ b/test/files/pos/t2994a.scala @@ -17,8 +17,8 @@ object Naturals { type _5 = SUCC[_4] type _6 = SUCC[_5] - - // crashes scala-2.8.0 beta1 + + // crashes scala-2.8.0 beta1 trait MUL[n <: NAT, m <: NAT] extends NAT { trait curry[n[_[_], _], s[_]] { type f[z <: NAT] = n[s, z] } type a[s[_ <: NAT] <: NAT, z <: NAT] = n#a[curry[m#a, s]#f, z] diff --git a/test/files/pos/t3020.scala b/test/files/pos/t3020.scala index cb429cd94f..016563e27f 100644 --- a/test/files/pos/t3020.scala +++ b/test/files/pos/t3020.scala @@ -1,7 +1,7 @@ object Test { def main(args: Array[String]): Unit = { var x = true - + ( { if (x) new scala.util.Random() } .asInstanceOf[Runnable] ) } } diff --git a/test/files/pos/t3079.scala b/test/files/pos/t3079.scala index 4bead34ff3..fa732ea516 100644 --- a/test/files/pos/t3079.scala +++ b/test/files/pos/t3079.scala @@ -10,8 +10,8 @@ object Coerce { def IdentityCoerce[B] = new Coerce[Identity[B], B] { // java.lang.Error: A in trait Identity cannot be instantiated from ?x$1.type def unwrap = _.value - + // Providing the type of _ works around the problem. - //def unwrap = (_: Identity[B]).value + //def unwrap = (_: Identity[B]).value } }
\ No newline at end of file diff --git a/test/files/pos/t3106.scala b/test/files/pos/t3106.scala index cf7b507126..162e93366f 100644 --- a/test/files/pos/t3106.scala +++ b/test/files/pos/t3106.scala @@ -3,5 +3,5 @@ class Sample[A] (val d0: ((A,A)) => A) {} object Sample { implicit def apply[A] (x:A): Sample[A] = { new Sample(p => p._1) - } + } }
\ No newline at end of file diff --git a/test/files/pos/t3108.scala b/test/files/pos/t3108.scala deleted file mode 100644 index 6a1da73220..0000000000 --- a/test/files/pos/t3108.scala +++ /dev/null @@ -1,5 +0,0 @@ -object A { - val a: NotNull = "" - val b: NotNull = 41 -} - diff --git a/test/files/pos/t3136.scala b/test/files/pos/t3136.scala index 6a5850aeb0..33d42c2f3c 100644 --- a/test/files/pos/t3136.scala +++ b/test/files/pos/t3136.scala @@ -11,7 +11,7 @@ object NullaryMethodType { } object Test { - def TEST(tp: Type): String = + def TEST(tp: Type): String = tp match { case PolyType(ps1, PolyType(ps2, res @ PolyType(a, b))) => "1"+tp // couldn't find a simpler version that still crashes case NullaryMethodType(meh) => "2"+meh diff --git a/test/files/pos/t3152.scala b/test/files/pos/t3152.scala index a20428dbee..3d1dcbd6f0 100644 --- a/test/files/pos/t3152.scala +++ b/test/files/pos/t3152.scala @@ -1,13 +1,13 @@ trait Applicative[M[_]] sealed trait MA[M[_], A] { - def sequence[N[_], B](implicit a: A <:< N[B], n: Applicative[N]): N[M[B]] = error("stub") - // def sequence3[N[_], B]()(implicit a: A <:< N[B], n: Applicative[N]): N[M[B]] = error("stub") + def sequence[N[_], B](implicit a: A <:< N[B], n: Applicative[N]): N[M[B]] = sys.error("stub") + // def sequence3[N[_], B]()(implicit a: A <:< N[B], n: Applicative[N]): N[M[B]] = sys.error("stub") } object test { - implicit def ListMA[A](l: List[A]): MA[List, A] = error("stub") - implicit val ao: Applicative[Option] = error("stub") + implicit def ListMA[A](l: List[A]): MA[List, A] = sys.error("stub") + implicit val ao: Applicative[Option] = sys.error("stub") /* This compiles OK: (Nil: List[Option[Int]]).sequence3(): Option[List[Int]] @@ -17,4 +17,4 @@ object test { // !!! No line number is reported with the error (Nil: List[Option[Int]]).sequence: Option[List[Int]] (List[Option[Int]]()).sequence: Option[List[Int]] -}
\ No newline at end of file +} diff --git a/test/files/pos/t3160.scala b/test/files/pos/t3160.scala new file mode 100644 index 0000000000..cc007dc014 --- /dev/null +++ b/test/files/pos/t3160.scala @@ -0,0 +1,6 @@ +import scala.collection.mutable._ +class Node + +class A { + def f(x: Node): Node = ??? +} diff --git a/test/files/pos/t3174b.scala b/test/files/pos/t3174b.scala index 002c4f090f..4df1bfe837 100755 --- a/test/files/pos/t3174b.scala +++ b/test/files/pos/t3174b.scala @@ -2,9 +2,9 @@ trait Foo[X] { def foo : Map[String,Foo[X]] } object Test { def f[T]() : Foo[T] = { - class Anon extends Foo[T] { - var foo: Map[String, Foo[T]] = Map[String,Foo[T]]() - //def foo = Map[String,Foo[T]]() + class Anon extends Foo[T] { + var foo: Map[String, Foo[T]] = Map[String,Foo[T]]() + //def foo = Map[String,Foo[T]]() //def foo_=(x: Map[String,Foo[T]]) {} } new Anon diff --git a/test/files/pos/t3175-pos.scala b/test/files/pos/t3175-pos.scala index 497ff8255c..89bbf8b5fc 100644 --- a/test/files/pos/t3175-pos.scala +++ b/test/files/pos/t3175-pos.scala @@ -1,7 +1,7 @@ object Test { - def f(g:{val update:Unit}) = g.update - + def f(g:{val update:Unit}) = g.update + def main(args: Array[String]): Unit = { - + } } diff --git a/test/files/pos/t3177.scala b/test/files/pos/t3177.scala index 21893c9422..9f9528faec 100644 --- a/test/files/pos/t3177.scala +++ b/test/files/pos/t3177.scala @@ -1,17 +1,17 @@ trait InvariantFunctor[F[_]] { def xmap[A, B](ma: F[A], f: A => B, g: B => A): F[B] } - + object InvariantFunctor { import Endo._ - + implicit val EndoInvariantFunctor = new InvariantFunctor[Endo] { - def xmap[A, B](ma: Endo[A], f: A => B, g: B => A): Endo[B] = (b: B) => f(ma(g(b))) + def xmap[A, B](ma: Endo[A], f: A => B, g: B => A): Endo[B] = (b: B) => f(ma(g(b))) } - + // The definition about fails with: // anon-type.scala:9: error: not found: value b - // def xmap[A, B](ma: Endo[A], f: A => B, g: B => A): Endo[B] = (b: B) => f(ma(g(b))) + // def xmap[A, B](ma: Endo[A], f: A => B, g: B => A): Endo[B] = (b: B) => f(ma(g(b))) // ^ // anon-type.scala:8: error: not found: type $anon // implicit val EndoInvariantFunctor = new InvariantFunctor[Endo] { @@ -20,9 +20,9 @@ object InvariantFunctor { // These both work: // implicit val EndoInvariantFunctorAscribed: InvariantFunctor[Endo] = new InvariantFunctor[Endo] { - // def xmap[A, B](ma: Endo[A], f: A => B, g: B => A): Endo[B] = (b: B) => f(ma(g(b))) + // def xmap[A, B](ma: Endo[A], f: A => B, g: B => A): Endo[B] = (b: B) => f(ma(g(b))) // } - // + // // implicit val EndoInvariantFunctorStubbed = new InvariantFunctor[Endo] { // def xmap[A, B](ma: Endo[A], f: A => B, g: B => A): Endo[B] = error("stub") // } diff --git a/test/files/pos/t3252.scala b/test/files/pos/t3252.scala index 4b8e862714..3ecc1e7cef 100644 --- a/test/files/pos/t3252.scala +++ b/test/files/pos/t3252.scala @@ -8,8 +8,8 @@ class A { } } - private def g[T](block : => T) = error("") + private def g[T](block : => T) = sys.error("") } object B { - def h(block : => Unit) : Nothing = error("") -}
\ No newline at end of file + def h(block : => Unit) : Nothing = sys.error("") +} diff --git a/test/files/pos/t3274.scala b/test/files/pos/t3274.scala index dfa6a4ec01..15723184bb 100644 --- a/test/files/pos/t3274.scala +++ b/test/files/pos/t3274.scala @@ -1,7 +1,7 @@ -trait A { this: B => - trait X { +trait A { this: B => + trait X { class Y1 extends Y - } + } } trait B extends A { diff --git a/test/files/pos/t3312.scala b/test/files/pos/t3312.scala index 9bf3e23ed3..aef965d2e7 100644 --- a/test/files/pos/t3312.scala +++ b/test/files/pos/t3312.scala @@ -12,6 +12,6 @@ trait B extends Root { object Foo extends A with B { override def say: String = foo(super[A].say) - + def foo(p: => String): String = p } diff --git a/test/files/pos/t3349/AbstractTupleSet.java b/test/files/pos/t3349/AbstractTupleSet.java index 47b440a589..38e4743ef4 100644 --- a/test/files/pos/t3349/AbstractTupleSet.java +++ b/test/files/pos/t3349/AbstractTupleSet.java @@ -5,5 +5,5 @@ public abstract class AbstractTupleSet implements TupleSet { public void addColumn(String name, String expr) { throw new UnsupportedOperationException(); - } + } } diff --git a/test/files/pos/t3349/Test.scala b/test/files/pos/t3349/Test.scala index 8174e4c4f8..595beadc20 100644 --- a/test/files/pos/t3349/Test.scala +++ b/test/files/pos/t3349/Test.scala @@ -1,5 +1,5 @@ object Test { val label = "name" - val table: Table = error("") + val table: Table = sys.error("") table.addColumn( label, label.getClass ) -}
\ No newline at end of file +} diff --git a/test/files/pos/t3363-new.scala b/test/files/pos/t3363-new.scala index e609f4d55f..fef2bf8a72 100644 --- a/test/files/pos/t3363-new.scala +++ b/test/files/pos/t3363-new.scala @@ -9,7 +9,7 @@ object TestCase { //if you inherit from MapOps[T] instead of MapOps[F] then code compiles fine implicit def map2ops[T,F](fs: Map[T,F]) = new MapOps[F] { //if you remove this line, then code compiles - lazy val m: TypeTag[T] = error("just something to make it compile") + lazy val m: TypeTag[T] = sys.error("just something to make it compile") def is(xs: List[T]) = List(xs) } @@ -17,4 +17,4 @@ object TestCase { println(Map(1 -> "2") is List(2)) } - }
\ No newline at end of file + } diff --git a/test/files/pos/t3363-old.scala b/test/files/pos/t3363-old.scala index bae54084ea..c08cf2a6b6 100644 --- a/test/files/pos/t3363-old.scala +++ b/test/files/pos/t3363-old.scala @@ -7,7 +7,7 @@ object TestCase { //if you inherit from MapOps[T] instead of MapOps[F] then code compiles fine implicit def map2ops[T,F](fs: Map[T,F]) = new MapOps[F] { //if you remove this line, then code compiles - lazy val m: Manifest[T] = error("just something to make it compile") + lazy val m: Manifest[T] = sys.error("just something to make it compile") def is(xs: List[T]) = List(xs) } diff --git a/test/files/pos/t3411.scala b/test/files/pos/t3411.scala index b76fec66a6..b58e52db8d 100644 --- a/test/files/pos/t3411.scala +++ b/test/files/pos/t3411.scala @@ -1,6 +1,6 @@ object A { def g(c: PartialFunction[Any,Unit]) {} - + def f { lazy val x = 0 g { case `x` => } diff --git a/test/files/pos/t3417.scala b/test/files/pos/t3417.scala deleted file mode 100644 index d2de1608aa..0000000000 --- a/test/files/pos/t3417.scala +++ /dev/null @@ -1,11 +0,0 @@ -trait X extends NotNull { - def foo = 1 -} - -trait Y extends Object with NotNull { - def bar = 1 -} - -class Z extends NotNull - -class W extends Object with NotNull diff --git a/test/files/pos/t342.scala b/test/files/pos/t342.scala deleted file mode 100644 index 752b24d2ba..0000000000 --- a/test/files/pos/t342.scala +++ /dev/null @@ -1,8 +0,0 @@ -object Main extends App { - - object Foo extends Enumeration(0, "Bar") { // 2 - val Bar = Value - } - import Foo._; - Console.println(Bar) -} diff --git a/test/files/pos/t3429/A.scala b/test/files/pos/t3429/A.scala index 4b705808c1..80785db51d 100644 --- a/test/files/pos/t3429/A.scala +++ b/test/files/pos/t3429/A.scala @@ -2,8 +2,8 @@ class A { @Test(exc = classOf[Exception]) def myTestMethod = 0 } -// rytz@chara:~/scala/trunk/sandbox$ javac Test.java -// rytz@chara:~/scala/trunk/sandbox$ ../build/pack/bin/scalac A.scala +// rytz@chara:~/scala/trunk/sandbox$ javac Test.java +// rytz@chara:~/scala/trunk/sandbox$ ../build/pack/bin/scalac A.scala // A.scala:2: error: type mismatch; // found : java.lang.Class[Exception](classOf[java.lang.Exception]) // required: java.lang.Class diff --git a/test/files/pos/t3430.scala b/test/files/pos/t3430.scala index 4990abb2a1..3129c6276a 100644 --- a/test/files/pos/t3430.scala +++ b/test/files/pos/t3430.scala @@ -1,6 +1,6 @@ // package com.example -object A { +object A { def f1(f: String => Boolean) = f("a") def f2(): Boolean = diff --git a/test/files/pos/t344.scala b/test/files/pos/t344.scala index 8a6ad9120d..449a763af7 100644 --- a/test/files/pos/t344.scala +++ b/test/files/pos/t344.scala @@ -1,7 +1,7 @@ object Bug { class A; - case class A1 extends A; - case class A2 extends A; + case class A1() extends A; + case class A2() extends A; def f: A = if (true) A1() diff --git a/test/files/pos/t3440.scala b/test/files/pos/t3440.scala index 46bba1b207..0e7ca6b70f 100644 --- a/test/files/pos/t3440.scala +++ b/test/files/pos/t3440.scala @@ -4,15 +4,15 @@ object test { } case object Int8 extends SampleFormat1 { - def readerFactory = error("") + def readerFactory = sys.error("") } case object Int16 extends SampleFormat1 { - def readerFactory = error("") + def readerFactory = sys.error("") } - + (new {}: Any) match { case 8 => Int8 case 16 => Int16 - case _ => error("") + case _ => sys.error("") } -}
\ No newline at end of file +} diff --git a/test/files/pos/t3452f.scala b/test/files/pos/t3452f.scala new file mode 100644 index 0000000000..efe25a62fc --- /dev/null +++ b/test/files/pos/t3452f.scala @@ -0,0 +1,10 @@ +class Base[Coll] { + trait Transformed[S] { + lazy val underlying: Coll = ??? + } +} + +class Derived extends Base[String] { + class C extends Transformed[Any] +} + diff --git a/test/files/pos/t3477.scala b/test/files/pos/t3477.scala index 660aa55736..6a94baa6c8 100644 --- a/test/files/pos/t3477.scala +++ b/test/files/pos/t3477.scala @@ -1,7 +1,7 @@ class J3 { - def f[K, K1 >: K, V](x: Map[K1, V]): Map[K, V] = error("") + def f[K, K1 >: K, V](x: Map[K1, V]): Map[K, V] = sys.error("") } object Test { (new J3).f(Map[Int, Int]()) -}
\ No newline at end of file +} diff --git a/test/files/pos/t3521/DoubleValue.java b/test/files/pos/t3521/DoubleValue.java index 28f05cd972..e8c093890b 100644 --- a/test/files/pos/t3521/DoubleValue.java +++ b/test/files/pos/t3521/DoubleValue.java @@ -4,4 +4,4 @@ import java.lang.annotation.*; @Target(ElementType.FIELD) public @interface DoubleValue { double value(); -}
\ No newline at end of file +}
\ No newline at end of file diff --git a/test/files/pos/t3528.scala b/test/files/pos/t3528.scala index b1c4344731..ff49b3e929 100644 --- a/test/files/pos/t3528.scala +++ b/test/files/pos/t3528.scala @@ -4,5 +4,5 @@ class A { // 3528 comments def f2 = List(Set(1,2,3), List(1,2,3)) // 2322 - def f3 = List(null: Range, null: List[Int]) + def f3 = List(null: Range, null: List[Int]) } diff --git a/test/files/pos/t3568.scala b/test/files/pos/t3568.scala index 0f26e2fad3..c8e3fcc4be 100755 --- a/test/files/pos/t3568.scala +++ b/test/files/pos/t3568.scala @@ -14,7 +14,7 @@ package buffer { // ArrayVec2 can be compiled, instantiated and used. def main(args: Array[String]) { println(works) } } - + trait ElemType { type Element; type Component <: ElemType } trait Float1 extends ElemType { type Element = Float; type Component = Float1} class Vec2 extends ElemType { type Element = Vec2; type Component = Float1 } diff --git a/test/files/pos/t3578.scala b/test/files/pos/t3578.scala index 306cde811b..d984118208 100644 --- a/test/files/pos/t3578.scala +++ b/test/files/pos/t3578.scala @@ -24,7 +24,7 @@ object Test { case class JInt(num: BigInt) extends JValue case class JBool(value: Boolean) extends JValue case class JField(name: String, value: JValue) extends JValue - case class JObject(obj: List[JField]) extends JValue + case class JObject(obj: List[JField]) extends JValue case class JArray(arr: List[JValue]) extends JValue } diff --git a/test/files/pos/t3582.scala b/test/files/pos/t3582.scala index e20af5e61d..0ac112efbf 100644 --- a/test/files/pos/t3582.scala +++ b/test/files/pos/t3582.scala @@ -6,7 +6,7 @@ object Test { // [[syntax trees at end of typer]] // abstract trait C#5[A#9116 >: Nothing#5832 <: Any#52] extends scala#33.AnyRef#2780; // final object Test#15 extends java.lang.Object#2485 with ScalaObject#1913 { -// def ImplicitParamCA#9123[CC#9124[A#10858 >: Nothing#5832 <: Any#52] >: [A#10858]Nothing#5832 <: [A#10858]Any#52, +// def ImplicitParamCA#9123[CC#9124[A#10858 >: Nothing#5832 <: Any#52] >: [A#10858]Nothing#5832 <: [A#10858]Any#52, // A#9125 >: Nothing#5832 <: Any#52](implicit ev#10856: C#5[A#9127]): Unit#3818 // = scala#34.this.Predef#1683.implicitly#8816[C#5[A#10858]]() // } diff --git a/test/files/pos/t3631.scala b/test/files/pos/t3631.scala new file mode 100644 index 0000000000..bcf91619ee --- /dev/null +++ b/test/files/pos/t3631.scala @@ -0,0 +1,3 @@ +case class X22(x1: Int, x2: Int, x3: Int, x4: Int, x5: Int, x6: Int, x7: Int, x8: Int, x9: Int, x10: Int, x11: Int, x12: Int, x13: Int, x14: Int, x15: Int, x16: Int, x17: Int, x18: Int, x19: Int, x20: Int, x21: Int, x22: Int) { } + +case class X23(x1: Int, x2: Int, x3: Int, x4: Int, x5: Int, x6: Int, x7: Int, x8: Int, x9: Int, x10: Int, x11: Int, x12: Int, x13: Int, x14: Int, x15: Int, x16: Int, x17: Int, x18: Int, x19: Int, x20: Int, x21: Int, x22: Int, x23: Int) { }
\ No newline at end of file diff --git a/test/files/pos/t3636.scala b/test/files/pos/t3636.scala index dbfc7a2c94..24d18c653d 100644 --- a/test/files/pos/t3636.scala +++ b/test/files/pos/t3636.scala @@ -5,11 +5,11 @@ class CTxnLocal[ T ] { } trait Txn - + trait ProcTxn { def ccstm: Txn } - + trait TxnLocal[ @specialized T ] { def apply()( implicit tx: ProcTxn ) : T def set( v: T )( implicit tx: ProcTxn ) : Unit diff --git a/test/files/pos/t3670.scala b/test/files/pos/t3670.scala index 19959f910f..ec4fbe5b4f 100644 --- a/test/files/pos/t3670.scala +++ b/test/files/pos/t3670.scala @@ -1,4 +1,4 @@ -class A { +class A { val n = { val z = { lazy val bb = 1 diff --git a/test/files/pos/t3671.scala b/test/files/pos/t3671.scala index 75559f84e2..1ca9327bb7 100644 --- a/test/files/pos/t3671.scala +++ b/test/files/pos/t3671.scala @@ -2,6 +2,6 @@ object Crash { def crash(value: Int): Unit = value match { case java.lang.Integer.MAX_VALUE => println("MAX_VALUE") - case java.lang.Integer.MIN_VALUE => println("MIN_VALUE") + case java.lang.Integer.MIN_VALUE => println("MIN_VALUE") } }
\ No newline at end of file diff --git a/test/files/pos/t3688-redux.scala b/test/files/pos/t3688-redux.scala deleted file mode 100644 index e601cf240c..0000000000 --- a/test/files/pos/t3688-redux.scala +++ /dev/null @@ -1,8 +0,0 @@ -import collection.JavaConverters._ -import java.{ util => ju } -import scala.collection.{ mutable, immutable } - -object Test { - def m[P <% AsJava[ju.List[Int]]](l: P) = 1 - m(List(1)) -}
\ No newline at end of file diff --git a/test/files/pos/t3731.scala b/test/files/pos/t3731.scala index 75938540c0..7a3cbec0f4 100644 --- a/test/files/pos/t3731.scala +++ b/test/files/pos/t3731.scala @@ -1,8 +1,8 @@ object Test{ trait ZW[S]{type T} - def ZipWith[S, M <: ZW[S]]: M#T = error("ZW") + def ZipWith[S, M <: ZW[S]]: M#T = sys.error("ZW") - // meh must be parameterised to force an asSeenFrom that + // meh must be parameterised to force an asSeenFrom that // duplicates the refinement in the TR's pre without updating its sym def meh[A] = ZipWith[A, ZW[A]{type T=Stream[A]}] diff --git a/test/files/pos/t3837.scala b/test/files/pos/t3837.scala index e1797dba77..bcaf63cc8d 100644 --- a/test/files/pos/t3837.scala +++ b/test/files/pos/t3837.scala @@ -1,8 +1,8 @@ class BipClass { } trait BipTrait { self: BipClass => - - private[this] def foo() = 5 + + private[this] def foo() = 5 def bar() = this.foo() } // error: value foo is not a member of BipTrait with BipClass diff --git a/test/files/pos/t3856.scala b/test/files/pos/t3856.scala index 5ea4b84e2c..132c95c5e6 100644 --- a/test/files/pos/t3856.scala +++ b/test/files/pos/t3856.scala @@ -1,4 +1,4 @@ -case class C[T](x: T) +case class C[T](x: T) case class CS(xs: C[_]*) diff --git a/test/files/pos/t3864/tuples_1.scala b/test/files/pos/t3864/tuples_1.scala index 1d19af6e41..5e97f8452b 100644 --- a/test/files/pos/t3864/tuples_1.scala +++ b/test/files/pos/t3864/tuples_1.scala @@ -1,11 +1,11 @@ -trait PimpedType[X] { +trait EnrichedType[X] { val value: X } trait Tuples { - -trait Tuple15W[A, B, C, D, E, F, G, H, I, J, K, L, M, N, O] extends PimpedType[Tuple15[A, B, C, D, E, F, G, H, I, J, K, L, M, N, O]] { + +trait Tuple15W[A, B, C, D, E, F, G, H, I, J, K, L, M, N, O] extends EnrichedType[Tuple15[A, B, C, D, E, F, G, H, I, J, K, L, M, N, O]] { def fold[Z](f: => (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O) => Z): Z = {import value._; f(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15)} def toIndexedSeq[Z](implicit ev: value.type <:< Tuple15[Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z]): IndexedSeq[Z] = {val zs = ev(value); import zs._; IndexedSeq(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15)} def mapElements[AA, BB, CC, DD, EE, FF, GG, HH, II, JJ, KK, LL, MM, NN, OO](_1: (A => AA) = identity[A] _, _2: (B => BB) = identity[B] _, _3: (C => CC) = identity[C] _, _4: (D => DD) = identity[D] _, _5: (E => EE) = identity[E] _, _6: (F => FF) = identity[F] _, _7: (G => GG) = identity[G] _, _8: (H => HH) = identity[H] _, _9: (I => II) = identity[I] _, _10: (J => JJ) = identity[J] _, _11: (K => KK) = identity[K] _, _12: (L => LL) = identity[L] _, _13: (M => MM) = identity[M] _, _14: (N => NN) = identity[N] _, _15: (O => OO) = identity[O] _): (AA, BB, CC, DD, EE, FF, GG, HH, II, JJ, KK, LL, MM, NN, OO) = (_1(value._1), _2(value._2), _3(value._3), _4(value._4), _5(value._5), _6(value._6), _7(value._7), _8(value._8), _9(value._9), _10(value._10), _11(value._11), _12(value._12), _13(value._13), _14(value._14), _15(value._15)) @@ -13,8 +13,8 @@ trait Tuple15W[A, B, C, D, E, F, G, H, I, J, K, L, M, N, O] extends PimpedType[T implicit def ToTuple15W[A, B, C, D, E, F, G, H, I, J, K, L, M, N, O](t: (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O)): Tuple15W[A, B, C, D, E, F, G, H, I, J, K, L, M, N, O] = new { val value = t } with Tuple15W[A, B, C, D, E, F, G, H, I, J, K, L, M, N, O] - -trait Tuple16W[A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P] extends PimpedType[Tuple16[A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P]] { + +trait Tuple16W[A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P] extends EnrichedType[Tuple16[A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P]] { def fold[Z](f: => (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P) => Z): Z = {import value._; f(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16)} def toIndexedSeq[Z](implicit ev: value.type <:< Tuple16[Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z]): IndexedSeq[Z] = {val zs = ev(value); import zs._; IndexedSeq(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16)} def mapElements[AA, BB, CC, DD, EE, FF, GG, HH, II, JJ, KK, LL, MM, NN, OO, PP](_1: (A => AA) = identity[A] _, _2: (B => BB) = identity[B] _, _3: (C => CC) = identity[C] _, _4: (D => DD) = identity[D] _, _5: (E => EE) = identity[E] _, _6: (F => FF) = identity[F] _, _7: (G => GG) = identity[G] _, _8: (H => HH) = identity[H] _, _9: (I => II) = identity[I] _, _10: (J => JJ) = identity[J] _, _11: (K => KK) = identity[K] _, _12: (L => LL) = identity[L] _, _13: (M => MM) = identity[M] _, _14: (N => NN) = identity[N] _, _15: (O => OO) = identity[O] _, _16: (P => PP) = identity[P] _): (AA, BB, CC, DD, EE, FF, GG, HH, II, JJ, KK, LL, MM, NN, OO, PP) = (_1(value._1), _2(value._2), _3(value._3), _4(value._4), _5(value._5), _6(value._6), _7(value._7), _8(value._8), _9(value._9), _10(value._10), _11(value._11), _12(value._12), _13(value._13), _14(value._14), _15(value._15), _16(value._16)) @@ -22,8 +22,8 @@ trait Tuple16W[A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P] extends PimpedTyp implicit def ToTuple16W[A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P](t: (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P)): Tuple16W[A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P] = new { val value = t } with Tuple16W[A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P] - -trait Tuple17W[A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q] extends PimpedType[Tuple17[A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q]] { + +trait Tuple17W[A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q] extends EnrichedType[Tuple17[A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q]] { def fold[Z](f: => (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q) => Z): Z = {import value._; f(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17)} def toIndexedSeq[Z](implicit ev: value.type <:< Tuple17[Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z]): IndexedSeq[Z] = {val zs = ev(value); import zs._; IndexedSeq(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17)} def mapElements[AA, BB, CC, DD, EE, FF, GG, HH, II, JJ, KK, LL, MM, NN, OO, PP, QQ](_1: (A => AA) = identity[A] _, _2: (B => BB) = identity[B] _, _3: (C => CC) = identity[C] _, _4: (D => DD) = identity[D] _, _5: (E => EE) = identity[E] _, _6: (F => FF) = identity[F] _, _7: (G => GG) = identity[G] _, _8: (H => HH) = identity[H] _, _9: (I => II) = identity[I] _, _10: (J => JJ) = identity[J] _, _11: (K => KK) = identity[K] _, _12: (L => LL) = identity[L] _, _13: (M => MM) = identity[M] _, _14: (N => NN) = identity[N] _, _15: (O => OO) = identity[O] _, _16: (P => PP) = identity[P] _, _17: (Q => QQ) = identity[Q] _): (AA, BB, CC, DD, EE, FF, GG, HH, II, JJ, KK, LL, MM, NN, OO, PP, QQ) = (_1(value._1), _2(value._2), _3(value._3), _4(value._4), _5(value._5), _6(value._6), _7(value._7), _8(value._8), _9(value._9), _10(value._10), _11(value._11), _12(value._12), _13(value._13), _14(value._14), _15(value._15), _16(value._16), _17(value._17)) @@ -31,8 +31,8 @@ trait Tuple17W[A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q] extends Pimped implicit def ToTuple17W[A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q](t: (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q)): Tuple17W[A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q] = new { val value = t } with Tuple17W[A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q] - -trait Tuple18W[A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R] extends PimpedType[Tuple18[A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R]] { + +trait Tuple18W[A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R] extends EnrichedType[Tuple18[A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R]] { def fold[Z](f: => (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R) => Z): Z = {import value._; f(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18)} def toIndexedSeq[Z](implicit ev: value.type <:< Tuple18[Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z]): IndexedSeq[Z] = {val zs = ev(value); import zs._; IndexedSeq(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18)} def mapElements[AA, BB, CC, DD, EE, FF, GG, HH, II, JJ, KK, LL, MM, NN, OO, PP, QQ, RR](_1: (A => AA) = identity[A] _, _2: (B => BB) = identity[B] _, _3: (C => CC) = identity[C] _, _4: (D => DD) = identity[D] _, _5: (E => EE) = identity[E] _, _6: (F => FF) = identity[F] _, _7: (G => GG) = identity[G] _, _8: (H => HH) = identity[H] _, _9: (I => II) = identity[I] _, _10: (J => JJ) = identity[J] _, _11: (K => KK) = identity[K] _, _12: (L => LL) = identity[L] _, _13: (M => MM) = identity[M] _, _14: (N => NN) = identity[N] _, _15: (O => OO) = identity[O] _, _16: (P => PP) = identity[P] _, _17: (Q => QQ) = identity[Q] _, _18: (R => RR) = identity[R] _): (AA, BB, CC, DD, EE, FF, GG, HH, II, JJ, KK, LL, MM, NN, OO, PP, QQ, RR) = (_1(value._1), _2(value._2), _3(value._3), _4(value._4), _5(value._5), _6(value._6), _7(value._7), _8(value._8), _9(value._9), _10(value._10), _11(value._11), _12(value._12), _13(value._13), _14(value._14), _15(value._15), _16(value._16), _17(value._17), _18(value._18)) @@ -40,8 +40,8 @@ trait Tuple18W[A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R] extends Pim implicit def ToTuple18W[A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R](t: (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R)): Tuple18W[A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R] = new { val value = t } with Tuple18W[A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R] - -trait Tuple19W[A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S] extends PimpedType[Tuple19[A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S]] { + +trait Tuple19W[A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S] extends EnrichedType[Tuple19[A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S]] { def fold[Z](f: => (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S) => Z): Z = {import value._; f(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19)} def toIndexedSeq[Z](implicit ev: value.type <:< Tuple19[Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z]): IndexedSeq[Z] = {val zs = ev(value); import zs._; IndexedSeq(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19)} def mapElements[AA, BB, CC, DD, EE, FF, GG, HH, II, JJ, KK, LL, MM, NN, OO, PP, QQ, RR, SS](_1: (A => AA) = identity[A] _, _2: (B => BB) = identity[B] _, _3: (C => CC) = identity[C] _, _4: (D => DD) = identity[D] _, _5: (E => EE) = identity[E] _, _6: (F => FF) = identity[F] _, _7: (G => GG) = identity[G] _, _8: (H => HH) = identity[H] _, _9: (I => II) = identity[I] _, _10: (J => JJ) = identity[J] _, _11: (K => KK) = identity[K] _, _12: (L => LL) = identity[L] _, _13: (M => MM) = identity[M] _, _14: (N => NN) = identity[N] _, _15: (O => OO) = identity[O] _, _16: (P => PP) = identity[P] _, _17: (Q => QQ) = identity[Q] _, _18: (R => RR) = identity[R] _, _19: (S => SS) = identity[S] _): (AA, BB, CC, DD, EE, FF, GG, HH, II, JJ, KK, LL, MM, NN, OO, PP, QQ, RR, SS) = (_1(value._1), _2(value._2), _3(value._3), _4(value._4), _5(value._5), _6(value._6), _7(value._7), _8(value._8), _9(value._9), _10(value._10), _11(value._11), _12(value._12), _13(value._13), _14(value._14), _15(value._15), _16(value._16), _17(value._17), _18(value._18), _19(value._19)) @@ -49,8 +49,8 @@ trait Tuple19W[A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S] extends implicit def ToTuple19W[A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S](t: (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S)): Tuple19W[A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S] = new { val value = t } with Tuple19W[A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S] - -trait Tuple20W[A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T] extends PimpedType[Tuple20[A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T]] { + +trait Tuple20W[A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T] extends EnrichedType[Tuple20[A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T]] { def fold[Z](f: => (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T) => Z): Z = {import value._; f(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20)} def toIndexedSeq[Z](implicit ev: value.type <:< Tuple20[Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z]): IndexedSeq[Z] = {val zs = ev(value); import zs._; IndexedSeq(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20)} def mapElements[AA, BB, CC, DD, EE, FF, GG, HH, II, JJ, KK, LL, MM, NN, OO, PP, QQ, RR, SS, TT](_1: (A => AA) = identity[A] _, _2: (B => BB) = identity[B] _, _3: (C => CC) = identity[C] _, _4: (D => DD) = identity[D] _, _5: (E => EE) = identity[E] _, _6: (F => FF) = identity[F] _, _7: (G => GG) = identity[G] _, _8: (H => HH) = identity[H] _, _9: (I => II) = identity[I] _, _10: (J => JJ) = identity[J] _, _11: (K => KK) = identity[K] _, _12: (L => LL) = identity[L] _, _13: (M => MM) = identity[M] _, _14: (N => NN) = identity[N] _, _15: (O => OO) = identity[O] _, _16: (P => PP) = identity[P] _, _17: (Q => QQ) = identity[Q] _, _18: (R => RR) = identity[R] _, _19: (S => SS) = identity[S] _, _20: (T => TT) = identity[T] _): (AA, BB, CC, DD, EE, FF, GG, HH, II, JJ, KK, LL, MM, NN, OO, PP, QQ, RR, SS, TT) = (_1(value._1), _2(value._2), _3(value._3), _4(value._4), _5(value._5), _6(value._6), _7(value._7), _8(value._8), _9(value._9), _10(value._10), _11(value._11), _12(value._12), _13(value._13), _14(value._14), _15(value._15), _16(value._16), _17(value._17), _18(value._18), _19(value._19), _20(value._20)) @@ -58,8 +58,8 @@ trait Tuple20W[A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T] exten implicit def ToTuple20W[A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T](t: (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T)): Tuple20W[A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T] = new { val value = t } with Tuple20W[A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T] - -trait Tuple21W[A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U] extends PimpedType[Tuple21[A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U]] { + +trait Tuple21W[A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U] extends EnrichedType[Tuple21[A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U]] { def fold[Z](f: => (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U) => Z): Z = {import value._; f(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21)} def toIndexedSeq[Z](implicit ev: value.type <:< Tuple21[Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z]): IndexedSeq[Z] = {val zs = ev(value); import zs._; IndexedSeq(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21)} def mapElements[AA, BB, CC, DD, EE, FF, GG, HH, II, JJ, KK, LL, MM, NN, OO, PP, QQ, RR, SS, TT, UU](_1: (A => AA) = identity[A] _, _2: (B => BB) = identity[B] _, _3: (C => CC) = identity[C] _, _4: (D => DD) = identity[D] _, _5: (E => EE) = identity[E] _, _6: (F => FF) = identity[F] _, _7: (G => GG) = identity[G] _, _8: (H => HH) = identity[H] _, _9: (I => II) = identity[I] _, _10: (J => JJ) = identity[J] _, _11: (K => KK) = identity[K] _, _12: (L => LL) = identity[L] _, _13: (M => MM) = identity[M] _, _14: (N => NN) = identity[N] _, _15: (O => OO) = identity[O] _, _16: (P => PP) = identity[P] _, _17: (Q => QQ) = identity[Q] _, _18: (R => RR) = identity[R] _, _19: (S => SS) = identity[S] _, _20: (T => TT) = identity[T] _, _21: (U => UU) = identity[U] _): (AA, BB, CC, DD, EE, FF, GG, HH, II, JJ, KK, LL, MM, NN, OO, PP, QQ, RR, SS, TT, UU) = (_1(value._1), _2(value._2), _3(value._3), _4(value._4), _5(value._5), _6(value._6), _7(value._7), _8(value._8), _9(value._9), _10(value._10), _11(value._11), _12(value._12), _13(value._13), _14(value._14), _15(value._15), _16(value._16), _17(value._17), _18(value._18), _19(value._19), _20(value._20), _21(value._21)) @@ -67,12 +67,12 @@ trait Tuple21W[A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U] ex implicit def ToTuple21W[A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U](t: (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U)): Tuple21W[A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U] = new { val value = t } with Tuple21W[A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U] - -trait Tuple22W[A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V] extends PimpedType[Tuple22[A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V]] { + +trait Tuple22W[A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V] extends EnrichedType[Tuple22[A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V]] { def fold[Z](f: => (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V) => Z): Z = {import value._; f(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22)} def toIndexedSeq[Z](implicit ev: value.type <:< Tuple22[Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z]): IndexedSeq[Z] = {val zs = ev(value); import zs._; IndexedSeq(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22)} def mapElements[AA, BB, CC, DD, EE, FF, GG, HH, II, JJ, KK, LL, MM, NN, OO, PP, QQ, RR, SS, TT, UU, VV](_1: (A => AA) = identity[A] _, _2: (B => BB) = identity[B] _, _3: (C => CC) = identity[C] _, _4: (D => DD) = identity[D] _, _5: (E => EE) = identity[E] _, _6: (F => FF) = identity[F] _, _7: (G => GG) = identity[G] _, _8: (H => HH) = identity[H] _, _9: (I => II) = identity[I] _, _10: (J => JJ) = identity[J] _, _11: (K => KK) = identity[K] _, _12: (L => LL) = identity[L] _, _13: (M => MM) = identity[M] _, _14: (N => NN) = identity[N] _, _15: (O => OO) = identity[O] _, _16: (P => PP) = identity[P] _, _17: (Q => QQ) = identity[Q] _, _18: (R => RR) = identity[R] _, _19: (S => SS) = identity[S] _, _20: (T => TT) = identity[T] _, _21: (U => UU) = identity[U] _, _22: (V => VV) = identity[V] _): (AA, BB, CC, DD, EE, FF, GG, HH, II, JJ, KK, LL, MM, NN, OO, PP, QQ, RR, SS, TT, UU, VV) = (_1(value._1), _2(value._2), _3(value._3), _4(value._4), _5(value._5), _6(value._6), _7(value._7), _8(value._8), _9(value._9), _10(value._10), _11(value._11), _12(value._12), _13(value._13), _14(value._14), _15(value._15), _16(value._16), _17(value._17), _18(value._18), _19(value._19), _20(value._20), _21(value._21), _22(value._22)) } implicit def ToTuple22W[A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V](t: (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V)): Tuple22W[A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V] = new { val value = t } with Tuple22W[A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V] -}
\ No newline at end of file +} diff --git a/test/files/pos/t3866.scala b/test/files/pos/t3866.scala index 5fe7e3f50e..5d366ccf13 100644 --- a/test/files/pos/t3866.scala +++ b/test/files/pos/t3866.scala @@ -13,5 +13,5 @@ abstract class ImplicitRepeated { f("A", 1, 2) // should be implicitly resolved to alternative b) f( 1, 2 ) // should be implicitly resolved to alternative a) // ImplicitRepeated.this.f[Int, Nothing]("A", ImplicitRepeated.this.anyToN[Int](1), ImplicitRepeated.this.anyToN[Int](2)); - // ImplicitRepeated.this.f[Int, Nothing](ImplicitRepeated.this.anyToN[Int](1), ImplicitRepeated.this.anyToN[Int](2)) + // ImplicitRepeated.this.f[Int, Nothing](ImplicitRepeated.this.anyToN[Int](1), ImplicitRepeated.this.anyToN[Int](2)) }
\ No newline at end of file diff --git a/test/files/pos/t3880.scala b/test/files/pos/t3880.scala index b6f06c43a3..cd5f3c0125 100644 --- a/test/files/pos/t3880.scala +++ b/test/files/pos/t3880.scala @@ -1,6 +1,6 @@ abstract class Bar[+B] { } -abstract class C1[+B] extends Bar[B] { +abstract class C1[+B] extends Bar[B] { private[this] def g(x: C1[B]): Unit = () // this method is fine: notice that it allows the call to g, diff --git a/test/files/pos/t3883.scala b/test/files/pos/t3883.scala index adde0526b2..1b62c0c6d6 100644 --- a/test/files/pos/t3883.scala +++ b/test/files/pos/t3883.scala @@ -1,14 +1,14 @@ // need to test both orders object A1 { - implicit def i: Equiv[Boolean] = error("") - implicit def div[T, A](implicit f: T => A, eq: Equiv[A]): Equiv[T] = error("") + implicit def i: Equiv[Boolean] = sys.error("") + implicit def div[T, A](implicit f: T => A, eq: Equiv[A]): Equiv[T] = sys.error("") implicitly[Equiv[Boolean]] } object A2 { - implicit def div[T, A](implicit f: T => A, eq: Equiv[A]): Equiv[T] = error("") - implicit def i: Equiv[Boolean] = error("") + implicit def div[T, A](implicit f: T => A, eq: Equiv[A]): Equiv[T] = sys.error("") + implicit def i: Equiv[Boolean] = sys.error("") implicitly[Equiv[Boolean]] } diff --git a/test/files/pos/t3898.scala b/test/files/pos/t3898.scala index 075692e5a8..ab47bbd877 100644 --- a/test/files/pos/t3898.scala +++ b/test/files/pos/t3898.scala @@ -2,5 +2,5 @@ trait Atomic[@specialized(Boolean) T] { def x: T def f(fn: T => T): Boolean = f(fn(x), true) - def f[R](a: T, b: R): R = b + def f[R](a: T, b: R): R = b } diff --git a/test/files/pos/t3927.scala b/test/files/pos/t3927.scala index eb4c4b3be5..f5869c55d5 100644 --- a/test/files/pos/t3927.scala +++ b/test/files/pos/t3927.scala @@ -1,6 +1,6 @@ object A { def x { - implicit lazy val e: Equiv[Int] = error("") + implicit lazy val e: Equiv[Int] = sys.error("") implicitly[Equiv[Int]] } -} +} diff --git a/test/files/pos/t3936/BlockingQueue.java b/test/files/pos/t3936/BlockingQueue.java new file mode 100644 index 0000000000..b902d4528d --- /dev/null +++ b/test/files/pos/t3936/BlockingQueue.java @@ -0,0 +1,3 @@ +package pack; +import java.util.Queue; +public interface BlockingQueue<E> extends Queue<E> { } diff --git a/test/files/pos/t3936/Queue.java b/test/files/pos/t3936/Queue.java new file mode 100644 index 0000000000..25c9087601 --- /dev/null +++ b/test/files/pos/t3936/Queue.java @@ -0,0 +1,2 @@ +package pack; +public interface Queue { } diff --git a/test/files/pos/t3936/Test.scala b/test/files/pos/t3936/Test.scala new file mode 100644 index 0000000000..c867a05ec9 --- /dev/null +++ b/test/files/pos/t3936/Test.scala @@ -0,0 +1,4 @@ +package pack +trait Test { + val b: BlockingQueue[Nothing] +} diff --git a/test/files/pos/t3938/Parent.java b/test/files/pos/t3938/Parent.java index a35f435030..08fae330bb 100644 --- a/test/files/pos/t3938/Parent.java +++ b/test/files/pos/t3938/Parent.java @@ -1,7 +1,7 @@ public class Parent<A>{ class I1 {} class I2 extends Parent.I1 {} - + // OKAY: class I3 extends I1 {} static class I4 {} diff --git a/test/files/pos/t3938/UseParent.scala b/test/files/pos/t3938/UseParent.scala index 3f4c2298d5..685d1a03a8 100644 --- a/test/files/pos/t3938/UseParent.scala +++ b/test/files/pos/t3938/UseParent.scala @@ -1,6 +1,6 @@ object UseParent { classOf[Parent[AnyRef]#I2] - + // OKAY classOf[Parent[AnyRef]#I3] classOf[Parent.I5] diff --git a/test/files/pos/t3943/Client_2.scala b/test/files/pos/t3943/Client_2.scala new file mode 100644 index 0000000000..650ac9b7a9 --- /dev/null +++ b/test/files/pos/t3943/Client_2.scala @@ -0,0 +1,7 @@ +object Test { + val x: Child = new Child + x.getInner.foo("meh") +// error: type mismatch; +// found : java.lang.String("meh") +// required: E +} diff --git a/test/files/pos/t3943/Outer_1.java b/test/files/pos/t3943/Outer_1.java new file mode 100644 index 0000000000..1d38c5e76b --- /dev/null +++ b/test/files/pos/t3943/Outer_1.java @@ -0,0 +1,14 @@ +class Outer<E> { + abstract class Inner { + abstract public void foo(E e); + } +} + +class Child extends Outer<String> { + // the implicit prefix for Inner is Outer<E> instead of Outer<String> + public Inner getInner() { + return new Inner() { + public void foo(String e) { System.out.println("meh "+e); } + }; + } +} diff --git a/test/files/pos/t3972.scala b/test/files/pos/t3972.scala index d6cbb3dfb7..5dfc10fcef 100644 --- a/test/files/pos/t3972.scala +++ b/test/files/pos/t3972.scala @@ -2,7 +2,7 @@ object CompilerCrash { def main(args: Array[String]) { args match { case Array("a", a @ _*) => { } // The code compiles fine if this line is commented out or "@ _*" is deleted or this line is swapped for the next line - case Array("b") => { } // The code compiles fine if this line is commented out + case Array("b") => { } // The code compiles fine if this line is commented out case Array("c", c) => { 0 // The code compiles fine if this line is commented out } diff --git a/test/files/pos/t4020.scala b/test/files/pos/t4020.scala index 8a758d53f7..f976460191 100644 --- a/test/files/pos/t4020.scala +++ b/test/files/pos/t4020.scala @@ -14,11 +14,11 @@ class B { def mthd(foo: a2.Foo) = { foo match { case a2.Foo2(i) => i - - // Note: This case is impossible. In fact, scalac + + // Note: This case is impossible. In fact, scalac // will (correctly) report an error if it is uncommented, // but a warning if it is commented. - + // case a1.Foo1(i) => i } } diff --git a/test/files/pos/t4070.scala b/test/files/pos/t4070.scala index 29c8d16e30..a9777f02ed 100644 --- a/test/files/pos/t4070.scala +++ b/test/files/pos/t4070.scala @@ -21,14 +21,14 @@ package b { /* // With crash below the clasess: -% scalac -Dscalac.debug.tvar ./a.scala +% scalac -Dscalac.debug.tvar ./a.scala [ create] ?_$1 ( In Foo#crash ) [ setInst] tv[Int] ( In Foo#crash, _$1=tv[Int] ) [ create] tv[Int] ( In Foo#crash ) [ clone] tv[Int] ( Foo#crash ) // With crash above the classes: -% scalac -Dscalac.debug.tvar ./a.scala +% scalac -Dscalac.debug.tvar ./a.scala [ create] ?tv ( In Foo#crash ) ./a.scala:2: error: Invalid type application in TypeVar: List(), List(Int) def crash(x: Dingus[_]): Unit = x match { case m: Bippy[tv] => () } diff --git a/test/files/pos/t4202.scala b/test/files/pos/t4202.scala index aca7d503ee..b2a0c0120a 100644 --- a/test/files/pos/t4202.scala +++ b/test/files/pos/t4202.scala @@ -2,7 +2,7 @@ object t4202_1 { () => { trait T { def t = () - } + } } } diff --git a/test/files/pos/t422.scala b/test/files/pos/t422.scala deleted file mode 100644 index cb3ba279d4..0000000000 --- a/test/files/pos/t422.scala +++ /dev/null @@ -1,17 +0,0 @@ -import scala.util.regexp.WordExp; -import scala.util.automata.WordBerrySethi; - -object BoolWordExp extends WordExp { - type _labelT = MyLabels; - type _regexpT = RegExp; - abstract class MyLabels extends Label ; - case class MyLabel(c:Char) extends MyLabels; -} - -object MyTranslator extends WordBerrySethi { - override val lang = BoolWordExp; - import lang._; - override protected def seenLabel( r:RegExp, i:Int, label: _labelT ): Unit = { - super.seenLabel(r,i,label) - } -} diff --git a/test/files/pos/t4220.scala b/test/files/pos/t4220.scala index 8fb999e345..98f2649767 100644 --- a/test/files/pos/t4220.scala +++ b/test/files/pos/t4220.scala @@ -1,4 +1,4 @@ -// don't know if our half-working sbt build is meaningfully +// don't know if our half-working sbt build is meaningfully // tested for #4220 with this, but it can't hurt. class Boo(a: Int = 0) diff --git a/test/files/pos/t4243.scala b/test/files/pos/t4243.scala index 5fa8665918..e6c66faff0 100644 --- a/test/files/pos/t4243.scala +++ b/test/files/pos/t4243.scala @@ -3,16 +3,16 @@ object wrap { - + trait DomainLike[@specialized(Int) A, +This <: Domain[A]] - + trait Domain[@specialized(Int) B] extends DomainLike[B, Domain[B]] - + trait IterableDomainLike[@specialized(Int) C, +This <: IterableDomain[C]] extends DomainLike[C, This] - + trait IterableDomain[@specialized(Int) D] extends Domain[D] with IterableDomainLike[D, IterableDomain[D]] - + } diff --git a/test/files/pos/t4266.scala b/test/files/pos/t4266.scala index 301cc264bc..222f65e970 100644 --- a/test/files/pos/t4266.scala +++ b/test/files/pos/t4266.scala @@ -1,21 +1,21 @@ object Test { - + trait Tensor2Like[ - @specialized(Int) A1, - +D1 <: DomainLike[A1], + @specialized(Int) A1, + +D1 <: DomainLike[A1], +D <: Product2DomainLike[D1] ] { def domain: D; - + def checkKey(k1: A1) { domain._1.contains(k1) } } - + trait DomainLike[A] { def contains(key: A): Boolean; } - + // trait DomainLike[@specialized(Int) A] { // def contains(key: A): Boolean; // } diff --git a/test/files/pos/t4269.scala b/test/files/pos/t4269.scala index 70f0471a9a..99a30785b4 100644 --- a/test/files/pos/t4269.scala +++ b/test/files/pos/t4269.scala @@ -1,5 +1,5 @@ -class A { - PartialFunction.condOpt(Nil) { - case items@List(_*) if true => +class A { + PartialFunction.condOpt(Nil) { + case items@List(_*) if true => } } diff --git a/test/files/pos/t4273.scala b/test/files/pos/t4273.scala index 9a942e8325..a4d37174ad 100644 --- a/test/files/pos/t4273.scala +++ b/test/files/pos/t4273.scala @@ -1,8 +1,8 @@ class A { implicit def compareComparables[T](x: T)(implicit ord: Ordering[T]) = new ord.Ops(x) - + class Bippy implicit val bippyOrdering = new Ordering[Bippy] { def compare(x: Bippy, y: Bippy) = util.Random.nextInt } - + (new Bippy) < (new Bippy) }
\ No newline at end of file diff --git a/test/files/pos/t4275.scala b/test/files/pos/t4275.scala index 183cb5155e..1938aceadc 100644 --- a/test/files/pos/t4275.scala +++ b/test/files/pos/t4275.scala @@ -1,6 +1,6 @@ object Test { def f = "abc".count(_ > 'a') - + class A { private val count: Int = 0 } diff --git a/test/files/pos/t430-feb09.scala b/test/files/pos/t430-feb09.scala index bba8996e4e..1499f32b7a 100644 --- a/test/files/pos/t430-feb09.scala +++ b/test/files/pos/t430-feb09.scala @@ -13,12 +13,12 @@ package c.scala { case class C[T]() } -// Doesn't compile: type Nothing is not a member of d.scala +// Doesn't compile: type Nothing is not a member of d.scala package d.scala.d { case class D[T]() } -// Doesn't compile: type Any is not a member of e.scala +// Doesn't compile: type Any is not a member of e.scala package e.scala { case class E[T >: Nothing]() } diff --git a/test/files/pos/t4351.check b/test/files/pos/t4351.check deleted file mode 100644 index cb5d407e13..0000000000 --- a/test/files/pos/t4351.check +++ /dev/null @@ -1 +0,0 @@ -runtime exception diff --git a/test/files/pos/t4351.scala b/test/files/pos/t4351.scala deleted file mode 100644 index 2d57588793..0000000000 --- a/test/files/pos/t4351.scala +++ /dev/null @@ -1,20 +0,0 @@ -object Test { - def main(args: Array[String]): Unit = { - try new BooleanPropImpl() value - catch { - case e: RuntimeException => println("runtime exception") - } - } -} - -trait Prop[@specialized(Boolean) +T] { - def value: T -} - -class PropImpl[+T] extends Prop[T] { - def value: T = scala.sys.error("") -} - -trait BooleanProp extends Prop[Boolean] - -class BooleanPropImpl() extends PropImpl[Boolean] with BooleanProp diff --git a/test/files/pos/t4365/a_1.scala b/test/files/pos/t4365/a_1.scala new file mode 100644 index 0000000000..a24b57772d --- /dev/null +++ b/test/files/pos/t4365/a_1.scala @@ -0,0 +1,18 @@ +import scala.collection._ + +trait SeqViewLike[+A, + +Coll, + +This <: SeqView[A, Coll] with SeqViewLike[A, Coll, Nothing]] + extends Seq[A] with GenSeqViewLike[A, Coll, Nothing] +{ + + trait Transformed[+B] extends super[GenSeqViewLike].Transformed[B] + + abstract class AbstractTransformed[+B] extends Seq[B] with Transformed[B] { + def underlying: Coll = error("") + } + + trait Reversed extends Transformed[A] with super[GenSeqViewLike].Reversed + + protected def newReversed: Transformed[A] = new AbstractTransformed[A] with Reversed +} diff --git a/test/files/pos/t4365/b_1.scala b/test/files/pos/t4365/b_1.scala new file mode 100644 index 0000000000..e1423813f1 --- /dev/null +++ b/test/files/pos/t4365/b_1.scala @@ -0,0 +1,24 @@ +import scala.collection._ + +trait GenSeqView0[+A, +Coll] + +trait GenSeqViewLike[+A, + +Coll, + +This <: GenSeqView0[A, Coll] with GenSeqViewLike[A, Coll, Nothing]] +extends GenSeq[A] { +self => + + trait Transformed[+B] { + def length: Int = 0 + def apply(idx: Int): B = error("") + } + + trait Reversed extends Transformed[A] { + def iterator: Iterator[A] = createReversedIterator + + private def createReversedIterator: Iterator[A] = { + self.foreach(_ => ()) + null + } + } +} diff --git a/test/files/pos/t443.scala b/test/files/pos/t443.scala index 5b5e3ea828..cdaefe9ecd 100644 --- a/test/files/pos/t443.scala +++ b/test/files/pos/t443.scala @@ -1,10 +1,10 @@ object Test { - def lookup(): Option[Pair[String, String]] = - ((null: Option[Pair[String, String]]) : @unchecked) match { - case Some(Pair(_, _)) => + def lookup(): Option[Tuple2[String, String]] = + ((null: Option[Tuple2[String, String]]) : @unchecked) match { + case Some((_, _)) => if (true) - Some(Pair(null, null)) + Some((null, null)) else lookup() match { case Some(_) => Some(null) diff --git a/test/files/pos/t4432.scala b/test/files/pos/t4432.scala index 09f4c2ab34..106312311a 100644 --- a/test/files/pos/t4432.scala +++ b/test/files/pos/t4432.scala @@ -9,7 +9,7 @@ object Main { } new A } - + def foo2 = { class B { val x = { @@ -38,5 +38,5 @@ object Main { } new D } - + } diff --git a/test/files/pos/t4457_1.scala b/test/files/pos/t4457_1.scala index 4442f28e4a..32edd6cfdc 100644 --- a/test/files/pos/t4457_1.scala +++ b/test/files/pos/t4457_1.scala @@ -15,7 +15,7 @@ object ImplicitConvAmbiguity2 { def aFunc[A](a: NN[A]) = new BB[A] def bFunc[T](e1: N[T]) = {} - + def typeMe1 { val x = aFunc(4F) bFunc(x) diff --git a/test/files/pos/t4501.scala b/test/files/pos/t4501.scala index dac2524024..40628f1a4b 100644 --- a/test/files/pos/t4501.scala +++ b/test/files/pos/t4501.scala @@ -6,7 +6,7 @@ class A { def f1 = foo(ListBuffer(), List()) def f2 = foo(ListBuffer(), ListBuffer()) def f3 = foo(List(), List()) - + // scalap // def f1 : scala.collection.Seq[scala.Nothing] = { /* compiled code */ } // def f2 : scala.collection.mutable.ListBuffer[scala.Nothing] = { /* compiled code */ } diff --git a/test/files/pos/t4579.scala b/test/files/pos/t4579.scala index 8951ec011f..cd1553f02a 100644 --- a/test/files/pos/t4579.scala +++ b/test/files/pos/t4579.scala @@ -190,10 +190,10 @@ object LispCaseClasses extends Lisp { def extendEnv(env: Environment, ps: List[String], args: List[Data]): Environment = - Pair(ps, args) match { - case Pair(List(), List()) => + (ps, args) match { + case (List(), List()) => env - case Pair(p :: ps1, arg :: args1) => + case (p :: ps1, arg :: args1) => extendEnv(env.extend(p, arg), ps1, args1) case _ => lispError("wrong number of arguments") @@ -381,10 +381,10 @@ object LispAny extends Lisp { def extendEnv(env: Environment, ps: List[String], args: List[Data]): Environment = - Pair(ps, args) match { - case Pair(List(), List()) => + (ps, args) match { + case (List(), List()) => env - case Pair(p :: ps1, arg :: args1) => + case (p :: ps1, arg :: args1) => extendEnv(env.extend(p, arg), ps1, args1) case _ => lispError("wrong number of arguments") diff --git a/test/files/pos/t460.scala b/test/files/pos/t460.scala index 466d06c2ad..3fc13e4dd0 100644 --- a/test/files/pos/t460.scala +++ b/test/files/pos/t460.scala @@ -1,8 +1,8 @@ object Bug460 { def testFun(x : Int, y : Int) = x + y - val fn = testFun _ - - fn(1, 2) // Ok + val fn = testFun _ + + fn(1, 2) // Ok (testFun(_, _))(1, 2) // Ok (testFun _).apply(1, 2) (testFun _)(1, 2) // Error! (but no longer) diff --git a/test/files/pos/t4603/S.scala b/test/files/pos/t4603/S.scala index 9e228195a4..c7d809d9f7 100644 --- a/test/files/pos/t4603/S.scala +++ b/test/files/pos/t4603/S.scala @@ -1,7 +1,7 @@ // S.scala class S extends J[AnyRef] -object Test { +object Test { def main(args:Array[String]) { J.f(classOf[S]) } diff --git a/test/files/pos/t4649.flags b/test/files/pos/t4649.flags new file mode 100644 index 0000000000..e8fb65d50c --- /dev/null +++ b/test/files/pos/t4649.flags @@ -0,0 +1 @@ +-Xfatal-warnings
\ No newline at end of file diff --git a/test/files/pos/t4649.scala b/test/files/pos/t4649.scala new file mode 100644 index 0000000000..0d6caa8d7a --- /dev/null +++ b/test/files/pos/t4649.scala @@ -0,0 +1,6 @@ +object Test { + // @annotation.tailrec + def lazyFilter[E](s: Stream[E], p: E => Boolean): Stream[E] = s match { + case h #:: t => if (p(h)) h #:: lazyFilter(t, p) else lazyFilter(t, p) + } +} diff --git a/test/files/pos/t4716.scala b/test/files/pos/t4716.scala index d4bd55c55b..ec29e8d2cb 100644 --- a/test/files/pos/t4716.scala +++ b/test/files/pos/t4716.scala @@ -2,7 +2,7 @@ -trait Bug2[@specialized(Int) +A] extends TraversableOnce[A] { +trait Bug2[@specialized(Int) +A] extends TraversableOnce[A] { def ++[B >: A](that: TraversableOnce[B]) = { lazy val it = that.toIterator it diff --git a/test/files/pos/t4717.scala b/test/files/pos/t4717.scala index 4acfe489cc..ed35a8ad87 100644 --- a/test/files/pos/t4717.scala +++ b/test/files/pos/t4717.scala @@ -6,13 +6,13 @@ trait Bug1[@specialized(Boolean) A] extends TraversableOnce[A] { - + def ++[B >: A](that: TraversableOnce[B]): Iterator[B] = new Iterator[B] { lazy val it = that.toIterator def hasNext = it.hasNext def next = it.next } - + } diff --git a/test/files/pos/t4744.flags b/test/files/pos/t4744.flags new file mode 100644 index 0000000000..ca20f55172 --- /dev/null +++ b/test/files/pos/t4744.flags @@ -0,0 +1 @@ +-Ybreak-cycles diff --git a/test/files/pos/t4744/Bar.scala b/test/files/pos/t4744/Bar.scala new file mode 100644 index 0000000000..1fb6d78973 --- /dev/null +++ b/test/files/pos/t4744/Bar.scala @@ -0,0 +1 @@ +class Bar { val quux = new Foo[java.lang.Integer]() } diff --git a/test/files/pos/t4744/Foo.java b/test/files/pos/t4744/Foo.java new file mode 100644 index 0000000000..6c764d0470 --- /dev/null +++ b/test/files/pos/t4744/Foo.java @@ -0,0 +1 @@ +public class Foo<T extends Comparable<? super T>> {} diff --git a/test/files/pos/t4760.scala b/test/files/pos/t4760.scala index 767e3847f4..d4407a86b4 100644 --- a/test/files/pos/t4760.scala +++ b/test/files/pos/t4760.scala @@ -19,7 +19,7 @@ class Test { import scala.util.Properties.lineSeparator } } - + // parses def f3 = { import scala._ diff --git a/test/files/pos/t4786.scala b/test/files/pos/t4786.scala new file mode 100644 index 0000000000..f0579142b8 --- /dev/null +++ b/test/files/pos/t4786.scala @@ -0,0 +1,24 @@ +trait Matrix[@specialized A, Repr[C] <: Matrix[C, Repr]] { // crash goes away if @specialize is removed + def duplicate(mb: MatrixBuilder[A, Repr]): Repr[A] = { + mb.zeros + } +} +trait DenseMatrix[@specialized A] extends Matrix[A, DenseMatrix] +trait DenseMatrixFlt extends DenseMatrix[Float] + +trait MatrixBuilder[@specialized A, Repr[C] <: Matrix[C, Repr]] { + def zeros: Repr[A] +} +object DenseFloatBuilder extends MatrixBuilder[Float, DenseMatrix] { + val zeros = new Object with DenseMatrixFlt + // Note: + // - in 2.9 crash goes away if the explicit type "DenseMatrixFlt" is assigned to "zeros" + // - in 2.9 crash goes away if DenseMatrixFlt is a class instead of a trait: + // val zeros = new DenseMatrixFlt +} + +object Test extends App { + val m1 = DenseFloatBuilder.zeros // in 2.9 crash goes away if explicit type "DenseMatrixFlt" is assigned to m1 + val m2 = m1.duplicate(DenseFloatBuilder) +} + diff --git a/test/files/pos/t4840.scala b/test/files/pos/t4840.scala index eefa3b2dee..bf44f71d7a 100644 --- a/test/files/pos/t4840.scala +++ b/test/files/pos/t4840.scala @@ -1,6 +1,6 @@ class Crashy { def g(): Option[Any] = None - + def crashy() = { for (_ <- g()) { (null: Any) match { diff --git a/test/files/pos/t4853.scala b/test/files/pos/t4853.scala index ed9b320434..c91f2d6b05 100644 --- a/test/files/pos/t4853.scala +++ b/test/files/pos/t4853.scala @@ -3,7 +3,7 @@ object Animal { } class Animal[A <: AwakeOrAsleep] { - def goToSleep[B >: A <: Awake]: Animal[Asleep] = new Animal[Asleep] + def goToSleep[B >: A <: Awake]: Animal[Asleep] = new Animal[Asleep] def wakeUp[B >: A <: Asleep]: Animal[Awake] = new Animal[Awake] } diff --git a/test/files/pos/t4859.scala b/test/files/pos/t4859.scala new file mode 100644 index 0000000000..284a39b7ab --- /dev/null +++ b/test/files/pos/t4859.scala @@ -0,0 +1,17 @@ +object O { + // error: C is not a legal prefix for a constructor + C().CC() + // but this works. + D().DD() +} + +case class C() { + case class CC() +} + +case class D() { + class DD() + object DD { + def apply() = new DD() + } +} diff --git a/test/files/pos/t4970b.scala b/test/files/pos/t4970b.scala new file mode 100644 index 0000000000..cf9a6a6ae9 --- /dev/null +++ b/test/files/pos/t4970b.scala @@ -0,0 +1,32 @@ +object Traits { + trait OuterClass[V <: OuterClass[V]#InnerClass] { + trait InnerClass {self: V => + def method = () + } + } + + trait SubOuterClass[T <: SubOuterClass[T]#SubInnerClass] extends OuterClass[T] { + trait SubInnerClass extends super.InnerClass {self: T => } + } + + trait SubOuterClass2[T <: SubOuterClass2[T]#SubInnerClass2] extends OuterClass[T] { + trait SubInnerClass2 extends super.InnerClass {self: InnerClass with T => } + } + +} + +// object Classes { +// class OuterClass[V <: OuterClass[V]#InnerClass] { +// class InnerClass {self: V => +// def method = () +// } +// } + +// class SubOuterClass[T <: SubOuterClass[T]#SubInnerClass] extends OuterClass[T] { +// class SubInnerClass extends super.InnerClass {self: T => } +// } + +// class SubOuterClass2[T <: SubOuterClass2[T]#SubInnerClass2] extends OuterClass[T] { +// class SubInnerClass2 extends super.InnerClass {self: InnerClass with T => } +// } +// } diff --git a/test/files/pos/t5022.scala b/test/files/pos/t5022.scala new file mode 100644 index 0000000000..b9a085fb35 --- /dev/null +++ b/test/files/pos/t5022.scala @@ -0,0 +1,22 @@ +class ForSomeVsUnapply { + def test { + def makeWrap: Wrap = ??? + def useRep[e](rep: (e, X[e])) = () + + val repUnapply = Wrap.unapply(makeWrap).get + useRep(repUnapply) // okay + + val Wrap(rep0) = makeWrap + useRep(rep0) // error + + val rep = makeWrap match { + case Wrap(r) => r + }; + + useRep(rep) // error + } +} + +class X[e] + +case class Wrap(rep: (e, X[e]) forSome { type e }) diff --git a/test/files/pos/t5031_2.scala b/test/files/pos/t5031_2.scala index ded3e82301..e51215db84 100644 --- a/test/files/pos/t5031_2.scala +++ b/test/files/pos/t5031_2.scala @@ -1,4 +1,4 @@ -package object t5031 { +package object t5031 { class ID } diff --git a/test/files/pos/t5120.scala b/test/files/pos/t5120.scala index 2c193d129d..86d4470bd5 100644 --- a/test/files/pos/t5120.scala +++ b/test/files/pos/t5120.scala @@ -1,13 +1,13 @@ -// An example extracted from SBT by Iulian -// that showed that the previous fix to t5120 +// An example extracted from SBT by Iulian +// that showed that the previous fix to t5120 // was too strict. class Test { class ScopedKey[T] class Value[T] - class Compiled[T](val settings: Seq[Pair[T]]) - - case class Pair[T](k: ScopedKey[T], v: ScopedKey[T]) + class Compiled[T](val settings: Seq[Tuple2[T]]) + + case class Tuple2[T](k: ScopedKey[T], v: ScopedKey[T]) def transform[T](x: T) = x diff --git a/test/files/pos/t5127.scala b/test/files/pos/t5127.scala index e90b8d00a0..c562025302 100644 --- a/test/files/pos/t5127.scala +++ b/test/files/pos/t5127.scala @@ -4,5 +4,5 @@ package foo { class Parametrized1[T] extends Abstract1[Parametrized2[T]] { def bar(a: AnyRef) { a match { case d: Parametrized1[_] => println("ok") } } } - class Parametrized2[T] extends Parametrized1[T] with Abstract2[Parametrized2[T]] + class Parametrized2[T] extends Parametrized1[T] with Abstract2[Parametrized2[T]] } diff --git a/test/files/pos/t5156.scala b/test/files/pos/t5156.scala index e7912ef35c..52412ad4c1 100644 --- a/test/files/pos/t5156.scala +++ b/test/files/pos/t5156.scala @@ -1,6 +1,6 @@ sealed trait HList -final case class HCons[H, T <: HList](head : H, tail : T) extends HList -case object HNil extends HList +final case class HCons[H, T <: HList](head : H, tail : T) extends HList +case object HNil extends HList object HList { type ::[H, T <: HList] = HCons[H, T] diff --git a/test/files/pos/t516.scala b/test/files/pos/t516.scala index 735b259436..5561b7610c 100644 --- a/test/files/pos/t516.scala +++ b/test/files/pos/t516.scala @@ -4,7 +4,7 @@ import scala.collection.script._; class Members; object subscriber extends Subscriber[Message[String] with Undoable, Members] { - def notify(pub: Members, event: Message[String] with Undoable): Unit = + def notify(pub: Members, event: Message[String] with Undoable): Unit = (event: Message[String]) match { case Include(l, elem) => Console.println("ADD: " + elem); case Remove(l, elem) => Console.println("REM: " + elem); @@ -12,4 +12,3 @@ object subscriber extends Subscriber[Message[String] with Undoable, Members] { //case r : Remove [HasTree] with Undoable => } } - diff --git a/test/files/pos/t5165b/TestAnnotation_1.java b/test/files/pos/t5165b/TestAnnotation_1.java new file mode 100644 index 0000000000..02eb3f9d4c --- /dev/null +++ b/test/files/pos/t5165b/TestAnnotation_1.java @@ -0,0 +1,11 @@ +import java.lang.annotation.*; + +@Retention(RetentionPolicy.RUNTIME) +public @interface TestAnnotation_1 { + public enum TestEnumOne { A, B } + public enum TestEnumTwo { C, D } + + public TestEnumOne one(); + public TestEnumTwo two(); + public String strVal(); +} diff --git a/test/files/pos/t5165b/TestObject_3.scala b/test/files/pos/t5165b/TestObject_3.scala new file mode 100644 index 0000000000..eaf244e9d0 --- /dev/null +++ b/test/files/pos/t5165b/TestObject_3.scala @@ -0,0 +1,3 @@ + +object TestObject extends TestTrait + diff --git a/test/files/pos/t5165b/TestTrait_2.scala b/test/files/pos/t5165b/TestTrait_2.scala new file mode 100644 index 0000000000..ab4facebcd --- /dev/null +++ b/test/files/pos/t5165b/TestTrait_2.scala @@ -0,0 +1,3 @@ + +@TestAnnotation_1(one=TestAnnotation_1.TestEnumOne.A, two=TestAnnotation_1.TestEnumTwo.C, strVal="something") +trait TestTrait diff --git a/test/files/pos/t5178.scala b/test/files/pos/t5178.scala index 26c008d66f..ed0f814ec5 100644 --- a/test/files/pos/t5178.scala +++ b/test/files/pos/t5178.scala @@ -4,7 +4,7 @@ abstract class FileOps { trait DefaultFileOps { self: DefaultPath => - + override def withLock[R](start: Long = 5): Option[R] = None } diff --git a/test/files/pos/t5223.scala b/test/files/pos/t5223.scala index 0b2528e367..d81daa9907 100644 --- a/test/files/pos/t5223.scala +++ b/test/files/pos/t5223.scala @@ -2,5 +2,5 @@ import scala.reflect.runtime.universe._ object Foo extends App { reify{def printf(format: String, args: Any*): String = null } - reify{def printf(format: String, args: Any*): String = ("abc": @cloneable)} + reify{def printf(format: String, args: Any*): String = ("abc": @deprecated)} }
\ No newline at end of file diff --git a/test/files/pos/t5240.scala b/test/files/pos/t5240.scala index 2db689c27d..065d175f2f 100644 --- a/test/files/pos/t5240.scala +++ b/test/files/pos/t5240.scala @@ -5,7 +5,7 @@ package object foo { - + var labels: Array[_ <: String] = null - + } diff --git a/test/files/pos/t5317.scala b/test/files/pos/t5317.scala index 8c9c9d8222..052e84438c 100644 --- a/test/files/pos/t5317.scala +++ b/test/files/pos/t5317.scala @@ -2,11 +2,11 @@ object Test { trait S { type T; val x: AnyRef } trait A extends S { type T <: A; val x: A = null } trait B extends S { type T <: B; val x: B = null } - + val a = new A{} val b = new B{} val y = if (true) a else b - + // lub of y should allow for this println(y.x.x) } diff --git a/test/files/pos/t5399a.scala b/test/files/pos/t5399a.scala new file mode 100644 index 0000000000..4ebd85ad03 --- /dev/null +++ b/test/files/pos/t5399a.scala @@ -0,0 +1,19 @@ +class Foo { + trait Init[T] + class ScopedKey[T] extends Init[T] + + trait Setting[T] { + val key: ScopedKey[T] + } + + case class ScopedKey1[T](val foo: Init[T]) extends ScopedKey[T] + + val scalaHome: Setting[Option[String]] = null + val scalaVersion: Setting[String] = null + + def testPatternMatch(s: Setting[_]) { + s.key match { + case ScopedKey1(scalaHome.key | scalaVersion.key) => () + } + } +} diff --git a/test/files/pos/t5508-min-okay.scala b/test/files/pos/t5508-min-okay.scala new file mode 100644 index 0000000000..3a38b9c5ea --- /dev/null +++ b/test/files/pos/t5508-min-okay.scala @@ -0,0 +1,6 @@ +object Test { + trait NestedTrait { // must be nested and a trait + private val _st : Int = 0 // crashes if changed to private[this] + val escape = { () => _st } + } +} diff --git a/test/files/pos/t5508-min-okay2.scala b/test/files/pos/t5508-min-okay2.scala new file mode 100644 index 0000000000..935f28609c --- /dev/null +++ b/test/files/pos/t5508-min-okay2.scala @@ -0,0 +1,4 @@ +trait TopTrait { // must be nested and a trait + private[this] val _st : Int = 0 // crashes if TopTrait is not top level + val escape = { () => _st } +} diff --git a/test/files/pos/t5508-min.scala b/test/files/pos/t5508-min.scala new file mode 100644 index 0000000000..f59d2bd6ad --- /dev/null +++ b/test/files/pos/t5508-min.scala @@ -0,0 +1,6 @@ +object Test { + trait NestedTrait { // must be nested and a trait + private[this] val _st : Int = 0 // must be private[this] + val escape = { () => _st } + } +} diff --git a/test/files/pos/t5508.scala b/test/files/pos/t5508.scala new file mode 100644 index 0000000000..2b49758045 --- /dev/null +++ b/test/files/pos/t5508.scala @@ -0,0 +1,83 @@ +package TestTestters + +trait Test1 { + private[this] var _st : Int = 0 + def close : PartialFunction[Any,Any] = { + case x : Int => + _st = identity(_st) + } +} + +object Base1 { + trait Test2 { + private[this] var _st : Int = 0 + def close : PartialFunction[Any,Any] = { + case x : Int => + _st = identity(_st) + } + } +} + +class Test3 { + private[this] var _st : Int = 0 + def close : PartialFunction[Any,Any] = { + case x : Int => + _st = 1 + } +} + +object Base2 { + class Test4 { + private[this] var _st : Int = 0 + def close : PartialFunction[Any,Any] = { + case x : Int => + _st = 1 + } + } +} + +class Base3 { + trait Test5 { + private[this] var _st : Int = 0 + def close : PartialFunction[Any,Any] = { + case x : Int => + _st = 1 + } + } +} + +object Base4 { + trait Test6 { + private[this] var _st : Int = 0 + def close : PartialFunction[Any,Any] = { + case x : Int => () + } + } +} + +object Base5 { + trait Test7 { + private[this] var _st : Int = 0 + def close = () => { + _st = 1 + } + } +} + +object Base6 { + class Test8 { + private[this] var _st : Int = 0 + def close = () => { + _st = 1 + } + } +} + +object Base7 { + trait Test9 { + var st : Int = 0 + def close = () => { + st = 1 + } + } +} diff --git a/test/files/pos/t5541.scala b/test/files/pos/t5541.scala index 39682a2fff..90e5e4130b 100644 --- a/test/files/pos/t5541.scala +++ b/test/files/pos/t5541.scala @@ -27,7 +27,7 @@ object HASkipList { def asBranch : Branch[ S, A ] = this } } -sealed trait HASkipList[ S <: Sys[ S ], @specialized( Int ) A ] +sealed trait HASkipList[ S <: Sys[ S ], @specialized( Int ) A ] class HASkipListView[ S <: Sys[ S ], A ]( private val l: HASkipList[ S, A ])( implicit system: S ) { import HASkipList.Node diff --git a/test/files/pos/t5580b.scala b/test/files/pos/t5580b.scala deleted file mode 100644 index d5a4a0a2b2..0000000000 --- a/test/files/pos/t5580b.scala +++ /dev/null @@ -1,19 +0,0 @@ -/** It's a pos test because it does indeed compile, - * not so much because I'm glad it does. Testing - * that error messages created and discarded during - * implicit search don't blow it up. - */ - -import scala.collection.mutable.WeakHashMap -import scala.collection.JavaConversions._ - -class bar { } - -class foo { - val map = WeakHashMap[AnyRef, collection.mutable.Map[bar, collection.mutable.Set[bar]]]() - - def test={ - val tmp:bar=null - if (map.get(tmp).isEmpty) map.put(tmp,collection.mutable.Set()) - } -} diff --git a/test/files/pos/t5606.scala b/test/files/pos/t5606.scala new file mode 100644 index 0000000000..2545271e32 --- /dev/null +++ b/test/files/pos/t5606.scala @@ -0,0 +1,9 @@ + + + + + + + + +case class CaseTest[_](someData:String) diff --git a/test/files/pos/t5639/Bar.scala b/test/files/pos/t5639/Bar.scala new file mode 100644 index 0000000000..f577500acd --- /dev/null +++ b/test/files/pos/t5639/Bar.scala @@ -0,0 +1,7 @@ +package pack.age + +import pack.age.Implicits._ + +object Quux { + def baz : Baz = 1 +} diff --git a/test/files/pos/t5639/Foo.scala b/test/files/pos/t5639/Foo.scala new file mode 100644 index 0000000000..1a07734a8e --- /dev/null +++ b/test/files/pos/t5639/Foo.scala @@ -0,0 +1,7 @@ +package pack.age + +class Baz + +object Implicits { + implicit def Baz(n: Int): Baz = new Baz +} diff --git a/test/files/pos/t5644/BoxesRunTime.java b/test/files/pos/t5644/BoxesRunTime.java index 241bf79ac8..74c4c6b4b9 100644 --- a/test/files/pos/t5644/BoxesRunTime.java +++ b/test/files/pos/t5644/BoxesRunTime.java @@ -1,6 +1,6 @@ /* __ *\ ** ________ ___ / / ___ Scala API ** -** / __/ __// _ | / / / _ | (c) 2006-2011, LAMP/EPFL ** +** / __/ __// _ | / / / _ | (c) 2006-2013, LAMP/EPFL ** ** __\ \/ /__/ __ |/ /__/ __ | http://scala-lang.org/ ** ** /____/\___/_/ |_/____/_/ | | ** ** |/ ** diff --git a/test/files/pos/t5692a/Macros_1.scala b/test/files/pos/t5692a/Macros_1.scala index 06b5a3de36..440e37d75d 100644 --- a/test/files/pos/t5692a/Macros_1.scala +++ b/test/files/pos/t5692a/Macros_1.scala @@ -1,6 +1,6 @@ -import scala.reflect.macros.Context +import scala.reflect.macros.blackbox.Context object Macros { - def impl[T](c: Context) = c.literalUnit + def impl[T](c: Context) = { import c.universe._; c.Expr[Unit](q"()") } def foo[T] = macro impl[T] }
\ No newline at end of file diff --git a/test/files/pos/t5692b/Macros_1.scala b/test/files/pos/t5692b/Macros_1.scala index b28d19f903..98fb882844 100644 --- a/test/files/pos/t5692b/Macros_1.scala +++ b/test/files/pos/t5692b/Macros_1.scala @@ -1,6 +1,6 @@ -import scala.reflect.macros.Context +import scala.reflect.macros.blackbox.Context object Macros { - def impl[T, U](c: Context) = c.literalUnit + def impl[T, U](c: Context) = { import c.universe._; c.Expr[Unit](q"()") } def foo[T, U] = macro impl[T, U] }
\ No newline at end of file diff --git a/test/files/pos/t5706.scala b/test/files/pos/t5706.scala index 20a8b255cc..6f0207366b 100644 --- a/test/files/pos/t5706.scala +++ b/test/files/pos/t5706.scala @@ -1,10 +1,15 @@ -import scala.reflect.macros.Context +import scala.reflect.macros.blackbox.{Context => BlackboxContext} +import scala.reflect.macros.whitebox.{Context => WhiteboxContext} class Logger { - def error(message: String) = macro Impls.error + def error1(message: String) = macro Impls.error1 + def error2(message: String) = macro Impls.error2 } object Impls { - type LoggerContext = Context { type PrefixType = Logger } - def error(c: LoggerContext)(message: c.Expr[String]): c.Expr[Unit] = ??? + type LoggerContext1 = BlackboxContext { type PrefixType = Logger } + def error1(c: LoggerContext1)(message: c.Expr[String]): c.Expr[Unit] = ??? + + type LoggerContext2 = WhiteboxContext { type PrefixType = Logger } + def error2(c: LoggerContext2)(message: c.Expr[String]): c.Expr[Unit] = ??? } diff --git a/test/files/pos/t573.scala b/test/files/pos/t573.scala index 7b9d377cd1..694d001e3c 100644 --- a/test/files/pos/t573.scala +++ b/test/files/pos/t573.scala @@ -16,15 +16,15 @@ import DirX._; abstract class Linked { type Node <: Node0; - + abstract class Node0 { self: Node => - + var next : Node = _; var prev : Node = _; - + def get(dir : Dir) = if (dir == BEFORE) prev; else next; - private def set(dir : Dir, node : Node) = + private def set(dir : Dir, node : Node) = if (dir == BEFORE) prev = node; else next = node; def link(dir : Dir, node : Node) = { @@ -34,7 +34,7 @@ abstract class Linked { node.set(dir.reverse, self); } - + def end(dir : Dir) : Node = { if (get(dir) == null) this; else get(dir).end(dir); diff --git a/test/files/pos/t5744/Macros_1.scala b/test/files/pos/t5744/Macros_1.scala index 288a88653d..6e2bf4825b 100644 --- a/test/files/pos/t5744/Macros_1.scala +++ b/test/files/pos/t5744/Macros_1.scala @@ -1,5 +1,5 @@ import scala.language.experimental.macros -import scala.reflect.macros.Context +import scala.reflect.macros.blackbox.Context object Macros { def foo[U: Numeric](x: U) = macro foo_impl[U] diff --git a/test/files/pos/t5760-pkgobj-warn/stalepkg_1.scala b/test/files/pos/t5760-pkgobj-warn/stalepkg_1.scala new file mode 100644 index 0000000000..ed4b731bb0 --- /dev/null +++ b/test/files/pos/t5760-pkgobj-warn/stalepkg_1.scala @@ -0,0 +1,11 @@ + +package object stalepkg { + class Foo +} + +package stalepkg { + object Test { + def main(args: Array[String]) { + } + } +} diff --git a/test/files/pos/t5760-pkgobj-warn/stalepkg_2.scala b/test/files/pos/t5760-pkgobj-warn/stalepkg_2.scala new file mode 100644 index 0000000000..9abcdbab17 --- /dev/null +++ b/test/files/pos/t5760-pkgobj-warn/stalepkg_2.scala @@ -0,0 +1,11 @@ + +package object stalepkg { +} + +package stalepkg { + class Foo + object Test { + def main(args: Array[String]) { + } + } +} diff --git a/test/files/pos/t577.scala b/test/files/pos/t577.scala index 236c1395e2..ede45399a0 100644 --- a/test/files/pos/t577.scala +++ b/test/files/pos/t577.scala @@ -1,15 +1,15 @@ trait PriorityTree { type Node <: BasicTreeNode; - + val top = initTree; top.next = (initTree); top.next.prev = (top); - + def initTree : Node; - - - + + + trait BasicTreeNode { private[PriorityTree] var next : Node = _; private[PriorityTree] var prev : Node = _; diff --git a/test/files/pos/t5809.scala b/test/files/pos/t5809.scala index 133e13c4ed..6101f546b3 100644 --- a/test/files/pos/t5809.scala +++ b/test/files/pos/t5809.scala @@ -1,5 +1,6 @@ package object foo { - implicit class PimpedInt(foo: Int) { + implicit class EnrichedInt(foo: Int) { def bar = ??? + def bippy = foo } -}
\ No newline at end of file +} diff --git a/test/files/pos/t5845.scala b/test/files/pos/t5845.scala new file mode 100644 index 0000000000..823c722c14 --- /dev/null +++ b/test/files/pos/t5845.scala @@ -0,0 +1,16 @@ +class Num[T] { + def mkOps = new Ops + class Ops { def +++(rhs: T) = () } +} + +class A { + implicit def infixOps[T, CC[X] <: Num[X]](lhs: T)(implicit num: CC[T]) = num.mkOps + implicit val n1 = new Num[Int] { } + println(5 +++ 5) +} + +class B { + implicit def infixOps[T, CC[X] <: Num[X]](lhs: T)(implicit num: CC[T]) : CC[T]#Ops = num.mkOps + implicit val n1 = new Num[Int] {} + println(5 +++ 5) +} diff --git a/test/files/pos/t5846.scala b/test/files/pos/t5846.scala index b06f5ac39c..05cabed6a0 100644 --- a/test/files/pos/t5846.scala +++ b/test/files/pos/t5846.scala @@ -4,7 +4,7 @@ /** Return the most general sorted map type. */ object Test extends App { - + val empty: collection.SortedMap[String, String] = collection.SortedMap.empty[String, String] - + } diff --git a/test/files/pos/t5853.scala b/test/files/pos/t5853.scala index 21d80206ab..2ebb6667dc 100644 --- a/test/files/pos/t5853.scala +++ b/test/files/pos/t5853.scala @@ -41,7 +41,7 @@ object Arrow { implicit final class ArrowAssoc[A](val __leftOfArrow: A) extends AnyVal { @inline def ->>[B](y: B): Tuple2[A, B] = Tuple2(__leftOfArrow, y) } - + def foo = 1 ->> 2 } @@ -50,6 +50,6 @@ object SpecArrow { implicit final class ArrowAssoc[A](val __leftOfArrow: A) extends AnyVal { @inline def ->> [@specialized(Int) B](y: B): Tuple2[A, B] = Tuple2(__leftOfArrow, y) } - + def foo = 1 ->> 2 } diff --git a/test/files/pos/t5877.scala b/test/files/pos/t5877.scala index c7827df99f..939013cd01 100644 --- a/test/files/pos/t5877.scala +++ b/test/files/pos/t5877.scala @@ -7,8 +7,8 @@ package foo { } package object foo { - // Crasher: No synthetics for method PimpedFoo2: synthetics contains - implicit class PimpedFoo2(value: Foo) { + // Crasher: No synthetics for method EnrichedFoo2: synthetics contains + implicit class EnrichedFoo2(value: Foo) { def huzzah = "" } } diff --git a/test/files/pos/t5877b.scala b/test/files/pos/t5877b.scala index 6b8cbd473e..43a2ea2f06 100644 --- a/test/files/pos/t5877b.scala +++ b/test/files/pos/t5877b.scala @@ -7,7 +7,7 @@ object Test { } object `package` { - implicit class PimpedFoo2(value: Foo) { + implicit class EnrichedFoo2(value: Foo) { def huzzah = "" } } diff --git a/test/files/pos/t5900a.scala b/test/files/pos/t5900a.scala new file mode 100644 index 0000000000..cb02f67fb2 --- /dev/null +++ b/test/files/pos/t5900a.scala @@ -0,0 +1,9 @@ +case class Transition[S](x: S) + +object C + +object Test { + (??? : Any) match { + case Transition(C) => + } +} diff --git a/test/files/pos/t5954a/A_1.scala b/test/files/pos/t5954a/A_1.scala new file mode 100644 index 0000000000..10ead0b1ca --- /dev/null +++ b/test/files/pos/t5954a/A_1.scala @@ -0,0 +1,6 @@ +package p1 { + object `package` { + implicit class Foo(a: Any) + object Foo + } +} diff --git a/test/files/pos/t5954a/B_2.scala b/test/files/pos/t5954a/B_2.scala new file mode 100644 index 0000000000..10ead0b1ca --- /dev/null +++ b/test/files/pos/t5954a/B_2.scala @@ -0,0 +1,6 @@ +package p1 { + object `package` { + implicit class Foo(a: Any) + object Foo + } +} diff --git a/test/files/pos/t5954b/A_1.scala b/test/files/pos/t5954b/A_1.scala new file mode 100644 index 0000000000..8465e8f8c6 --- /dev/null +++ b/test/files/pos/t5954b/A_1.scala @@ -0,0 +1,6 @@ +package p { + package object base { + class B + object B + } +} diff --git a/test/files/pos/t5954b/B_2.scala b/test/files/pos/t5954b/B_2.scala new file mode 100644 index 0000000000..f7e4704b3e --- /dev/null +++ b/test/files/pos/t5954b/B_2.scala @@ -0,0 +1,5 @@ +package p { + package object base { + case class B() + } +} diff --git a/test/files/pos/t5954c.flags b/test/files/pos/t5954c.flags new file mode 100644 index 0000000000..85d8eb2ba2 --- /dev/null +++ b/test/files/pos/t5954c.flags @@ -0,0 +1 @@ +-Xfatal-warnings diff --git a/test/files/pos/t5954c/A_1.scala b/test/files/pos/t5954c/A_1.scala new file mode 100644 index 0000000000..29ad9547a2 --- /dev/null +++ b/test/files/pos/t5954c/A_1.scala @@ -0,0 +1,18 @@ +package object A { + // these used to should be prevented by the implementation restriction + // but are now allowed + class B + object B + trait C + object C + case class D() + // all the rest of these should be ok + class E + object F + val g = "omg" + var h = "wtf" + def i = "lol" + type j = String + class K(val k : Int) extends AnyVal + implicit class L(val l : Int) +} diff --git a/test/files/pos/t5954c/B_2.scala b/test/files/pos/t5954c/B_2.scala new file mode 100644 index 0000000000..29ad9547a2 --- /dev/null +++ b/test/files/pos/t5954c/B_2.scala @@ -0,0 +1,18 @@ +package object A { + // these used to should be prevented by the implementation restriction + // but are now allowed + class B + object B + trait C + object C + case class D() + // all the rest of these should be ok + class E + object F + val g = "omg" + var h = "wtf" + def i = "lol" + type j = String + class K(val k : Int) extends AnyVal + implicit class L(val l : Int) +} diff --git a/test/files/pos/t5954d.flags b/test/files/pos/t5954d.flags new file mode 100644 index 0000000000..6ced0e7090 --- /dev/null +++ b/test/files/pos/t5954d.flags @@ -0,0 +1 @@ +-Xfatal-warnings -Xdev diff --git a/test/files/pos/t5954d/A_1.scala b/test/files/pos/t5954d/A_1.scala new file mode 100644 index 0000000000..8465e8f8c6 --- /dev/null +++ b/test/files/pos/t5954d/A_1.scala @@ -0,0 +1,6 @@ +package p { + package object base { + class B + object B + } +} diff --git a/test/files/pos/t5954d/B_2.scala b/test/files/pos/t5954d/B_2.scala new file mode 100644 index 0000000000..a4aa2eb587 --- /dev/null +++ b/test/files/pos/t5954d/B_2.scala @@ -0,0 +1,7 @@ +package p { + trait T { + class B + object B + } + package object base extends T +} diff --git a/test/files/pos/t599.scala b/test/files/pos/t599.scala index 53f205a26b..968e2deaee 100644 --- a/test/files/pos/t599.scala +++ b/test/files/pos/t599.scala @@ -16,4 +16,4 @@ abstract class FooA { val aaa: InnerB.this.B = doB aaa.xxx; } - } + } diff --git a/test/files/pos/t602.scala b/test/files/pos/t602.scala index 6062b976b6..18dd405645 100644 --- a/test/files/pos/t602.scala +++ b/test/files/pos/t602.scala @@ -10,5 +10,5 @@ case class Span[K <: Ordered[K]](low: Option[K], high: Option[K]) extends Functi case Span(Some(low), None) => (k >= low) case Span(None, Some(high)) => (k <= high) case _ => false - } + } } diff --git a/test/files/pos/t6047.scala b/test/files/pos/t6047.scala index bc5f856bd2..8c3dd18953 100644 --- a/test/files/pos/t6047.scala +++ b/test/files/pos/t6047.scala @@ -1,4 +1,4 @@ -import scala.reflect.macros.Context +import scala.reflect.macros.blackbox.Context import java.io.InputStream object Macros { diff --git a/test/files/pos/t6123-explaintypes-implicits.flags b/test/files/pos/t6123-explaintypes-implicits.flags new file mode 100644 index 0000000000..b36707c7cf --- /dev/null +++ b/test/files/pos/t6123-explaintypes-implicits.flags @@ -0,0 +1 @@ +-explaintypes diff --git a/test/files/pos/t6123-explaintypes-implicits.scala b/test/files/pos/t6123-explaintypes-implicits.scala new file mode 100644 index 0000000000..5242b443d5 --- /dev/null +++ b/test/files/pos/t6123-explaintypes-implicits.scala @@ -0,0 +1,13 @@ +object ImplicitBugReport { + trait Exp[+T] + trait CanBuildExp[-Elem, +To] extends (Exp[Elem] => To) + trait TraversableExp[T, ExpT <: Exp[T]] extends Exp[Traversable[T]] + + implicit def canBuildExp[T]: CanBuildExp[T, Exp[T]] = ??? + implicit def canBuildExpTrav[T, ExpT <: Exp[T]](implicit c: CanBuildExp[T, ExpT]): CanBuildExp[Traversable[T], TraversableExp[T, ExpT]] = ??? + def toExpTempl[T, That](t: T)(implicit c: CanBuildExp[T, That]): That = ??? + + def testBug() { + val a1 = toExpTempl(Seq(1, 2, 3, 5)) + } +} diff --git a/test/files/pos/t613.scala b/test/files/pos/t613.scala index 6e3841dada..e140833106 100644 --- a/test/files/pos/t613.scala +++ b/test/files/pos/t613.scala @@ -3,9 +3,9 @@ class Outer extends App { abstract class C { val x: Int } - val foo = new C { + val foo = new C { class I { - val z = y + val z = y } val x = (new I).z } diff --git a/test/files/pos/t616.scala b/test/files/pos/t616.scala index 074ad190da..bb91c732a6 100644 --- a/test/files/pos/t616.scala +++ b/test/files/pos/t616.scala @@ -1,7 +1,7 @@ object testImplicit { implicit def foo2bar(foo: Foo): Bar = foo.bar class Foo(val bar: Bar) { - def testCoercion = {val a = this; a.baz} // here, foo2bar is inferred by the compiler, as expected + def testCoercion = {val a = this; a.baz} // here, foo2bar is inferred by the compiler, as expected //def testCoercionThisImplicit = baz // --> error: not found: value baz def testCoercionThisExplicit: Any = this.baz // --> error: value baz is not a member of Foo } diff --git a/test/files/pos/t6162-inheritance.flags b/test/files/pos/t6162-inheritance.flags new file mode 100644 index 0000000000..c6bfaf1f64 --- /dev/null +++ b/test/files/pos/t6162-inheritance.flags @@ -0,0 +1 @@ +-deprecation -Xfatal-warnings diff --git a/test/files/pos/t6162-inheritance.scala b/test/files/pos/t6162-inheritance.scala new file mode 100644 index 0000000000..fca751edab --- /dev/null +++ b/test/files/pos/t6162-inheritance.scala @@ -0,0 +1,22 @@ +package scala.t6126 + +// Don't warn about inheritance in the same file. +// We might use that as a prelude to sealing a class. + +@deprecatedInheritance("`Foo` will be made final in a future version.", "2.10.0") +class Foo + +class SubFoo extends Foo + +@deprecatedInheritance() +trait T + +object SubT extends T + +@deprecatedInheritance() +trait S + +object O { + new S { + } +} diff --git a/test/files/pos/t6169/Exist.java b/test/files/pos/t6169/Exist.java new file mode 100644 index 0000000000..dfc6b36b33 --- /dev/null +++ b/test/files/pos/t6169/Exist.java @@ -0,0 +1,4 @@ +public class Exist<T extends String> { + // java helpfully re-interprets Exist<?> as Exist<? extends String> + public Exist<?> foo() { throw new RuntimeException(); } +}
\ No newline at end of file diff --git a/test/files/pos/t6169/ExistF.java b/test/files/pos/t6169/ExistF.java new file mode 100644 index 0000000000..70fabd74cf --- /dev/null +++ b/test/files/pos/t6169/ExistF.java @@ -0,0 +1,4 @@ +public class ExistF<T extends ExistF<T>> { + // java helpfully re-interprets ExistF<?> as ExistF<?0 extends ExistF<?0>> + public ExistF<?> foo() { throw new RuntimeException(); } +}
\ No newline at end of file diff --git a/test/files/pos/t6169/ExistIndir.java b/test/files/pos/t6169/ExistIndir.java new file mode 100644 index 0000000000..e66d1698c4 --- /dev/null +++ b/test/files/pos/t6169/ExistIndir.java @@ -0,0 +1,4 @@ +public class ExistIndir<T extends String, U extends T> { + // java helpfully re-interprets ExistIndir<?> as ExistIndir<? extends String> + public ExistIndir<?, ?> foo() { throw new RuntimeException(); } +} diff --git a/test/files/pos/t6169/OP.java b/test/files/pos/t6169/OP.java new file mode 100644 index 0000000000..15e4c5640f --- /dev/null +++ b/test/files/pos/t6169/OP.java @@ -0,0 +1 @@ +public abstract class OP<T> { } diff --git a/test/files/pos/t6169/Skin.java b/test/files/pos/t6169/Skin.java new file mode 100644 index 0000000000..780de1ee09 --- /dev/null +++ b/test/files/pos/t6169/Skin.java @@ -0,0 +1 @@ +public interface Skin<C extends Skinnable> { } diff --git a/test/files/pos/t6169/Skinnable.java b/test/files/pos/t6169/Skinnable.java new file mode 100644 index 0000000000..f91eaa30d8 --- /dev/null +++ b/test/files/pos/t6169/Skinnable.java @@ -0,0 +1,3 @@ +public interface Skinnable { + OP<Skin<?>> skinProperty(); +} diff --git a/test/files/pos/t6169/skinnable.scala b/test/files/pos/t6169/skinnable.scala new file mode 100644 index 0000000000..3ba2734526 --- /dev/null +++ b/test/files/pos/t6169/skinnable.scala @@ -0,0 +1,14 @@ +object ObjectProperty { + implicit def jfxObjectProperty2sfx[T](p: OP[T]) = new ObjectProperty[T](p) +} + +class ObjectProperty[T](val delegate: OP[T]) + +trait TestWildcardBoundInference { + def delegate: Skinnable + def skin: ObjectProperty[Skin[_ /* inferred: <: Skinnable */]] = ObjectProperty.jfxObjectProperty2sfx(delegate.skinProperty) + skin: ObjectProperty[Skin[_ <: Skinnable]] + + def skinCheckInference = delegate.skinProperty + skinCheckInference: ObjectProperty[Skin[_ <: Skinnable]] +}
\ No newline at end of file diff --git a/test/files/pos/t6169/t6169.scala b/test/files/pos/t6169/t6169.scala new file mode 100644 index 0000000000..37f42619ca --- /dev/null +++ b/test/files/pos/t6169/t6169.scala @@ -0,0 +1,7 @@ +class Test { + class MyExist extends ExistF[MyExist] + // SI-8197, SI-6169: java infers the bounds of existentials, so we have to as well now that SI-1786 is fixed... + def stringy: Exist[_ <: String] = (new Exist[String]).foo + def fbounded: (ExistF[t] forSome {type t <: ExistF[t] }) = (new MyExist).foo + def indir: ExistIndir[_ <: String, _ <: String] = (new ExistIndir[String, String]).foo +}
\ No newline at end of file diff --git a/test/files/pos/t6201.scala b/test/files/pos/t6201.scala index 366c1f26eb..d4e5bce03a 100644 --- a/test/files/pos/t6201.scala +++ b/test/files/pos/t6201.scala @@ -1,13 +1,19 @@ +// probably needs xml's weirdness to reproduce +// (specifically, _root_.scala.xml.Null being in the root package) +class Elem + class Test { + def elem: Elem = ??? + class Foo1 { - def must(x: scala.xml.Elem) = () + def must(x: Elem) = () } class Foo2 { def must(x: Int) = () } - implicit def toFoo1(s: scala.xml.Elem) = new Foo1() - implicit def toFoo2(s: scala.xml.Elem) = new Foo2() + implicit def toFoo1(s: Elem) = new Foo1() + implicit def toFoo2(s: Elem) = new Foo2() - def is: Unit = { (<a>{"a"}</a>).must(<a>{"b"}</a>) } + def is: Unit = { (elem) } }
\ No newline at end of file diff --git a/test/files/pos/t6210.scala b/test/files/pos/t6210.scala index 1ce8493872..855c621b8e 100644 --- a/test/files/pos/t6210.scala +++ b/test/files/pos/t6210.scala @@ -10,9 +10,9 @@ case class TBool() extends Ty object Foo { def checkExpr(ast: AExpr): Ty = { var astTy:Ty = ast match { - case AAssign(nm: String, v:AExpr) => TBool() + case AAssign(nm: String, v:AExpr) => TBool() - case AConstBool(v: Boolean) => TBool() + case AConstBool(v: Boolean) => TBool() case _ => throw new Exception(s"Unhandled case check(ast: ${ast.getClass})") } diff --git a/test/files/pos/t6221.scala b/test/files/pos/t6221.scala new file mode 100644 index 0000000000..34f02859f3 --- /dev/null +++ b/test/files/pos/t6221.scala @@ -0,0 +1,33 @@ +class MyFunc[-A, +B] extends (A => B) { def apply(x: A): B = ??? } + +class MyCollection[A] { + def map[B](f: MyFunc[A, B]): MyCollection[B] = new MyCollection[B] +} + +class OtherFunc[-A, +B] {} + +object Test { + implicit def functionToMyFunc[A, B](f: A => B): MyFunc[A, B] = new MyFunc // = new MyFunc[A,Nothing](); + + implicit def otherFuncToMyFunc[A, B](f: OtherFunc[A, B]): MyFunc[A, B] = new MyFunc // = new MyFunc[A,Nothing](); + + def main(args: Array[String]) { + val col = new MyCollection[Int] + + // Doesn't compile: error: missing parameter type for expanded function ((x$1) => x$1.toString) + println(col.map(_.toString)) + // scala.this.Predef.println(col.map[String](Test.this.functionToMyFunc[Int, String](((x$1: Int) => x$1.toString())))); + + // Doesn't compile: error: missing parameter type + println(col.map(x => x.toString)) + // scala.this.Predef.println(col.map[String](Test.this.functionToMyFunc[Int, String](((x: Int) => x.toString())))); + + // Does compile + println(col.map((x: Int) => x.toString)) + // scala.this.Predef.println(col.map[String](Test.this.functionToMyFunc[Int, String](((x: Int) => x.toString())))); + + // Does compile (even though type params of OtherFunc not given) + println(col.map(new OtherFunc)) + // scala.this.Predef.println(col.map[Nothing](Test.this.otherFuncToMyFunc[Any, Nothing](new OtherFunc[Any,Nothing]()))) + } +}
\ No newline at end of file diff --git a/test/files/pos/t6231.scala b/test/files/pos/t6231.scala new file mode 100644 index 0000000000..1e5b4e0e1a --- /dev/null +++ b/test/files/pos/t6231.scala @@ -0,0 +1,15 @@ +object Bug { + def bar(ev: Any) = { + trait X { + def qux = { () => ev } + } + new X {}.qux() + + // workaround + trait Y { + val ev2 = ev // manually capture `ev` so that `ev2` is added to the trait interface. + def qux = { () => ev2 } + } + } +} + diff --git a/test/files/pos/t6231b.scala b/test/files/pos/t6231b.scala new file mode 100644 index 0000000000..b4ddfe785b --- /dev/null +++ b/test/files/pos/t6231b.scala @@ -0,0 +1,8 @@ +class Test { + def f1(t: String) = { + trait T { + def xs = Nil map (_ => t) + } + () + } +} diff --git a/test/files/pos/t6260.flags b/test/files/pos/t6260.flags new file mode 100644 index 0000000000..2349d8294d --- /dev/null +++ b/test/files/pos/t6260.flags @@ -0,0 +1 @@ +-Ydelambdafy:inline diff --git a/test/files/pos/t6260.scala b/test/files/pos/t6260.scala new file mode 100644 index 0000000000..93b5448227 --- /dev/null +++ b/test/files/pos/t6260.scala @@ -0,0 +1,17 @@ +class Box[X](val x: X) extends AnyVal { + def map[Y](f: X => Y): Box[Y] = + ((bx: Box[X]) => new Box(f(bx.x)))(this) +} + +object Test { + def map2[X, Y](self: Box[X], f: X => Y): Box[Y] = + ((bx: Box[X]) => new Box(f(bx.x)))(self) + + def main(args: Array[String]) { + val f = (x: Int) => x + 1 + val g = (x: String) => x + x + + map2(new Box(42), f) + new Box("abc") map g + } +} diff --git a/test/files/pos/t6260a.scala b/test/files/pos/t6260a.scala new file mode 100644 index 0000000000..194294e981 --- /dev/null +++ b/test/files/pos/t6260a.scala @@ -0,0 +1,15 @@ +final class Option[+A](val value: A) extends AnyVal + +// Was: sandbox/test.scala:21: error: bridge generated for member method f: ()Option[A] in class Bar +// which overrides method f: ()Option[A] in class Foo" +abstract class Foo[A] { def f(): Option[A] } + class Bar[A] extends Foo[A] { def f(): Option[A] = ??? } + +// User reported this as erroneous but I couldn't reproduce with 2.10.{0,1,2,3} +// https://issues.scala-lang.org/browse/SI-6260?focusedCommentId=64764&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-64764 +// I suspect he whittled down the example too far. +class Wrapper(val value: Int) extends AnyVal +abstract class Test { def check(the: Wrapper): Boolean } +object T { + new Test { def check(the: Wrapper) = true } +} diff --git a/test/files/pos/t6260b.scala b/test/files/pos/t6260b.scala new file mode 100644 index 0000000000..73e2e58f73 --- /dev/null +++ b/test/files/pos/t6260b.scala @@ -0,0 +1,3 @@ + +class X(val value: Object) extends AnyVal { def or(alt: => X): X = this } +class Y { def f = new X("") or new X("") } diff --git a/test/files/pos/t6301.scala b/test/files/pos/t6301.scala new file mode 100644 index 0000000000..fa81bbfa77 --- /dev/null +++ b/test/files/pos/t6301.scala @@ -0,0 +1,9 @@ +trait LoadedOver[@specialized(Int) A] { + def foo(x: Any): A + def foo(xs: String): A +} + +object Test { + def loaded: AnyRef with LoadedOver[Int] = sys.error("") + loaded.foo("") +} diff --git a/test/files/pos/t6355pos.scala b/test/files/pos/t6355pos.scala new file mode 100644 index 0000000000..c0e740dd68 --- /dev/null +++ b/test/files/pos/t6355pos.scala @@ -0,0 +1,16 @@ +import scala.language.dynamics + +class A extends Dynamic { + def applyDynamic[T1](method: String)(x1: T1): Any = 1 + def applyDynamic[T1, T2](method: String)(x: T1, y: T2): Any = 2 + def applyDynamic[T1, T2, T3](method: String)(x: T1, y: T2, z: T3): Any = 3 +} + +object Test { + def main(args: Array[String]): Unit = { + val x = new A + println(x[Int](5)) + println(x[Int, String](5, "a")) + println(x[Int, String, Int](5, "a", 5)) + } +} diff --git a/test/files/pos/t640.scala b/test/files/pos/t640.scala index 55f61df8af..45608bc3d4 100644 --- a/test/files/pos/t640.scala +++ b/test/files/pos/t640.scala @@ -1,2 +1,2 @@ -@serializable class A -@serializable class B extends A +class A extends Serializable +class B extends A with Serializable diff --git a/test/files/pos/t6447.scala b/test/files/pos/t6447.scala new file mode 100644 index 0000000000..6ef69d4852 --- /dev/null +++ b/test/files/pos/t6447.scala @@ -0,0 +1,18 @@ +import scala.language.experimental.macros +import scala.reflect.macros.blackbox.Context + +class X { type T } + +object X { + // this works + def foo(x: X): x.T = macro fooImpl + def fooImpl(c: Context)(x: c.Expr[X]): c.Expr[x.value.T] = ??? + + // this doesn't + def bar(x: X, y: X): (x.T, y.T) = macro barImpl + def barImpl(c: Context)(x: c.Expr[X], y: c.Expr[X]): c.Expr[(x.value.T, y.value.T)] = ??? + + // neither does this + def baz(x: X)(xs: List[x.T]): Unit = macro bazImpl + def bazImpl(c: Context)(x: c.Expr[X])(xs: c.Expr[List[x.value.T]]): c.Expr[Unit] = ??? +} diff --git a/test/files/pos/t6485a/Macros_1.scala b/test/files/pos/t6485a/Macros_1.scala index 85c2d5dbdb..570c987709 100644 --- a/test/files/pos/t6485a/Macros_1.scala +++ b/test/files/pos/t6485a/Macros_1.scala @@ -1,4 +1,4 @@ -import scala.reflect.macros.Context +import scala.reflect.macros.blackbox.Context object Macros { def crash(c: Context): c.Expr[Unit] = c.universe.reify(()) diff --git a/test/files/pos/t6485b/Test.scala b/test/files/pos/t6485b/Test.scala index 382df1c453..3b81c6f8ab 100644 --- a/test/files/pos/t6485b/Test.scala +++ b/test/files/pos/t6485b/Test.scala @@ -1,5 +1,5 @@ import scala.language.experimental.macros -import scala.reflect.macros.Context +import scala.reflect.macros.blackbox.Context final class Ops[T](val x: T) extends AnyVal { def f = macro Macros.crash diff --git a/test/files/pos/t651.scala b/test/files/pos/t651.scala index 44d20ad580..c146446af9 100644 --- a/test/files/pos/t651.scala +++ b/test/files/pos/t651.scala @@ -4,12 +4,12 @@ trait Test3 { trait MatchableImpl { trait MatchImpl; } - + trait BracePairImpl { trait BraceImpl extends MatchableImpl { private object MyMatch1 extends MatchImpl; protected def match0 : MatchImpl = MyMatch1; - + } } } diff --git a/test/files/pos/t6516.scala b/test/files/pos/t6516.scala index c004055de2..2980d83eb6 100644 --- a/test/files/pos/t6516.scala +++ b/test/files/pos/t6516.scala @@ -1,5 +1,5 @@ import scala.language.experimental.macros -import scala.reflect.macros.Context +import scala.reflect.macros.blackbox.Context import scala.collection.TraversableLike // This one compiles @@ -11,7 +11,7 @@ object Test { // This one doesn't object Test2 { - type Ctx = scala.reflect.macros.Context + type Ctx = scala.reflect.macros.blackbox.Context type Alias[T, CC[_]] = Ctx { type PrefixType = TraversableLike[T, CC[T]] } def f() = macro f_impl diff --git a/test/files/pos/t6574.scala b/test/files/pos/t6574.scala new file mode 100644 index 0000000000..59c1701eb4 --- /dev/null +++ b/test/files/pos/t6574.scala @@ -0,0 +1,19 @@ +class Bad[X, Y](val v: Int) extends AnyVal { + def vv = v + @annotation.tailrec final def foo[Z](a: Int)(b: String) { + this.foo[Z](a)(b) + } + + @annotation.tailrec final def differentReceiver { + {(); new Bad[X, Y](0)}.differentReceiver + } + + @annotation.tailrec final def dependent[Z](a: Int)(b: String): b.type = { + this.dependent[Z](a)(b) + } +} + +class HK[M[_]](val v: Int) extends AnyVal { + def hk[N[_]]: Unit = if (false) hk[M] else () +} + diff --git a/test/files/pos/t6624.scala b/test/files/pos/t6624.scala index 1a92b92d53..44554c59c7 100644 --- a/test/files/pos/t6624.scala +++ b/test/files/pos/t6624.scala @@ -10,7 +10,7 @@ object Test { val klist: KCons[Option, KCons[Option, KCons[Option, KNil[Nothing]]]] = ??? // crashes with - // "Exception in thread "main" scala.reflect.internal.Types$TypeError: value _1 is not a member + // "Exception in thread "main" scala.reflect.internal.Types$TypeError: value _1 is not a member // of KCons[Option,KCons[Option,KNil[Nothing]]]" klist match { case KCons(KCons(KCons(_))) => diff --git a/test/files/pos/t6664.scala b/test/files/pos/t6664.scala new file mode 100644 index 0000000000..7eb85f619d --- /dev/null +++ b/test/files/pos/t6664.scala @@ -0,0 +1,4 @@ +final case class A(i: Int, s: String) { + protected def copy(s2: String): A = A(i, s2) + protected def copy(i2: Int): A = A(i2, s) +} diff --git a/test/files/pos/t6664b.scala b/test/files/pos/t6664b.scala new file mode 100644 index 0000000000..a622866838 --- /dev/null +++ b/test/files/pos/t6664b.scala @@ -0,0 +1,5 @@ +object T { + def A(s: String): A = new A(3, s) + def A(i: Int): A = A(i, "abc") + case class A(i: Int, s: String) +} diff --git a/test/files/pos/t6675.flags b/test/files/pos/t6675.flags index e8fb65d50c..d1b831ea87 100644 --- a/test/files/pos/t6675.flags +++ b/test/files/pos/t6675.flags @@ -1 +1 @@ --Xfatal-warnings
\ No newline at end of file +-deprecation -Xfatal-warnings
\ No newline at end of file diff --git a/test/files/pos/t6745.scala b/test/files/pos/t6745.scala new file mode 100644 index 0000000000..2ab8e6d39a --- /dev/null +++ b/test/files/pos/t6745.scala @@ -0,0 +1,4 @@ +class Bar(val i: Int) { + self: Any with AnyRef => + def this() = this(0) +} diff --git a/test/files/pos/t675.scala b/test/files/pos/t675.scala index c284c0e202..905d29d44a 100644 --- a/test/files/pos/t675.scala +++ b/test/files/pos/t675.scala @@ -7,7 +7,7 @@ trait T { } trait X { def foo : Foo = FOO_0; - } + } } object Test extends App { @@ -15,5 +15,3 @@ object Test extends App { val x = new t.X{} Console.println(x.foo) } - - diff --git a/test/files/pos/t6780.scala b/test/files/pos/t6780.scala new file mode 100644 index 0000000000..4a358046c6 --- /dev/null +++ b/test/files/pos/t6780.scala @@ -0,0 +1,20 @@ +object O { + implicit def i: Int = 0 +} + +import O._ + +trait Foo { + implicit val v1: Any + implicit def d1: Any + val v2: Any + implicit val v3: Any +} + +trait Bar1 extends Foo { + implicit val v1 = {implicitly[Int]; ()} // failed due to cycle in Context#implicits being broken with Nil. + def d1 = {implicitly[Int]; ()} // okay + implicit val v2 = {implicitly[Int]; ()} // okay + implicit val v3: Any = {implicitly[Int]; ()} // okay + +} diff --git a/test/files/pos/t6797.scala b/test/files/pos/t6797.scala new file mode 100644 index 0000000000..ef1afa1eb3 --- /dev/null +++ b/test/files/pos/t6797.scala @@ -0,0 +1,4 @@ +object Test extends App /* workaround: don't extend App */ { + private class Matcher(aParam: Option[String] = None) + private val stringMatcher = new Matcher +} diff --git a/test/files/pos/t6815.scala b/test/files/pos/t6815.scala new file mode 100644 index 0000000000..9244b3d353 --- /dev/null +++ b/test/files/pos/t6815.scala @@ -0,0 +1,17 @@ +trait U { + trait ValOrDefDefApi { + def name: Any + } + type ValOrDefDef <: ValOrDefDefApi + type ValDef <: ValOrDefDef with ValDefApi + trait ValDefApi extends ValOrDefDefApi { this: ValDef => } + val emptyValDef: ValDef // the result type is volatile +} + +object Test { + val u: U = ??? + + u.emptyValDef match { + case u.emptyValDef => // but we shouldn't let that stop us from treating it as a stable identifier pattern. + } +} diff --git a/test/files/pos/t6815_import.scala b/test/files/pos/t6815_import.scala new file mode 100644 index 0000000000..56f4358d59 --- /dev/null +++ b/test/files/pos/t6815_import.scala @@ -0,0 +1,16 @@ +trait U { + trait ValOrDefDefApi { + def name: Any + } + type ValOrDefDef <: ValOrDefDefApi + type ValDef <: ValOrDefDef with ValDefApi + trait ValDefApi extends ValOrDefDefApi { this: ValDef => } + val emptyValDef: ValDef // the result type is volatile +} + +object Test { + val u: U = ??? + + // but we shouldn't let that stop us from treating it as a stable identifier for import + import u.emptyValDef.name +} diff --git a/test/files/pos/t6897.scala b/test/files/pos/t6897.scala deleted file mode 100644 index a7a03a1d3a..0000000000 --- a/test/files/pos/t6897.scala +++ /dev/null @@ -1,6 +0,0 @@ -class A { - val html = (null: Any) match { - case 1 => <xml:group></xml:group> - case 2 => <p></p> - } -} diff --git a/test/files/pos/t690.scala b/test/files/pos/t690.scala index 3fcdca785d..a93c54f007 100644 --- a/test/files/pos/t690.scala +++ b/test/files/pos/t690.scala @@ -10,5 +10,5 @@ trait test { override def foo(t : T) = super.foo(t); } def t : T; - M0.foo(t); + M0.foo(t); } diff --git a/test/files/pos/t6948.scala b/test/files/pos/t6948.scala new file mode 100644 index 0000000000..12a1d7eaf2 --- /dev/null +++ b/test/files/pos/t6948.scala @@ -0,0 +1,10 @@ +object t6948 { + val rand = new scala.util.Random() + def a1 = rand.shuffle(0 to 5) + // Tis not to be + // def a2 = rand.shuffle(0 until 5) + def a3 = rand.shuffle(Vector(1, 2, 3)) + def a4 = rand.shuffle(scala.collection.Seq(1, 2, 3)) + def a5 = rand.shuffle(scala.collection.immutable.Seq(1, 2, 3)) + def a6 = rand.shuffle(scala.collection.mutable.Seq(1, 2, 3)) +} diff --git a/test/files/pos/t6963c.scala b/test/files/pos/t6963c.scala index 0b6b5c757f..d3c3616eb2 100644 --- a/test/files/pos/t6963c.scala +++ b/test/files/pos/t6963c.scala @@ -9,9 +9,9 @@ object Test { case _: Array[_] => true case _ => false } - + def f4(x: Any) = x.isInstanceOf[Traversable[_]] - + def f5(x1: Any, x2: Any, x3: AnyRef) = (x1, x2, x3) match { case (Some(_: Seq[_]), Nil, _) => 1 case (None, List(_: List[_], _), _) => 2 diff --git a/test/files/pos/t6966.scala b/test/files/pos/t6966.scala new file mode 100644 index 0000000000..23adc6d0d2 --- /dev/null +++ b/test/files/pos/t6966.scala @@ -0,0 +1,17 @@ +import Ordering.{Byte, comparatorToOrdering} +trait Format[T] +trait InputCache[T] +object CacheIvy { + implicit def basicInputCache[I](implicit fmt: Format[I], eqv: Equiv[I]): InputCache[I] = null + implicit def arrEquiv[T](implicit t: Equiv[T]): Equiv[Array[T]] = null + implicit def hNilCache: InputCache[HNil] = null + implicit def ByteArrayFormat: Format[Array[Byte]] = null + type :+:[H, T <: HList] = HCons[H,T] + implicit def hConsCache[H, T <: HList](implicit head: InputCache[H], tail: InputCache[T]): InputCache[H :+: T] = null + hConsCache[Array[Byte], HNil] +} + +sealed trait HList +sealed trait HNil extends HList +object HNil extends HNil +final class HCons[H, T <: HList](head : H, tail : T) extends HList
\ No newline at end of file diff --git a/test/files/pos/t6976/ImplicitBug_1.scala b/test/files/pos/t6976/ImplicitBug_1.scala index c9031bab2e..50bc247acc 100644 --- a/test/files/pos/t6976/ImplicitBug_1.scala +++ b/test/files/pos/t6976/ImplicitBug_1.scala @@ -1,4 +1,4 @@ -// This one is weird and nasty. Not sure if this is scalac or sbt +// This one is weird and nasty. Not sure if this is scalac or sbt // (tried with 0.12 & 0.12.2-RC2) bug. // // A level of indirection is required to trigger this bug. @@ -11,12 +11,12 @@ // 4. sbt run (it fails) // 5. Switch it back & sbt run. It still fails. // -// In this project sbt clean helps. However in a large project where this +// In this project sbt clean helps. However in a large project where this // bug was found compiler crashed even after doing sbt clean. The only -// way to work around this was to reference Exts object explicitly (C) in +// way to work around this was to reference Exts object explicitly (C) in // the source file using its implicit classes. -// Lets suppose this is a mega-trait combining all sorts of helper +// Lets suppose this is a mega-trait combining all sorts of helper // functionality. trait Support extends Exts diff --git a/test/files/pos/t7014/t7014.scala b/test/files/pos/t7014/t7014.scala index faec4c7740..7c73f700be 100644 --- a/test/files/pos/t7014/t7014.scala +++ b/test/files/pos/t7014/t7014.scala @@ -1,4 +1,3 @@ package t7014 import ThreadSafetyLevel.COMPLETELY_THREADSAFE // refer to annotation so it gets parsed -
\ No newline at end of file diff --git a/test/files/pos/t711.scala b/test/files/pos/t711.scala index 10b410e54e..4dd6040969 100644 --- a/test/files/pos/t711.scala +++ b/test/files/pos/t711.scala @@ -2,7 +2,7 @@ abstract class Component class Button extends Component { def sayHey: Unit = Console.println("Hey, I'm a button") } - + abstract class Origin { val delegate: Component } diff --git a/test/files/pos/t715.cmds b/test/files/pos/t715.cmds deleted file mode 100644 index 2836967fca..0000000000 --- a/test/files/pos/t715.cmds +++ /dev/null @@ -1,2 +0,0 @@ -scalac meredith_1.scala -scalac runner_2.scala diff --git a/test/files/pos/t715/meredith_1.scala b/test/files/pos/t715/meredith_1.scala deleted file mode 100644 index 8261b9881a..0000000000 --- a/test/files/pos/t715/meredith_1.scala +++ /dev/null @@ -1,98 +0,0 @@ -package com.sap.dspace.model.othello; - -import scala.xml._ - -trait XMLRenderer { - type T <: Any {def getClass() : java.lang.Class[_]} - val valueTypes = - List( - classOf[java.lang.Boolean], - classOf[java.lang.Integer], - classOf[java.lang.Float], - classOf[java.lang.String] - // more to come - ) - - def value2XML( - value : Object, - field : java.lang.reflect.Field, - pojo : T - ) : Node = { - value match { - case null => Text( "null" ) - case vUnmatched => - if (value.isInstanceOf[java.lang.Boolean]) - Text( value.asInstanceOf[java.lang.Boolean].toString ) - else if (value.isInstanceOf[java.lang.Integer]) - Text( value.asInstanceOf[java.lang.Integer].toString ) - else if (value.isInstanceOf[java.lang.Float]) - Text( value.asInstanceOf[java.lang.Float].toString ) - // else if (value.isInstanceOf[T]) - // pojo2XML( value.asInstanceOf[T] ) - else - <unmatchedType> - <theType> - {vUnmatched.getClass.toString} - </theType> - <theValue> - {vUnmatched.toString} - </theValue> - </unmatchedType> - } - } - - def field2XML( - field : java.lang.reflect.Field, - pojo : T - ) : Elem = { - - val accessible = field.isAccessible; - field.setAccessible( true ); - // BUGBUG lgm need to disambiguate on type and possibly make - // recursive call to pojo2XML - val fldValXML = value2XML( field.get( pojo ), field, pojo ); - field.setAccessible( accessible ); - - Elem( - null, - field.getName, - null, - TopScope, - fldValXML - ) - } - - def pojo2XML( pojo : T ) : Elem = { - val progeny = - for (field <- pojo.getClass.getDeclaredFields) - yield field2XML( field, pojo ); - - Elem( - null, - pojo.getClass.getName, - null, - TopScope, - progeny.asInstanceOf[Array[scala.xml.Node]] : _* - ) - } -} - -case class POJO2XMLRenderer( recurse : Boolean ) - extends XMLRenderer { - type T = java.io.Serializable - override def value2XML( - value : Object, - field : java.lang.reflect.Field, - pojo : java.io.Serializable - ) : Node = { - if (recurse) super.value2XML( value, field, pojo ) - else Text( value + "" ) - } -} - -object thePOJO2XMLRenderer extends POJO2XMLRenderer( true ) { -} - -object Test extends Application { - println(com.sap.dspace.model.othello.thePOJO2XMLRenderer) -} diff --git a/test/files/pos/t715/runner_2.scala b/test/files/pos/t715/runner_2.scala deleted file mode 100644 index 1e4f40d654..0000000000 --- a/test/files/pos/t715/runner_2.scala +++ /dev/null @@ -1,3 +0,0 @@ -object Test extends Application { - println(com.sap.dspace.model.othello.thePOJO2XMLRenderer) -} diff --git a/test/files/pos/t7228.scala b/test/files/pos/t7228.scala new file mode 100644 index 0000000000..5d936f6529 --- /dev/null +++ b/test/files/pos/t7228.scala @@ -0,0 +1,75 @@ +object AdaptWithWeaklyConformantType { + implicit class D(d: Double) { def double = d*2 } + + val x1: Int = 1 + var x2: Int = 2 + val x3 = 3 + var x4 = 4 + final val x5 = 5 + final var x6 = 6 + + def f1 = x1.double + def f2 = x2.double + def f3 = x3.double + def f4 = x4.double + def f5 = x5.double + def f6 = x6.double +} + +object AdaptAliasWithWeaklyConformantType { + implicit class D(d: Double) { def double = d*2 } + type T = Int + + val x1: T = 1 + var x2: T = 2 + val x3 = (3: T) + var x4 = (4: T) + final val x5 = (5: T) + final var x6 = (6: T) + + def f1 = x1.double + def f2 = x2.double + def f3 = x3.double + def f4 = x4.double + def f5 = x5.double + def f6 = x6.double +} + +object AdaptToAliasWithWeaklyConformantType { + type U = Double + implicit class D(d: U) { def double = d*2 } + + val x1: Int = 1 + var x2: Int = 2 + val x3 = (3: Int) + var x4 = (4: Int) + final val x5 = (5: Int) + final var x6 = (6: Int) + + def f1 = x1.double + def f2 = x2.double + def f3 = x3.double + def f4 = x4.double + def f5 = x5.double + def f6 = x6.double +} + +object AdaptAliasToAliasWithWeaklyConformantType { + type U = Double + type T = Int + implicit class D(d: U) { def double = d*2 } + + val x1: T = 1 + var x2: T = 2 + val x3 = (3: T) + var x4 = (4: T) + final val x5 = (5: T) + final var x6 = (6: T) + + def f1 = x1.double + def f2 = x2.double + def f3 = x3.double + def f4 = x4.double + def f5 = x5.double + def f6 = x6.double +} diff --git a/test/files/pos/t7264/A_1.scala b/test/files/pos/t7264/A_1.scala new file mode 100644 index 0000000000..044d0110a2 --- /dev/null +++ b/test/files/pos/t7264/A_1.scala @@ -0,0 +1,11 @@ +object Foo { + object Values { + implicit def fromInt(x: Int): Values = ??? + } + trait Values +} +final class Foo(name: String) { + def bar(values: Foo.Values): Bar = ??? +} + +trait Bar diff --git a/test/files/pos/t7264/B_2.scala b/test/files/pos/t7264/B_2.scala new file mode 100644 index 0000000000..a8af2e727e --- /dev/null +++ b/test/files/pos/t7264/B_2.scala @@ -0,0 +1,7 @@ +object Test { + // if the following line is uncommented, things compile + // type X = Foo.Values + + + def foo(f: Foo) = f.bar(0 /* : Foo.Values */) +} diff --git a/test/files/pos/t7294.scala b/test/files/pos/t7294.scala new file mode 100644 index 0000000000..ccac2b1400 --- /dev/null +++ b/test/files/pos/t7294.scala @@ -0,0 +1,6 @@ +object Test { + // no fruitless warning as Tuple2 isn't (yet) final. + // The corresponding `neg` test will treat it as final + // for the purposes of these tests under -Xfuture. + (1, 2) match { case Seq() => 0; case _ => 1 } +} diff --git a/test/files/pos/t7296.scala b/test/files/pos/t7296.scala new file mode 100644 index 0000000000..0c078d3657 --- /dev/null +++ b/test/files/pos/t7296.scala @@ -0,0 +1,6 @@ +object Test { + type A = Int + // Emits the implementation restriction but then proceeds to crash + // when creating the Foo.unapply. + case class Foo(a: A, b: A, c: A, d: A, e: A, f: A, g: A, h: A, i: A, j: A, k: A, l: A, m: A, n: A, o: A, p: A, q: A, r: A, s: A, t: A, u: A, v: A, w: A, x: A, y: A, Z: A) +} diff --git a/test/files/pos/t7315.flags b/test/files/pos/t7315.flags new file mode 100644 index 0000000000..d1b831ea87 --- /dev/null +++ b/test/files/pos/t7315.flags @@ -0,0 +1 @@ +-deprecation -Xfatal-warnings
\ No newline at end of file diff --git a/test/files/pos/t7315.scala b/test/files/pos/t7315.scala new file mode 100644 index 0000000000..0abcea2451 --- /dev/null +++ b/test/files/pos/t7315.scala @@ -0,0 +1,4 @@ +package scala.pack + +@deprecatedInheritance +class C[@specialized A]
\ No newline at end of file diff --git a/test/files/pos/t7322.scala b/test/files/pos/t7322.scala new file mode 100644 index 0000000000..006bf89e9f --- /dev/null +++ b/test/files/pos/t7322.scala @@ -0,0 +1,11 @@ + +package object t7322 { + implicit class X(sc: StringContext) { + def x_?(args: Any*) = "hi there" + } +} +package t7322 { + trait Y { + x_?"junk" // assume that if it compiles, it works + } +} diff --git a/test/files/pos/t7364/BadList.java b/test/files/pos/t7364/BadList.java new file mode 100644 index 0000000000..2692fa085f --- /dev/null +++ b/test/files/pos/t7364/BadList.java @@ -0,0 +1,3 @@ +public class BadList extends java.util.ArrayList { + public java.util.ArrayList foo() { return null; } +} diff --git a/test/files/pos/t7364/UseIt.scala b/test/files/pos/t7364/UseIt.scala new file mode 100644 index 0000000000..3847165323 --- /dev/null +++ b/test/files/pos/t7364/UseIt.scala @@ -0,0 +1,4 @@ +class UseIt { + val list = new BadList + list.foo() +} diff --git a/test/files/pos/t7364b/BadList_1.java b/test/files/pos/t7364b/BadList_1.java new file mode 100644 index 0000000000..fbb428adba --- /dev/null +++ b/test/files/pos/t7364b/BadList_1.java @@ -0,0 +1,3 @@ +public class BadList_1 extends java.util.ArrayList { + public java.util.ArrayList foo() { return null; } +} diff --git a/test/files/pos/t7364b/UseIt_2.scala b/test/files/pos/t7364b/UseIt_2.scala new file mode 100644 index 0000000000..06b50f6766 --- /dev/null +++ b/test/files/pos/t7364b/UseIt_2.scala @@ -0,0 +1,5 @@ +class UseIt { + val list = new BadList_1 + list.foo() + list.set(0, list.get(0)) +} diff --git a/test/files/pos/t7377/Macro_1.scala b/test/files/pos/t7377/Macro_1.scala index a0ec1d84af..b38687c8b3 100644 --- a/test/files/pos/t7377/Macro_1.scala +++ b/test/files/pos/t7377/Macro_1.scala @@ -1,7 +1,7 @@ import language.experimental._ -import reflect.macros.Context +import scala.reflect.macros.blackbox.Context object M { - def noopImpl[A](c: Context)(expr: c.Expr[A]): c.Expr[A] = c.Expr(c.typeCheck(c.resetLocalAttrs(expr.tree))) + def noopImpl[A](c: Context)(expr: c.Expr[A]): c.Expr[A] = c.Expr(c.typecheck(c.untypecheck(expr.tree))) def noop[A](expr: A): A = macro noopImpl[A] } diff --git a/test/files/pos/t7377b.flags b/test/files/pos/t7377b.flags deleted file mode 100644 index cb8324a345..0000000000 --- a/test/files/pos/t7377b.flags +++ /dev/null @@ -1 +0,0 @@ --Xoldpatmat
\ No newline at end of file diff --git a/test/files/pos/t7427.flags b/test/files/pos/t7427.flags new file mode 100644 index 0000000000..9c7d6400fc --- /dev/null +++ b/test/files/pos/t7427.flags @@ -0,0 +1 @@ +-Ydebug diff --git a/test/files/pos/t7427.scala b/test/files/pos/t7427.scala new file mode 100644 index 0000000000..cca52950d1 --- /dev/null +++ b/test/files/pos/t7427.scala @@ -0,0 +1,4 @@ +// Compiles with no options +// Compiles with -Ydebug -Ydisable-unreachable-prevention +// Crashes with -Ydebug +trait Bippy { 3 match { case 3 => } } diff --git a/test/files/pos/t7433.flags b/test/files/pos/t7433.flags new file mode 100644 index 0000000000..e8fb65d50c --- /dev/null +++ b/test/files/pos/t7433.flags @@ -0,0 +1 @@ +-Xfatal-warnings
\ No newline at end of file diff --git a/test/files/pos/t7433.scala b/test/files/pos/t7433.scala new file mode 100644 index 0000000000..f2109f4afa --- /dev/null +++ b/test/files/pos/t7433.scala @@ -0,0 +1,10 @@ +object Test { + def foo() { + try { + for (i <- 1 until 5) return + } catch { + case _: NullPointerException | _: RuntimeException => + // was: "catch block may intercept non-local return from method check" + } + } +} diff --git a/test/files/pos/t7461/Macros_1.scala b/test/files/pos/t7461/Macros_1.scala index 353dec66d7..ca84d75624 100644 --- a/test/files/pos/t7461/Macros_1.scala +++ b/test/files/pos/t7461/Macros_1.scala @@ -1,12 +1,12 @@ -import scala.reflect.macros.Context +import scala.reflect.macros.blackbox.Context import language.experimental.macros object Macros { def impl(c: Context) = { import c.universe._ - val wut = c.typeCheck(Select(Literal(Constant(10)), newTermName("$minus")), silent = true) + val wut = c.typecheck(Select(Literal(Constant(10)), newTermName("$minus")), silent = true) // println(showRaw(wut, printIds = true, printTypes = true)) - c.literalUnit + c.Expr[Unit](q"()") } def foo = macro impl diff --git a/test/files/pos/t7475a.scala b/test/files/pos/t7475a.scala new file mode 100644 index 0000000000..810ce9a05c --- /dev/null +++ b/test/files/pos/t7475a.scala @@ -0,0 +1,11 @@ +trait AbstractPublic { + def queue: Any +} +trait ConcretePrivate { + private val queue: Any = () +} + +abstract class Mix + extends ConcretePrivate with AbstractPublic { + final def queue: Any = () +} diff --git a/test/files/pos/t7475b.scala b/test/files/pos/t7475b.scala new file mode 100644 index 0000000000..a34743b8be --- /dev/null +++ b/test/files/pos/t7475b.scala @@ -0,0 +1,8 @@ +trait U { +} + +trait T { + type TT = Any with T with U + private val priv = 0 + (??? : TT).priv +} diff --git a/test/files/pos/t7475d.scala b/test/files/pos/t7475d.scala new file mode 100644 index 0000000000..497c2bf443 --- /dev/null +++ b/test/files/pos/t7475d.scala @@ -0,0 +1,11 @@ +trait T { + type TT = T with Any + private val priv = 0 + (??? : TT).priv +} + +trait U { + type UU = Any with U + private val priv = 0 + (??? : UU).priv +} diff --git a/test/files/pos/t7475e.scala b/test/files/pos/t7475e.scala new file mode 100644 index 0000000000..fbc965c4ca --- /dev/null +++ b/test/files/pos/t7475e.scala @@ -0,0 +1,13 @@ +trait U { + private val priv = 0 + type TT = U with T // should allow `priv` + (??? : TT).priv +} + +trait Base { + +} + +trait T extends Base { + +} diff --git a/test/files/pos/t7516/A_1.scala b/test/files/pos/t7516/A_1.scala index 3bba19966d..3bd477dcda 100644 --- a/test/files/pos/t7516/A_1.scala +++ b/test/files/pos/t7516/A_1.scala @@ -3,7 +3,7 @@ import scala.reflect._,macros._, scala.language.experimental.macros object A { def impl[T: c.WeakTypeTag](c: Context)(t: c.Expr[T]): c.Expr[List[T]] = { val r = c.universe.reify { List(t.splice) } - c.Expr[List[T]]( c.resetLocalAttrs(r.tree) ) + c.Expr[List[T]]( c.untypecheck(r.tree) ) } def demo[T](t: T): List[T] = macro impl[T] } diff --git a/test/files/pos/t7520.scala b/test/files/pos/t7520.scala new file mode 100644 index 0000000000..747f5278e5 --- /dev/null +++ b/test/files/pos/t7520.scala @@ -0,0 +1,10 @@ +class A { + val x: Singleton with this.type = this + val y: this.type = x +} + +class B { + val x = "" + val xs: x.type with Singleton = x + val y: x.type = xs +} diff --git a/test/files/pos/t757.scala b/test/files/pos/t757.scala index 7513910d8d..fd7624cee7 100644 --- a/test/files/pos/t757.scala +++ b/test/files/pos/t757.scala @@ -1,4 +1,4 @@ -package foo { +package foo { object C { def foo { Console.println("foo") @@ -6,7 +6,7 @@ package foo { } } -package bar { +package bar { object Main extends App { foo.C.foo } diff --git a/test/files/pos/t758.scala b/test/files/pos/t758.scala index 44769d54f1..160bf37172 100644 --- a/test/files/pos/t758.scala +++ b/test/files/pos/t758.scala @@ -1,7 +1,7 @@ trait A { type T; type M >: T } -trait B extends A { - val x : String; - val u : A { type T = B.this.T } ; - type T = x.type; - type M = u.M +trait B extends A { + val x : String; + val u : A { type T = B.this.T } ; + type T = x.type; + type M = u.M } diff --git a/test/files/pos/t7591/Demo.scala b/test/files/pos/t7591/Demo.scala new file mode 100644 index 0000000000..696d53585b --- /dev/null +++ b/test/files/pos/t7591/Demo.scala @@ -0,0 +1,83 @@ +/* NEST (New Scala Test) + * Copyright 2007-2013 LAMP/EPFL + * @author Paul Phillips + */ + +import scala.tools.cmd._ + +/** A sample command specification for illustrative purposes. + * First take advantage of the meta-options: + * + * // this command creates an executable runner script "demo" + * % scala scala.tools.cmd.Demo --self-update demo + * + * // this one creates and sources a completion file - note backticks + * % `./demo --bash` + * + * // and now you have a runner with working completion + * % ./demo --<tab> + * --action --defint --int + * --bash --defstr --str + * --defenv --self-update --unary + * + * The normal option configuration is plausibly self-explanatory. + */ +trait DemoSpec extends Spec with Meta.StdOpts with Interpolation { + lazy val referenceSpec = DemoSpec + lazy val programInfo = Spec.Info("demo", "Usage: demo [<options>]", "scala.tools.cmd.Demo") + + help("""Usage: demo [<options>]""") + heading("Unary options:") + + val optIsUnary = "unary" / "a unary option" --? ; + ("action" / "a body which may be run") --> println("Hello, I am the --action body.") + + heading("Binary options:") + val optopt = "str" / "an optional String" --| + val optoptInt = ("int" / "an optional Int") . --^[Int] + val optEnv = "defenv" / "an optional String" defaultToEnv "PATH" + val optDefault = "defstr" / "an optional String" defaultTo "default" + val optDefaultInt = "defint" / "an optional Int" defaultTo -1 + val optExpand = "alias" / "an option which expands" expandTo ("--int", "15") +} + +object DemoSpec extends DemoSpec with Property { + lazy val propMapper = new PropertyMapper(DemoSpec) + + type ThisCommandLine = SpecCommandLine + def creator(args: List[String]) = + new SpecCommandLine(args) { + override def errorFn(msg: String) = { println("Error: " + msg) ; sys.exit(0) } + } +} + +class Demo(args: List[String]) extends { + val parsed = DemoSpec(args: _*) +} with DemoSpec with Instance { + import java.lang.reflect._ + + def helpMsg = DemoSpec.helpMsg + def demoSpecMethods = this.getClass.getMethods.toList + private def isDemo(m: Method) = (m.getName startsWith "opt") && !(m.getName contains "$") && (m.getParameterTypes.isEmpty) + + def demoString(ms: List[Method]) = { + val longest = ms map (_.getName.length) max + val formatStr = " %-" + longest + "s: %s" + val xs = ms map (m => formatStr.format(m.getName, m.invoke(this))) + + xs mkString ("Demo(\n ", "\n ", "\n)\n") + } + + override def toString = demoString(demoSpecMethods filter isDemo) +} + +object Demo { + def main(args: Array[String]): Unit = { + val runner = new Demo(args.toList) + + if (args.isEmpty) + println(runner.helpMsg) + + println(runner) + } +} diff --git a/test/files/pos/t7649.scala b/test/files/pos/t7649.scala index a1b02f63f1..d70dc05ea4 100644 --- a/test/files/pos/t7649.scala +++ b/test/files/pos/t7649.scala @@ -1,10 +1,10 @@ object Test { - val c: reflect.macros.Context = ??? + val c: scala.reflect.macros.blackbox.Context = ??? import c.universe._ reify { // The lookup of the implicit WeakTypeTag[Any] // was triggering an unpositioned tree. - c.Expr[Any](Literal(Constant(0))).splice + c.Expr[Any](q"0").splice } import scala.reflect.ClassTag diff --git a/test/files/pos/t7668.scala b/test/files/pos/t7668.scala new file mode 100644 index 0000000000..222a13d039 --- /dev/null +++ b/test/files/pos/t7668.scala @@ -0,0 +1,12 @@ +trait Space { + type T + val x: T +} + +trait Extractor { + def extract(s: Space): s.T +} + +class Sub extends Extractor { + def extract(s: Space) = s.x +} diff --git a/test/files/pos/t767.scala b/test/files/pos/t767.scala index d4d7eae870..0c4067f022 100644 --- a/test/files/pos/t767.scala +++ b/test/files/pos/t767.scala @@ -4,7 +4,7 @@ abstract class AbsCell { private var value: T = init def get: T = value def set (x: T) { value = x } - + class Node { val foo = 1 } diff --git a/test/files/pos/t7688.scala b/test/files/pos/t7688.scala new file mode 100644 index 0000000000..5a846b97e9 --- /dev/null +++ b/test/files/pos/t7688.scala @@ -0,0 +1,7 @@ +import scala.reflect.macros._ + +class A[C <: Context with Singleton](position: C#Position) + +object A { + def apply(c: Context)(in: c.Tree): A[c.type] = new A(in.pos) +} diff --git a/test/files/pos/t7689.scala b/test/files/pos/t7689.scala new file mode 100644 index 0000000000..022e7ab7a0 --- /dev/null +++ b/test/files/pos/t7689.scala @@ -0,0 +1,7 @@ +object A { + // The default getter must have an explicit return type (List[_] => Int) + // This wasn't happening since e28c3edda4. That commit encoded upper/lower + // bounds of Any/Nothing as EmptyTree, which were triggering an .isEmpty + // check in Namers#TypeTreeSubstitutor + def x(f: List[_] => Int = _ => 3) = 9 +} diff --git a/test/files/pos/t7690.scala b/test/files/pos/t7690.scala new file mode 100644 index 0000000000..e8911a93e8 --- /dev/null +++ b/test/files/pos/t7690.scala @@ -0,0 +1,17 @@ +object A +trait B[T] + +object C { + implicit def notUsed[L[x]](in: L[Int]): B[L[Int]] = ??? + + class E(val ls: Int) { + def x(f: Int => Boolean): Boolean = f(ls) + } + implicit def isUsed(ls: Int): E = new E(ls) + + def amethod(in: Int): Boolean = + in.x { i => + import A._ + "asdf" == i.toString + } +}
\ No newline at end of file diff --git a/test/files/pos/t7753.scala b/test/files/pos/t7753.scala new file mode 100644 index 0000000000..93ad23f114 --- /dev/null +++ b/test/files/pos/t7753.scala @@ -0,0 +1,36 @@ +import scala.language.{ higherKinds, implicitConversions } + +trait Foo { type Out } + +trait SI { + val instance: Foo + type Out +} + +object Test { + def test { + def indirect(si: SI)(v: si.instance.Out) = v + + val foo: Foo { type Out = Int } = ??? + def conv(i: Foo): SI { type Out = i.Out; val instance: i.type } = ??? + + val converted = conv(foo) + + val v1: Int = indirect(converted)(23) // Okay (after refining the return type `instance` in the return type of `conv`) + /* + indirect(converted){(v: converted.instance.Out)converted.instance.Out}( + 23{Int(23)} + ){converted.instance.Out}; + */ + + val v2: Int = indirect(conv(foo))(23) // Used to fail as follows: + /* + indirect( + conv(foo){si.SI{type Out = foo.Out; val instance: si.Test.<refinement>.type}} + ){(v: si.instance.Out)si.instance.Out}( + 23{<error>} + ){<error>}; + */ + + } +} diff --git a/test/files/pos/t7776.scala b/test/files/pos/t7776.scala index 0340facd1b..a36497a7a1 100644 --- a/test/files/pos/t7776.scala +++ b/test/files/pos/t7776.scala @@ -1,5 +1,5 @@ import scala.language.experimental.macros -import scala.reflect.macros.Context +import scala.reflect.macros.blackbox.Context class MacroErasure { def app(f: Any => Any, x: Any): Any = macro MacroErasure.appMacro @@ -7,6 +7,14 @@ class MacroErasure { } object MacroErasure { - def appMacro(c: Context)(f: c.Expr[Any => Any], x: c.Expr[Any]): c.Expr[Any] = ??? - def appMacroA[A](c: Context)(f: c.Expr[A => Any], x: c.Expr[Any])(implicit tt: c.WeakTypeTag[A]): c.Expr[Any] = ??? + def appMacro(c: Context)( + f: c.Expr[Any => Any], x: c.Expr[Any]): c.Expr[Any] = { + import c.universe._ + c.Expr(q"$f($x)") + } + def appMacroA[A](c: Context)(f: c.Expr[A => Any], x: c.Expr[Any])( + implicit tt: c.WeakTypeTag[A]): c.Expr[Any] = { + import c.universe._ + c.Expr(q"$f[${tt.tpe}]($x)") + } }
\ No newline at end of file diff --git a/test/files/pos/t7785.scala b/test/files/pos/t7785.scala new file mode 100644 index 0000000000..1de693d137 --- /dev/null +++ b/test/files/pos/t7785.scala @@ -0,0 +1,34 @@ +import scala.language._ + +trait R[+Repr] + +trait TraversableOps { + implicit val R: R[Nothing] = ??? + + // Removing the implicit parameter in both fixes the crash + // removing it into one only gives a valid compiler error. + trait OpsDup1[Repr] { + def force(implicit bf: R[Repr]): Any + } + + trait Ops[Repr] extends OpsDup1[Repr] { + def force(implicit bf: R[Repr], dummy: DummyImplicit): Any + } + + implicit def ct2ops[T, C[+X]](t: C[T]): + Ops[C[T]] + + def force[T](t: Option[T]) = + // ct2ops(t).force + t.force //Fails compilation on 2.10.2. + + + /* To get a closer look at the crash: + :power + val foo = typeOf[C].member(TermName("foo")) + val pt = analyzer.HasMember(TermName("force")) + val instantiated = foo.info.finalResultType.instantiateTypeParams(foo.typeParams, foo.typeParams.map(TypeVar(_))) + instantiated <:< pt + */ + def foo[T, C[+X]]: Ops[C[T]] +} diff --git a/test/files/pos/t7788.scala b/test/files/pos/t7788.scala new file mode 100644 index 0000000000..81eada962b --- /dev/null +++ b/test/files/pos/t7788.scala @@ -0,0 +1,8 @@ +class Test { + // Predef used to define a method `conforms` to produce the implicit evidence below + // all this does is ensure we don't rename Predef.$conforms back to conforms when $ goes out of fashion + // or that there is some other way of generating the implicit value that witnesses T => U for T <: U + def conforms(x: Int, y: Int) = x < y + def foo[A](implicit ev: Int => A) = ??? + foo[Int] +}
\ No newline at end of file diff --git a/test/files/pos/t7834.scala b/test/files/pos/t7834.scala new file mode 100644 index 0000000000..fc9a0aa09d --- /dev/null +++ b/test/files/pos/t7834.scala @@ -0,0 +1,6 @@ +class S { val q = "" } + +class B extends S { + val x1: B.super.q.type = q + val x2: B.this.q.type = q +} diff --git a/test/files/pos/t7847/A.scala b/test/files/pos/t7847/A.scala new file mode 100644 index 0000000000..b6cce6ee79 --- /dev/null +++ b/test/files/pos/t7847/A.scala @@ -0,0 +1,5 @@ +case class Blah(a: Int) + +object Blah { + def apply2(a: Int) = apply(a) +} diff --git a/test/files/pos/t7847/B.java b/test/files/pos/t7847/B.java new file mode 100644 index 0000000000..c214f2dcab --- /dev/null +++ b/test/files/pos/t7847/B.java @@ -0,0 +1,10 @@ +public final class B { + void blah() { + Blah x = Blah.apply2(1); + Blah y = Blah.apply(1); + Blah z = Blah$.MODULE$.apply(1); + + scala.Option un1 = Blah.unapply(null); + scala.Option un2 = Blah$.MODULE$.unapply(null); + } +} diff --git a/test/files/pos/t7853-partial-function.scala b/test/files/pos/t7853-partial-function.scala new file mode 100644 index 0000000000..b09254e99a --- /dev/null +++ b/test/files/pos/t7853-partial-function.scala @@ -0,0 +1,7 @@ +object Test { + + def testCons: Unit = { + def x[A](a: PartialFunction[Any, A]): A = a(0) + val eval0 = x { case list: List[Int @unchecked] => list } + } +} diff --git a/test/files/pos/t7853.scala b/test/files/pos/t7853.scala new file mode 100644 index 0000000000..b0e9221e22 --- /dev/null +++ b/test/files/pos/t7853.scala @@ -0,0 +1,11 @@ +trait S { + trait T { + this: Any => + + trait U { + trait V { + S.this + } + } + } +} diff --git a/test/files/pos/t7864.flags b/test/files/pos/t7864.flags new file mode 100644 index 0000000000..7ccd56103a --- /dev/null +++ b/test/files/pos/t7864.flags @@ -0,0 +1 @@ +-Xlint
\ No newline at end of file diff --git a/test/files/pos/t7864.scala b/test/files/pos/t7864.scala new file mode 100644 index 0000000000..b2d8911a17 --- /dev/null +++ b/test/files/pos/t7864.scala @@ -0,0 +1,5 @@ +object Test { + val f = 0; + ({ toString; (x: Any) => x})("$f ") +} + diff --git a/test/files/pos/t788.scala b/test/files/pos/t788.scala index 3da88a2d26..19638dd170 100644 --- a/test/files/pos/t788.scala +++ b/test/files/pos/t788.scala @@ -4,7 +4,7 @@ trait Test { type Node <: NodeImpl; trait NodeImpl; type Expression <: Node with ExpressionImpl; - trait ExpressionImpl extends NodeImpl { + trait ExpressionImpl extends NodeImpl { def self : Expression; } type Named <: Node with NamedImpl; diff --git a/test/files/pos/t7919.scala b/test/files/pos/t7919.scala new file mode 100644 index 0000000000..64f261ec16 --- /dev/null +++ b/test/files/pos/t7919.scala @@ -0,0 +1,6 @@ + +object X { + val x = s"" + val y = true +} + diff --git a/test/files/pos/t7928.scala b/test/files/pos/t7928.scala new file mode 100644 index 0000000000..d9e29935b3 --- /dev/null +++ b/test/files/pos/t7928.scala @@ -0,0 +1,16 @@ +trait OuterTrait { + trait InnerTrait { + type Element + type Collection <: Iterable[Inner.Element] + } + + val Inner: InnerTrait + +} + +object OuterObject extends OuterTrait { + object Inner extends InnerTrait { + type Element = String + override type Collection = Seq[Inner.Element] + } +} diff --git a/test/files/pos/t7944.scala b/test/files/pos/t7944.scala new file mode 100644 index 0000000000..2fe2c5866d --- /dev/null +++ b/test/files/pos/t7944.scala @@ -0,0 +1,24 @@ +class M[+A, +B] + +object Test { + implicit class EitherOps[A, B](self: Either[A, B]) { + def disjunction: M[A, B] = null + } + + def foo = { + val l: Either[Int, Nothing] = Left[Int, Nothing](1) + + var ok = EitherOps(l).disjunction + + val runawayTypeVar = l.disjunction + + // reported bug: + // found : M[Int,B]; required: M[Int,Nothing] + val assign: M[Int, Nothing] = runawayTypeVar + + // variations on the theme, all failed before similarly. + val assign1: M[Int, Nothing] = {val temp = runawayTypeVar; temp} + val assign2: M[Int, String] = runawayTypeVar + val assign3: M[Int, Nothing] = {val temp = Left(1).disjunction; temp} + } +} diff --git a/test/files/pos/t7983.scala b/test/files/pos/t7983.scala new file mode 100644 index 0000000000..a583e538c5 --- /dev/null +++ b/test/files/pos/t7983.scala @@ -0,0 +1,31 @@ +package foo.bar.baz // the package nesting level material to this bug + +class DivergenceTest { + + trait ColumnBase[T] + + trait ShapeLevel + trait Flat extends ShapeLevel + trait Lower extends Flat + + class Shape2[Level <: ShapeLevel, -M, U] + + implicit final def columnBaseShape[Level >: Flat <: ShapeLevel, T, C <: ColumnBase[_]] + (implicit ev: C <:< ColumnBase[T] + ): Shape2[Level, C, T] = ??? + + implicit final def intShape[Level <: ShapeLevel, T]: Shape2[Level, Int, Int] = ??? + implicit final def tuple2Shape[Level <: ShapeLevel, M1,M2, U1,U2] + (implicit u1: Shape2[_ <: Level, M1, U1], + u2: Shape2[_ <: Level, M2, U2] + ): Shape2[Level, (M1,M2), (U1,U2)] = ??? + + def foo { + class Coffees extends ColumnBase[Int] + + def map1[F, T](f: F)(implicit shape: Shape2[_ <: Flat, F, T]) = ??? + + map1(((1, null: Coffees), 1)) + map1(((null: Coffees, 1), 1)) // fails with implicit divergence error in 2.11.0-M6, works under 2.10.3 + } +} diff --git a/test/files/pos/t7987/Macro_1.scala b/test/files/pos/t7987/Macro_1.scala new file mode 100644 index 0000000000..81f717b9c4 --- /dev/null +++ b/test/files/pos/t7987/Macro_1.scala @@ -0,0 +1,6 @@ +import scala.language.experimental._ + +object Macro { + def apply[A](a: A): A = macro impl[A] + def impl[A](c: reflect.macros.Context)(a: c.Expr[A]): c.Expr[A] = a +} diff --git a/test/files/pos/t7987/Test_2.scala b/test/files/pos/t7987/Test_2.scala new file mode 100644 index 0000000000..5896fdb517 --- /dev/null +++ b/test/files/pos/t7987/Test_2.scala @@ -0,0 +1,12 @@ +class C[T] { + def foo = 0 +} + +object Test { + implicit def AnyToC[T](a: Any): C[T] = new C[T] + // was: "macro not expanded" + Macro { + "".foo + () + } +} diff --git a/test/files/pos/t8001.check b/test/files/pos/t8001.check new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/test/files/pos/t8001.check diff --git a/test/files/pos/t8001.flags b/test/files/pos/t8001.flags new file mode 100644 index 0000000000..e8fb65d50c --- /dev/null +++ b/test/files/pos/t8001.flags @@ -0,0 +1 @@ +-Xfatal-warnings
\ No newline at end of file diff --git a/test/files/pos/t8001/Macros_1.scala b/test/files/pos/t8001/Macros_1.scala new file mode 100644 index 0000000000..3b80b88295 --- /dev/null +++ b/test/files/pos/t8001/Macros_1.scala @@ -0,0 +1,10 @@ +import scala.language.experimental.macros +import scala.reflect.macros.blackbox.Context + +object Macros { + def foo: Unit = macro impl + def impl(c: Context) = { + import c.universe._ + q"()" + } +}
\ No newline at end of file diff --git a/test/files/pos/t8001/Test_2.scala b/test/files/pos/t8001/Test_2.scala new file mode 100644 index 0000000000..6d72d96070 --- /dev/null +++ b/test/files/pos/t8001/Test_2.scala @@ -0,0 +1,4 @@ +object Test extends App { + Macros.foo + (): Unit +}
\ No newline at end of file diff --git a/test/files/pos/t8002-nested-scope.scala b/test/files/pos/t8002-nested-scope.scala new file mode 100644 index 0000000000..a2088bce7a --- /dev/null +++ b/test/files/pos/t8002-nested-scope.scala @@ -0,0 +1,20 @@ +// This test serves to capture the status quo, but should really +// emit an accessibiltiy error. + +// `Namers#companionSymbolOf` seems too lenient, and currently doesn't +// implement the same-scope checks mentioned: +// +// https://github.com/scala/scala/pull/2816#issuecomment-22555206 +// +class C { + def foo = { + class C { private def x = 0 } + + { + val a = 0 + object C { + new C().x + } + } + } +} diff --git a/test/files/pos/t8011.scala b/test/files/pos/t8011.scala new file mode 100644 index 0000000000..76bd7acd14 --- /dev/null +++ b/test/files/pos/t8011.scala @@ -0,0 +1,8 @@ +class ThingOps1(val x: String) extends AnyVal { + def fn[A]: Any = { + new X[A] { def foo(a: A) = a } + 0 + } +} + +trait X[B] { def foo(a: B): Any }
\ No newline at end of file diff --git a/test/files/pos/t8013.flags b/test/files/pos/t8013.flags new file mode 100644 index 0000000000..954eaba352 --- /dev/null +++ b/test/files/pos/t8013.flags @@ -0,0 +1 @@ +-Xfatal-warnings -Xlint diff --git a/test/files/pos/t8013/inpervolated_2.scala b/test/files/pos/t8013/inpervolated_2.scala new file mode 100644 index 0000000000..90e571b42c --- /dev/null +++ b/test/files/pos/t8013/inpervolated_2.scala @@ -0,0 +1,11 @@ +/* + * scalac: -Xfatal-warnings -Xlint + */ +package t8013 + +// unsuspecting user of perverse macro +trait User { + import Perverse.Impervolator + val foo = "bar" + Console println p"Hello, $foo" +} diff --git a/test/files/pos/t8013/inpervolator_1.scala b/test/files/pos/t8013/inpervolator_1.scala new file mode 100644 index 0000000000..612e1d727d --- /dev/null +++ b/test/files/pos/t8013/inpervolator_1.scala @@ -0,0 +1,33 @@ + +package t8013 + +// perverse macro to confuse Xlint + +import scala.language.experimental.macros +import scala.reflect.macros.blackbox.Context + +object Perverse { + + implicit class Impervolator(sc: StringContext) { + def p(args: Any*): String = macro pImpl + } + + // turn a nice interpolation into something that looks + // nothing like an interpolation or anything we might + // recognize, but which includes a "$id" in an apply. + def pImpl(c: Context)(args: c.Expr[Any]*): c.Expr[String] = { + import c.universe._ + val macroPos = c.macroApplication.pos + val text = macroPos.source.lineToString(macroPos.line - 1) substring macroPos.column + val tt = Literal(Constant(text)) + val tree = q"t8013.Perverse.pervert($tt)" + c.Expr[String](tree) + } + + // identity doesn't seem very perverse in this context + //def pervert(text: String): String = text + def pervert(text: String): String = { + Console println s"Perverting [$text]" + text + } +} diff --git a/test/files/pos/t802.scala b/test/files/pos/t802.scala index 124d4915bc..2dea7036d6 100644 --- a/test/files/pos/t802.scala +++ b/test/files/pos/t802.scala @@ -1,17 +1,17 @@ package test; trait Test { - abstract class BracesImpl { + abstract class BracesImpl { type Singleton; type Brace <: Singleton with BraceImpl; - trait BraceImpl; + trait BraceImpl; trait ForFile; } - abstract class ParensImpl extends BracesImpl { + abstract class ParensImpl extends BracesImpl { type Brace <: Singleton with BraceImpl; trait BraceImpl extends super.BraceImpl; } val parens : ParensImpl; - abstract class BracksImpl extends BracesImpl { + abstract class BracksImpl extends BracesImpl { type Brace <: Singleton with BraceImpl; trait BraceImpl extends super.BraceImpl; } diff --git a/test/files/pos/t8023.scala b/test/files/pos/t8023.scala new file mode 100644 index 0000000000..86824084ed --- /dev/null +++ b/test/files/pos/t8023.scala @@ -0,0 +1,22 @@ +import language._ + + +object Test { + def foo = (null: Any) match { + case a: A[k] => + // error: kinds of the type arguments (k) do not conform to the + // expected kinds of the type parameters (type K) in class B. + new B[k]() + } +} + +class A[K[L[_]]] + +class B[K[M[_]]] + + +object Test2 { + def foo = (null: Any) match { + case a: A[k] => new B[k]() // this one worked before as the info of `A` was complete + } +} diff --git a/test/files/pos/t8023b.scala b/test/files/pos/t8023b.scala new file mode 100644 index 0000000000..94c9b2f8d2 --- /dev/null +++ b/test/files/pos/t8023b.scala @@ -0,0 +1,2 @@ +// this fails with naive attempts to fix SI-8023 +trait T[A <: T[A]] diff --git a/test/files/pos/t8045.scala b/test/files/pos/t8045.scala new file mode 100644 index 0000000000..21154e386a --- /dev/null +++ b/test/files/pos/t8045.scala @@ -0,0 +1,17 @@ +object Test extends App { + case class Number(i: Int) + + object UnliftNumber { + def unapply(t: Any): Option[Number] = t match { + case i: Int => Some(Number(i)) + case _ => None + } + } + + def eval(expr: Any): Option[Number] = expr match { + case UnliftNumber(n) => Some(n) + case _ => None + } + + println(eval(1)) +} diff --git a/test/files/pos/t8046.scala b/test/files/pos/t8046.scala new file mode 100644 index 0000000000..304d70b6b8 --- /dev/null +++ b/test/files/pos/t8046.scala @@ -0,0 +1,20 @@ +trait One { + type Op[A] + type Alias[A] = Op[A] +} + +trait Two extends One { + trait Op[A] extends (A => A) + + // This compiles + class View1 extends Op[Int] { def apply(xs: Int) = xs } + + // ??? base class View2 not found in basetypes of class View2 + // ./a.scala:9: error: class View2 needs to be abstract, since \ + // method apply in trait Function1 of type (v1: T1)R is not defined + // (Note that T1 does not match Int) + // class View2 extends Alias[Int] { def apply(xs: Int) = xs } + // ^ + // one error found + class View2 extends Alias[Int] { def apply(xs: Int) = xs } +} diff --git a/test/files/pos/t8046b.scala b/test/files/pos/t8046b.scala new file mode 100644 index 0000000000..45b99fd7e0 --- /dev/null +++ b/test/files/pos/t8046b.scala @@ -0,0 +1,16 @@ +trait One { + type Op[A] + type Alias = Op[Int] +} + +trait Two extends One { + trait Op[A] extends M[A] + //(a: Alias) => a.value.toChar // okay + // (=> A).asSeenFrom(a.type, trait M): => Int + class View2 extends Alias { value.toChar } // toChar is not a member of type parameter A + // (=> A).asSeenFrom(View2.this.type, trait M): => A + + // override type Alias = Op[Int] // works with this +} + +trait M[A] { def value: A = sys.error("") } diff --git a/test/files/pos/t8046c.scala b/test/files/pos/t8046c.scala new file mode 100644 index 0000000000..f05b4c15b5 --- /dev/null +++ b/test/files/pos/t8046c.scala @@ -0,0 +1,19 @@ +trait One { + type Op[A] + type Alias[A] = Op[A] +} + +trait Three extends One { + trait Op[A] extends (A => A) + + def f1(f: Op[Int]) = f(5) + def f2(f: Alias[Int]) = f(5) + def f3[T <: Op[Int]](f: T) = f(5) + def f4[T <: Alias[Int]](f: T) = f(5) + // ./a.scala:12: error: type mismatch; + // found : Int(5) + // required: T1 + // def f4[T <: Alias[Int]](f: T) = f(5) + // ^ +} + diff --git a/test/files/pos/t8054.scala b/test/files/pos/t8054.scala new file mode 100644 index 0000000000..a7bb44b1ed --- /dev/null +++ b/test/files/pos/t8054.scala @@ -0,0 +1,31 @@ +trait D { + trait Manifest { + class Entry + } + + val M: Manifest + + def m: M.Entry = ??? +} + +object D1 extends D { + object M extends Manifest +} + +object D2 extends D { + val M: Manifest = ??? +} + +object Hello { + + def main(args: Array[String]) { + // 2.10.3 - ok + // 2.11.0-M7 - type mismatch; found : Seq[DB1.MANIFEST.Entry] + // required: Seq[DB1.MANIFEST.Entry] + val t1: D1.M.Entry = D1.m + + // 2.10.3 - ok + // 2.11.0-M7 - ok + val t2: D2.M.Entry = D2.m + } +} diff --git a/test/files/pos/t8064.flags b/test/files/pos/t8064.flags new file mode 100644 index 0000000000..281f0a10cd --- /dev/null +++ b/test/files/pos/t8064.flags @@ -0,0 +1 @@ +-Yrangepos diff --git a/test/files/pos/t8064/Client_2.scala b/test/files/pos/t8064/Client_2.scala new file mode 100644 index 0000000000..44106782c7 --- /dev/null +++ b/test/files/pos/t8064/Client_2.scala @@ -0,0 +1,8 @@ +object Test { + Macro { + def s = "" + Macro(s): @unchecked + ??? + } +} +// Was: a range position validation error (unpositioned tree)
\ No newline at end of file diff --git a/test/files/pos/t8064/Macro_1.scala b/test/files/pos/t8064/Macro_1.scala new file mode 100644 index 0000000000..9f1e6955b4 --- /dev/null +++ b/test/files/pos/t8064/Macro_1.scala @@ -0,0 +1,10 @@ +import language.experimental.macros +import scala.reflect.macros.blackbox.Context + +object Macro { + def apply(a: Any): Any = macro impl + + def impl(c: Context)(a: c.Tree): c.Tree = { + c.untypecheck(a) + } +} diff --git a/test/files/pos/t8064b.flags b/test/files/pos/t8064b.flags new file mode 100644 index 0000000000..281f0a10cd --- /dev/null +++ b/test/files/pos/t8064b.flags @@ -0,0 +1 @@ +-Yrangepos diff --git a/test/files/pos/t8064b/Client_2.scala b/test/files/pos/t8064b/Client_2.scala new file mode 100644 index 0000000000..a7bf2b9fb4 --- /dev/null +++ b/test/files/pos/t8064b/Client_2.scala @@ -0,0 +1,6 @@ +object Test { + Macro { + "".reverse + } +} +// Was: a range position validation error (tree with offset position enclosing tree with range position)
\ No newline at end of file diff --git a/test/files/pos/t8064b/Macro_1.scala b/test/files/pos/t8064b/Macro_1.scala new file mode 100644 index 0000000000..60996bfeca --- /dev/null +++ b/test/files/pos/t8064b/Macro_1.scala @@ -0,0 +1,11 @@ +import language.experimental.macros +import scala.reflect.macros.blackbox.Context + +object Macro { + def apply(a: Any): Any = macro impl + def impl(c: Context)(a: c.Tree): c.Tree = { + import c.universe._ + + q"{$a; true}" + } +} diff --git a/test/files/pos/t807.scala b/test/files/pos/t807.scala index ed73fe3f97..0eeb92ea24 100644 --- a/test/files/pos/t807.scala +++ b/test/files/pos/t807.scala @@ -6,7 +6,7 @@ trait Matcher { trait HasLinks { def link(b : Boolean) : Link = null; } - + } trait BraceMatcher extends Matcher { trait BracePair { diff --git a/test/files/pos/t8120.scala b/test/files/pos/t8120.scala new file mode 100644 index 0000000000..e06f38d5db --- /dev/null +++ b/test/files/pos/t8120.scala @@ -0,0 +1,9 @@ +object A { + class C { + def m(a: Nothing): Int = 0 + } + implicit class RichAny(a: Any) { + def m(a: Any): Int = 0 + } + (new C).m({ case (x, y) => x } : Any => Any) +} diff --git a/test/files/pos/t8128.scala b/test/files/pos/t8128.scala new file mode 100644 index 0000000000..b6f76691b0 --- /dev/null +++ b/test/files/pos/t8128.scala @@ -0,0 +1,15 @@ +object G { + def unapply(m: Any): Option[_] = Some("") +} + +object H { + def unapplySeq(m: Any): Option[Seq[_]] = None +} + +object Test { + (0: Any) match { + case G(v) => v + case H(v) => v + case _ => + } +} diff --git a/test/files/pos/t8132.scala b/test/files/pos/t8132.scala new file mode 100644 index 0000000000..b4d6fd9441 --- /dev/null +++ b/test/files/pos/t8132.scala @@ -0,0 +1,5 @@ +trait T { + protected def s: String +} + +case class G(override protected val s: String) extends T diff --git a/test/files/pos/t8134/A_1.scala b/test/files/pos/t8134/A_1.scala new file mode 100644 index 0000000000..32bce003fb --- /dev/null +++ b/test/files/pos/t8134/A_1.scala @@ -0,0 +1,4 @@ +// a.scala +package object pkg { + class AnyOps(val x: Any) extends AnyVal +} diff --git a/test/files/pos/t8134/B_2.scala b/test/files/pos/t8134/B_2.scala new file mode 100644 index 0000000000..32bce003fb --- /dev/null +++ b/test/files/pos/t8134/B_2.scala @@ -0,0 +1,4 @@ +// a.scala +package object pkg { + class AnyOps(val x: Any) extends AnyVal +} diff --git a/test/files/pos/t8152-performance.scala b/test/files/pos/t8152-performance.scala deleted file mode 100644 index b6d2ecd823..0000000000 --- a/test/files/pos/t8152-performance.scala +++ /dev/null @@ -1,13 +0,0 @@ -class HListBench { - - class A[H, T] - - type B[H, T] = A[H, T] - - // was okay - type T1 = A[Int, A[Int, A[Int, A[Int, A[Int, A[Int, A[Int, A[Int, A[Int, A[Int, A[Int, A[Int, A[Int, A[Int, A[Int, A[Int, A[Int, A[Int, A[Int, A[Int, A[Int, A[Int, A[Int, A[Int, A[Int, A[Int, A[Int, A[Int, Nothing]]]]]]]]]]]]]]]]]]]]]]]]]]]] - - // Took over a minute to validate variance in 2.10.3! - type T2 = B[Int, B[Int, B[Int, B[Int, B[Int, B[Int, B[Int, B[Int, B[Int, B[Int, B[Int, B[Int, B[Int, B[Int, B[Int, B[Int, B[Int, B[Int, B[Int, B[Int, B[Int, B[Int, B[Int, B[Int, B[Int, B[Int, B[Int, B[Int, Nothing]]]]]]]]]]]]]]]]]]]]]]]]]]]] - -}
\ No newline at end of file diff --git a/test/files/pos/t8157-2.10.flags b/test/files/pos/t8157-2.10.flags new file mode 100644 index 0000000000..94c8056747 --- /dev/null +++ b/test/files/pos/t8157-2.10.flags @@ -0,0 +1 @@ +-Xsource:2.10 diff --git a/test/files/pos/t8157-2.10.scala b/test/files/pos/t8157-2.10.scala new file mode 100644 index 0000000000..597585a96d --- /dev/null +++ b/test/files/pos/t8157-2.10.scala @@ -0,0 +1,5 @@ +object Test { // PolyTYped function default arg unicity check, + // fails in 2.11, authorized under -Xsource:2.10 + def foo(printer: Any, question: => String, show: Boolean = false)(op: => Any): Any = ??? + def foo[T](question: => String, show: Boolean)(op: => Any = ()): Any = ??? +} diff --git a/test/files/pos/t8170.scala b/test/files/pos/t8170.scala new file mode 100644 index 0000000000..b65f4b8572 --- /dev/null +++ b/test/files/pos/t8170.scala @@ -0,0 +1,27 @@ +object O { + trait X + trait B extends A { + override type T[F1 <: X] = F1 + } + trait A { + type T[F <: X] + } +} + +object Test { + import O._ + val a: B = ??? + val b: a.T[X] = ??? + b.ensuring(x => true) // trigger an implicit search +} + + +/* +this = {AliasArgsTypeRef@3004}"Test#7680.a#14899.T#14823[O#7702.X#7793]" + sym = type T#14823 + info = namer: [F#14824 <: O#7703.X#7793]F#14824 +result = {AbstractNoArgsTypeRef@3237}"F#24451" +tp = {PolyType@3235}"[F#14824 <: O#7703.X#7793]F#14824" +tparams = + (0) = {AbstractTypeSymbol@3247}"type F#24451" +*/
\ No newline at end of file diff --git a/test/files/pos/t8170b.scala b/test/files/pos/t8170b.scala new file mode 100644 index 0000000000..53036f6c8a --- /dev/null +++ b/test/files/pos/t8170b.scala @@ -0,0 +1,25 @@ +import language._ + +object ScalaZeee { + trait HFold[M[_], U] { + type Apply[E, A <: U] <: U + } + trait GenericCons[M[_], H, +T <: GenericList[M]] extends GenericList[M] { + val tail: T + override type Folded[N[X] >: M[X], U, F <: HFold[N, U]] = F#Apply[H, tail.Folded[N, U, F]] + } + val KNil: GenericList[Nothing] = ??? + sealed trait GenericList[+M[_]] { + type Folded[N[X] >: M[X], U, F <: HFold[N, U]] <: U + } +} + +object TypelevelUsage { + import ScalaZeee._ + type T = GenericCons[Some, String, KNil.type] + val klist1: T = ??? + type T2 = klist1.Folded[Option, Int, HFold[Option, Int]] + val count2: T2 = ??? + + count2.ensuring(x => true).toChar // trigger an implicit search +} diff --git a/test/files/pos/t8177.scala b/test/files/pos/t8177.scala new file mode 100644 index 0000000000..fe265f8d0a --- /dev/null +++ b/test/files/pos/t8177.scala @@ -0,0 +1,12 @@ +// exercise coevolveSym: SingleType with an underlying RefinedType +trait Thing { type A } +object IntThing extends Thing { type A = Int } + +// The following erroneously failed with error: method f overrides nothing. +// because asSeenFrom produced a typeref of the shape T'#A where A referred to a symbol defined in a T of times past +// More precisely, the TypeRef case of TypeMap's mapOver correctly modified prefix +// from having an underlying type of { type A = Ain } to { type A = Int }, with a new symbol for A (now with info Int), +// but the symbol in the outer type ref wasn't co-evolved (so it still referred to the { type A = AIn } underlying the old prefix) +// coEvolveSym used to only look at prefixes that were directly RefinedTypes, but they could also be SingleTypes with an underlying RefinedType +class View[AIn](val in: Thing { type A = AIn }) { def f(p: in.A): in.A = p } +class SubView extends View[Int](IntThing) { override def f(p: in.A): in.A = p } diff --git a/test/files/pos/t8177a.scala b/test/files/pos/t8177a.scala new file mode 100644 index 0000000000..7e2cfb386c --- /dev/null +++ b/test/files/pos/t8177a.scala @@ -0,0 +1,9 @@ +// exercise coevolveSym +trait Thing { type A; var p: A = _ } +class AA[T](final val x: Thing { type A = T }) { + def foo: x.A = ??? +} + +class B extends AA[Int](null) { + override def foo: B.this.x.A = super.foo +} diff --git a/test/files/pos/t8177b.scala b/test/files/pos/t8177b.scala new file mode 100644 index 0000000000..b7ed9342a3 --- /dev/null +++ b/test/files/pos/t8177b.scala @@ -0,0 +1,13 @@ +// exercise coevolveSym: SingleType with an underlying RefinedType, via a type alias +trait Thing { type A } +object IntThing extends Thing { type A = Int } +object ThingHolder { type Alias[AIn] = Thing { type A = AIn } } + +// The following erroneously failed with error: method f overrides nothing. +// because asSeenFrom produced a typeref of the shape T'#A where A referred to a symbol defined in a T of times past +// More precisely, the TypeRef case of TypeMap's mapOver correctly modified prefix +// from having an underlying type of { type A = Ain } to { type A = Int }, with a new symbol for A (now with info Int), +// but the symbol in the outer type ref wasn't co-evolved (so it still referred to the { type A = AIn } underlying the old prefix) +// coEvolveSym used to only look at prefixes that were directly RefinedTypes, but they could also be SingleTypes with an underlying RefinedType +class View[AIn](val in: ThingHolder.Alias[AIn]) { def f(p: in.A): in.A = p } +class SubView extends View[Int](IntThing) { override def f(p: in.A): in.A = p }
\ No newline at end of file diff --git a/test/files/pos/t8177d.scala b/test/files/pos/t8177d.scala new file mode 100644 index 0000000000..d15a05a359 --- /dev/null +++ b/test/files/pos/t8177d.scala @@ -0,0 +1,12 @@ +// exercise coevolveSym +trait HasElem { type A } +trait View[AIn] { + val tc: HasElem { type A = AIn } + def f2(p: tc.A): tc.A = p +} + +object Test { + val view: View[Int] = null + + view f2 5 // fails +} diff --git a/test/files/pos/t8177e.scala b/test/files/pos/t8177e.scala new file mode 100644 index 0000000000..cb1136ff11 --- /dev/null +++ b/test/files/pos/t8177e.scala @@ -0,0 +1,3 @@ +// exercise coevolveSym +trait T[A] { val foo: { type B = A } = ???; def bar(b: foo.B) = () } +object O extends T[Int] { bar(0) } diff --git a/test/files/pos/t8177g.scala b/test/files/pos/t8177g.scala new file mode 100644 index 0000000000..bb66d32021 --- /dev/null +++ b/test/files/pos/t8177g.scala @@ -0,0 +1,11 @@ +// exercise coevolveSym: ThisType +trait HasA { type A } +class AA[T] { + type HasAT[T] = HasA{ type A = T } + val x: HasAT[T] = ??? + def foo: x.A = ??? +} + +class B extends AA[Int] { + override def foo: B.this.x.A = super.foo +}
\ No newline at end of file diff --git a/test/files/pos/t8177h.scala b/test/files/pos/t8177h.scala new file mode 100644 index 0000000000..90b8a26ce7 --- /dev/null +++ b/test/files/pos/t8177h.scala @@ -0,0 +1,5 @@ +class Module { self => + type settingsType <: Any + final type commonModuleType = Module {type settingsType = self.settingsType} + def foo(s: self.type): commonModuleType = s +} diff --git a/test/files/pos/t8187.check b/test/files/pos/t8187.check new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/test/files/pos/t8187.check diff --git a/test/files/pos/t8187.scala b/test/files/pos/t8187.scala new file mode 100644 index 0000000000..99b10c6260 --- /dev/null +++ b/test/files/pos/t8187.scala @@ -0,0 +1,6 @@ +import scala.reflect.runtime.universe._ + +object Test extends App { + val tyn: TypeName = (??? : TypeSymbol).name + val ten: TermName = (??? : TermSymbol).name +}
\ No newline at end of file diff --git a/test/files/pos/t8207.scala b/test/files/pos/t8207.scala new file mode 100644 index 0000000000..680b40f379 --- /dev/null +++ b/test/files/pos/t8207.scala @@ -0,0 +1,6 @@ +class C { me => + import me.{toString => ts} + locally(this: me.type) + trait T + type X = me.T +} diff --git a/test/files/pos/t8209a.check b/test/files/pos/t8209a.check new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/test/files/pos/t8209a.check diff --git a/test/files/pos/t8209a/Macros_1.scala b/test/files/pos/t8209a/Macros_1.scala new file mode 100644 index 0000000000..17014b4744 --- /dev/null +++ b/test/files/pos/t8209a/Macros_1.scala @@ -0,0 +1,17 @@ +import scala.language.experimental.macros +import scala.language.implicitConversions +import scala.reflect.macros.blackbox.Context + +class A +object A { implicit def a2b(a: A): B = ??? } +class B +class C extends A + +object Macros { + def impl(c: Context) = { + import c.universe._ + q"new C" + } + + def foo: A = macro impl +}
\ No newline at end of file diff --git a/test/files/pos/t8209a/Test_2.scala b/test/files/pos/t8209a/Test_2.scala new file mode 100644 index 0000000000..e19d572f55 --- /dev/null +++ b/test/files/pos/t8209a/Test_2.scala @@ -0,0 +1,4 @@ +object Test extends App { + val a: A = Macros.foo + val b: B = Macros.foo +}
\ No newline at end of file diff --git a/test/files/pos/t8209b.check b/test/files/pos/t8209b.check new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/test/files/pos/t8209b.check diff --git a/test/files/pos/t8209b/Macros_1.scala b/test/files/pos/t8209b/Macros_1.scala new file mode 100644 index 0000000000..705f7d630c --- /dev/null +++ b/test/files/pos/t8209b/Macros_1.scala @@ -0,0 +1,17 @@ +import scala.language.experimental.macros +import scala.language.implicitConversions +import scala.reflect.macros.whitebox.Context + +class A +object A { implicit def a2b(a: A): B = ??? } +class B +class C extends A + +object Macros { + def impl(c: Context) = { + import c.universe._ + q"new C" + } + + def foo: A = macro impl +}
\ No newline at end of file diff --git a/test/files/pos/t8209b/Test_2.scala b/test/files/pos/t8209b/Test_2.scala new file mode 100644 index 0000000000..e19d572f55 --- /dev/null +++ b/test/files/pos/t8209b/Test_2.scala @@ -0,0 +1,4 @@ +object Test extends App { + val a: A = Macros.foo + val b: B = Macros.foo +}
\ No newline at end of file diff --git a/test/files/pos/t8219.scala b/test/files/pos/t8219.scala new file mode 100644 index 0000000000..e1653b6238 --- /dev/null +++ b/test/files/pos/t8219.scala @@ -0,0 +1,15 @@ +trait Equalizer[T] +trait Gen[A] + +class Broken { + implicit def const[T](x: T): Gen[T] = ??? + implicit def convertToEqualizer[T](left: T): Equalizer[T] = ??? + + def in(a: Any) = () + in { + import scala.None // any import will do.. + "" == "" // this no longer triggers the bug, as Object#== now overrides Any#== + } + + // We can still trigger the bug with a structural type, see pending/neg/t8219.scala +} diff --git a/test/files/pos/t8219b.scala b/test/files/pos/t8219b.scala new file mode 100644 index 0000000000..d55d3139e1 --- /dev/null +++ b/test/files/pos/t8219b.scala @@ -0,0 +1,49 @@ +trait Equalizer[T] +trait Gen[A] + +class Broken { + implicit def const[T](x: T): Gen[T] = ??? + implicit def convertToEqualizer[T](left: T): Equalizer[T] = ??? + + def in(a: Any) = () + in { + import scala.None // any import will do.. + "" == "" // no longer a problem, see pos/t8129.scala + } + + // We used to fall into the errant code path above when `Any#==` and `AnyRef#==` + // were overloaded. + // + // Real classes couldn't get away with that overloading; it would result in + // a compiler error because the variants would collapse into an overriding + // relationship after erasure. + // + // + // But, a structural type can! This triggers the same error, and served as + // a backstop for this test if we change the signatures of `AnyRef#==` to + // override `Any#==`. + type T = { + def a(a: AnyRef): Boolean + def a(a: Any): Boolean + } + + def t: T = ??? + + in { + import scala.None // any import will do.. + t.a("") + } + + // Or, we can get here with ambiguous implicits from the formal parameter + // type of the less specific overload to that of the more specific. + object T { + def foo(a: Any) = true + def foo(a: String) = true + } + in { + import scala.None + implicit def any2str1(a: Any) = "" + implicit def any2str2(a: Any) = "" + T.foo("") + } +} diff --git a/test/files/pos/t8223.scala b/test/files/pos/t8223.scala new file mode 100644 index 0000000000..52d6b0098e --- /dev/null +++ b/test/files/pos/t8223.scala @@ -0,0 +1,29 @@ +package p { + class ViewEnv[AIn] { + type A = AIn + class SubView { def has(x: A): Boolean = ??? } + def get: SubView = new SubView + } + + trait HasA { type A } + trait Indexable[R] extends HasA + class ArrayTC[AIn] extends Indexable[Array[AIn]] { type A = AIn } +} + +package object p { + implicit def arrayTypeClass[A] : ArrayTC[A] = new ArrayTC[A] + object intArrayTC extends ArrayTC[Int] + + type EnvAlias[W <: HasA] = ViewEnv[W#A] + type SubAlias[W <: HasA] = ViewEnv[W#A]#SubView + + def f0[R](xs: R)(implicit tc: Indexable[R]): ViewEnv[tc.A]#SubView = new ViewEnv[tc.A]() get + def f1[R](xs: R)(implicit tc: Indexable[R]): EnvAlias[tc.type]#SubView = new ViewEnv[tc.A]() get + def f2[R](xs: R)(implicit tc: Indexable[R]): SubAlias[tc.type] = new ViewEnv[tc.A]() get + + def g0 = f0(Array(1)) has 2 // ok + def g1 = f1(Array(1)) has 2 // ok + def g2 = f2(Array(1)) has 2 // "found: Int(2), required: tc.A" + def g3 = f2(Array(1))(new ArrayTC[Int]) has 2 // "found: Int(2), required: tc.A" + def g4 = f2(Array(1))(intArrayTC) has 2 // ok +} diff --git a/test/files/pos/t8224.scala b/test/files/pos/t8224.scala new file mode 100644 index 0000000000..2fae925df3 --- /dev/null +++ b/test/files/pos/t8224.scala @@ -0,0 +1,12 @@ +import language.higherKinds + +trait P [N1, +E1[X <: N1]] +trait PIn[N2, +E2[X <: N2]] extends P[Int,Any] + +trait EI extends PIn[Int, Nothing] +trait NI extends PIn[Int, Nothing] + +object Test { + val lub = if (true) ??? : EI else ??? : NI + val pin: PIn[Int,Nothing] = lub +} diff --git a/test/files/pos/t8237.scala b/test/files/pos/t8237.scala new file mode 100644 index 0000000000..005089079e --- /dev/null +++ b/test/files/pos/t8237.scala @@ -0,0 +1,29 @@ +import scala.language.higherKinds + +object TestExplicit { + trait TC[A] + def fTt[A,E[X] <: List[X]](a: A)(implicit tt: TC[E[A]]) = a + implicit def tc[T]: TC[T] = ??? + + // Typechecking results in SOE in TypeVar.isGround + fTt(1)(tc) + // fun = TestExplicit.this.fTt[Int, E](1) + // args = TestExplicit.this.tc[E[Int]] + // argTpes.head.instantiateTypeParams = TC[?E#1[Int]] + // formals.head.instantiateTypeParams = TC[?E#2[Int]] + // (where ?E#1 and ?E#2 as distinct AppliedTypeVars that resulted + // from separate applications of type args to the same HKTypeVar, ?E) + // + // As we check if the argument conforms to the formal, we would have + // AppliedTypeVars sharing the same TypeConstraints on the LHS and RHS, + // which leads to a cyclic constraint. +} + +object TestImplicit { + trait TC[A] + def fTt[A,E[X] <: List[X]](a: A)(implicit tt: TC[E[A]]) = a + implicit def tc[T]: TC[T] = ??? + + // Oddly enough, this one works. + fTt(1) +} diff --git a/test/files/pos/t8237b.scala b/test/files/pos/t8237b.scala new file mode 100644 index 0000000000..52bb310e8b --- /dev/null +++ b/test/files/pos/t8237b.scala @@ -0,0 +1,10 @@ +import scala.language.higherKinds +import scala.reflect.runtime.universe._ +object Test { + + def fTt[A,E[X]<:List[X]](a: A)(implicit tt: TypeTag[E[A]]) = a + + trait TC[A] + implicit def TCListInt[A]: TC[A] = ??? + fTt(1) +} diff --git a/test/files/pos/t8244d/InodeBase_1.java b/test/files/pos/t8244d/InodeBase_1.java new file mode 100644 index 0000000000..36c2123418 --- /dev/null +++ b/test/files/pos/t8244d/InodeBase_1.java @@ -0,0 +1,6 @@ +import java.util.concurrent.atomic.AtomicReferenceFieldUpdater; + +abstract class INodeBase_1<K, V> { + @SuppressWarnings("rawtypes") + public static final AtomicReferenceFieldUpdater<INodeBase_1, Object> updater = null; +} diff --git a/test/files/pos/t8244d/Test_2.scala b/test/files/pos/t8244d/Test_2.scala new file mode 100644 index 0000000000..cb39c9692c --- /dev/null +++ b/test/files/pos/t8244d/Test_2.scala @@ -0,0 +1,3 @@ +class INodeX[K, V] extends INodeBase_1[K, V] { + INodeBase_1.updater.set(this, null) +} diff --git a/test/files/pos/t8300-conversions-a.scala b/test/files/pos/t8300-conversions-a.scala new file mode 100644 index 0000000000..248a8b73b2 --- /dev/null +++ b/test/files/pos/t8300-conversions-a.scala @@ -0,0 +1,23 @@ +// cf. pos/t8300-conversions-b.scala +trait Universe { + type Symbol >: Null <: AnyRef with SymbolApi + trait SymbolApi + + type TypeSymbol >: Null <: Symbol with TypeSymbolApi + trait TypeSymbolApi extends SymbolApi + + type FreeTypeSymbol >: Null <: TypeSymbol with FreeTypeSymbolApi + trait FreeTypeSymbolApi extends TypeSymbolApi + + implicit class CompatibleSymbol(sym: Symbol) { + def asFreeType: FreeTypeSymbol = ??? + } +} + +object Test extends App { + val u: Universe = ??? + import u._ + + val sym: Symbol = ??? + sym.asFreeType +}
\ No newline at end of file diff --git a/test/files/pos/t8300-conversions-b.scala b/test/files/pos/t8300-conversions-b.scala new file mode 100644 index 0000000000..0524ee3683 --- /dev/null +++ b/test/files/pos/t8300-conversions-b.scala @@ -0,0 +1,23 @@ +// cf. pos/t8300-conversions-a.scala +trait Universe { + type Symbol >: Null <: AnyRef with SymbolApi + trait SymbolApi + + type TypeSymbol >: Null <: TypeSymbolApi with Symbol + trait TypeSymbolApi extends SymbolApi + + type FreeTypeSymbol >: Null <: FreeTypeSymbolApi with TypeSymbol + trait FreeTypeSymbolApi extends TypeSymbolApi + + implicit class CompatibleSymbol(sym: Symbol) { + def asFreeType: FreeTypeSymbol = ??? + } +} + +object Test extends App { + val u: Universe = ??? + import u._ + + val sym: Symbol = ??? + sym.asFreeType +}
\ No newline at end of file diff --git a/test/files/pos/t8300-overloading.scala b/test/files/pos/t8300-overloading.scala new file mode 100644 index 0000000000..ae9699ab86 --- /dev/null +++ b/test/files/pos/t8300-overloading.scala @@ -0,0 +1,16 @@ +// cf. neg/t8300-overloading.scala +trait Universe { + type Name >: Null <: AnyRef with NameApi + trait NameApi + + type TermName >: Null <: TermNameApi with Name + trait TermNameApi extends NameApi +} + +object Test extends App { + val u: Universe = ??? + import u._ + + def foo(name: Name) = ??? + def foo(name: TermName) = ??? +}
\ No newline at end of file diff --git a/test/files/pos/t8300-patmat-a.scala b/test/files/pos/t8300-patmat-a.scala new file mode 100644 index 0000000000..4421c0a15e --- /dev/null +++ b/test/files/pos/t8300-patmat-a.scala @@ -0,0 +1,20 @@ +// cf. pos/t8300-patmat-b.scala +trait Universe { + type Name >: Null <: AnyRef with NameApi + trait NameApi + + type TermName >: Null <: Name with TermNameApi + trait TermNameApi extends NameApi +} + +object Test extends App { + val u: Universe = ??? + import u._ + + locally { + val ScalaName: TermName = ??? + ??? match { + case ScalaName => ??? + } + } +}
\ No newline at end of file diff --git a/test/files/pos/t8300-patmat-b.scala b/test/files/pos/t8300-patmat-b.scala new file mode 100644 index 0000000000..c01aeb912d --- /dev/null +++ b/test/files/pos/t8300-patmat-b.scala @@ -0,0 +1,20 @@ +// cf. pos/t8300-patmat-a.scala +trait Universe { + type Name >: Null <: AnyRef with NameApi + trait NameApi + + type TermName >: Null <: TermNameApi with Name + trait TermNameApi extends NameApi +} + +object Test extends App { + val u: Universe = ??? + import u._ + + locally { + val ScalaName: TermName = ??? + ??? match { + case ScalaName => ??? + } + } +}
\ No newline at end of file diff --git a/test/files/pos/t8301.scala b/test/files/pos/t8301.scala new file mode 100644 index 0000000000..2d10864c57 --- /dev/null +++ b/test/files/pos/t8301.scala @@ -0,0 +1,19 @@ +trait Universe { + type Symbol >: Null <: AnyRef with SymbolApi + trait SymbolApi + + type TypeSymbol >: Null <: TypeSymbolApi with Symbol + trait TypeSymbolApi + + implicit class CompatibleSymbol(sym: Symbol) { + def asFreeType: TypeSymbol = ??? + } +} + +object Test extends App { + val u: Universe = ??? + import u._ + + val sym: Symbol = ??? + sym.asFreeType +} diff --git a/test/files/pos/t8301b.scala b/test/files/pos/t8301b.scala new file mode 100644 index 0000000000..5641547c18 --- /dev/null +++ b/test/files/pos/t8301b.scala @@ -0,0 +1,36 @@ +// cf. pos/t8300-patmat.scala +trait Universe { + type Name >: Null <: AnyRef with NameApi + trait NameApi + + type TermName >: Null <: TermNameApi with Name + trait TermNameApi extends NameApi +} + +object Test extends App { + val u: Universe = ??? + import u._ + + val ScalaName: TermName = ??? + locally { + + ??? match { + case Test.ScalaName => ??? + } + import Test.ScalaName._ + + ??? match { + case ScalaName => ??? + } + import ScalaName._ + + // both the pattern and import led to + // stable identifier required, but SN found. Note that value SN + // is not stable because its type, Test.u.TermName, is volatile. + val SN = ScalaName + ??? match { + case SN => ??? + } + import SN._ + } +} diff --git a/test/files/pos/t8306.flags b/test/files/pos/t8306.flags new file mode 100644 index 0000000000..49d036a887 --- /dev/null +++ b/test/files/pos/t8306.flags @@ -0,0 +1 @@ +-optimize diff --git a/test/files/pos/t8306.scala b/test/files/pos/t8306.scala new file mode 100644 index 0000000000..e04b054eb9 --- /dev/null +++ b/test/files/pos/t8306.scala @@ -0,0 +1,8 @@ +class Si8306 { + def foo: Int = 123 + lazy val extension: Int = + foo match { + case idx if idx != -1 => 15 + case _ => 17 + } +} diff --git a/test/files/pos/t8315.flags b/test/files/pos/t8315.flags new file mode 100644 index 0000000000..c926ad6493 --- /dev/null +++ b/test/files/pos/t8315.flags @@ -0,0 +1 @@ +-Yinline -Ydead-code diff --git a/test/files/pos/t8315.scala b/test/files/pos/t8315.scala new file mode 100644 index 0000000000..2f7742ed67 --- /dev/null +++ b/test/files/pos/t8315.scala @@ -0,0 +1,12 @@ +object Test { + def crash(as: Listt): Unit = { + map(as, (_: Any) => return) + } + + final def map(x: Listt, f: Any => Any): Any = { + if (x eq Nill) "" else f("") + } +} + +object Nill extends Listt +class Listt diff --git a/test/files/pos/t8315b.flags b/test/files/pos/t8315b.flags new file mode 100644 index 0000000000..c926ad6493 --- /dev/null +++ b/test/files/pos/t8315b.flags @@ -0,0 +1 @@ +-Yinline -Ydead-code diff --git a/test/files/pos/t8315b.scala b/test/files/pos/t8315b.scala new file mode 100644 index 0000000000..d7a2bf565f --- /dev/null +++ b/test/files/pos/t8315b.scala @@ -0,0 +1,11 @@ +object Test extends Object { + def crash: Unit = { + val key = "" + try map(new F(key)) + catch { case _: Throwable => } + }; + final def map(f: F): Any = f.apply(""); +}; +final class F(key: String) { + final def apply(a: Any): Any = throw new RuntimeException(key); +} diff --git a/test/files/pos/t8324.scala b/test/files/pos/t8324.scala new file mode 100644 index 0000000000..2cb1562326 --- /dev/null +++ b/test/files/pos/t8324.scala @@ -0,0 +1,16 @@ +package p1 + +private abstract class ProjectDef(val autoPlugins: Any) extends ProjectDefinition +sealed trait ResolvedProject extends ProjectDefinition { + def autoPlugins: Any +} + +sealed trait ProjectDefinition { + private[p1] def autoPlugins: Any +} + + +object Test { + // was "error: value autoPlugins in class ProjectDef of type Any cannot override final member" + new ProjectDef(null) with ResolvedProject +} diff --git a/test/files/pos/t8325.scala b/test/files/pos/t8325.scala new file mode 100644 index 0000000000..af33ee7bb3 --- /dev/null +++ b/test/files/pos/t8325.scala @@ -0,0 +1,9 @@ + +trait Test { + type +[A, B] = (A, B) + type *[A, B] = (A, B) + + type X[A, B] = A + B + type Y[A, B] = A * B + type Z[A, B] = A `*` B +} diff --git a/test/files/pos/t8329.scala b/test/files/pos/t8329.scala new file mode 100644 index 0000000000..fcd5e50b37 --- /dev/null +++ b/test/files/pos/t8329.scala @@ -0,0 +1,29 @@ +object Test { + def pf(pf: PartialFunction[Any, Unit]) = () + def f1(pf: Function[Any, Unit]) = () + + class A1; class B1 + def test1(x: String, x1: String, default: String) = pf { + case _ if ( + x.isEmpty + && default.isEmpty // was binding to synthetic param + && x1.isEmpty // was binding to synthetic param + ) => + x.isEmpty + default.isEmpty // was binding to synthetic param + x1.isEmpty // was binding to synthetic param + new A1; new B1 + } + + def test2(x: String, x1: String, default: String) = f1 { + case _ if ( + x.isEmpty + && default.isEmpty + && x1.isEmpty + ) => + x.isEmpty + default.isEmpty + x1.isEmpty + new A1; new B1 + } +} diff --git a/test/files/pos/t8352.check b/test/files/pos/t8352.check new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/test/files/pos/t8352.check diff --git a/test/files/pos/t8352/Macros_1.scala b/test/files/pos/t8352/Macros_1.scala new file mode 100644 index 0000000000..f5c8ce578f --- /dev/null +++ b/test/files/pos/t8352/Macros_1.scala @@ -0,0 +1,7 @@ +import scala.reflect.macros.whitebox._ +import scala.language.experimental.macros + +object Macros { + def impl(c: Context)(x: c.Expr[Boolean]): c.Expr[Boolean] = x + def foo(x: Boolean): Boolean = macro impl +}
\ No newline at end of file diff --git a/test/files/pos/t8352/Test_2.scala b/test/files/pos/t8352/Test_2.scala new file mode 100644 index 0000000000..b5bfe92ffb --- /dev/null +++ b/test/files/pos/t8352/Test_2.scala @@ -0,0 +1,5 @@ +object Test extends App { + def expectUnit() { + Macros.foo(true) + } +}
\ No newline at end of file diff --git a/test/files/pos/t8363.flags b/test/files/pos/t8363.flags new file mode 100644 index 0000000000..48b438ddf8 --- /dev/null +++ b/test/files/pos/t8363.flags @@ -0,0 +1 @@ +-Ydelambdafy:method diff --git a/test/files/pos/t8363.scala b/test/files/pos/t8363.scala new file mode 100644 index 0000000000..639faf4120 --- /dev/null +++ b/test/files/pos/t8363.scala @@ -0,0 +1,7 @@ +class C(a: Any) +class Test { + def foo: Any = { + def form = 0 + class C1 extends C(() => form) + } +} diff --git a/test/files/pos/t8364.check b/test/files/pos/t8364.check new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/test/files/pos/t8364.check diff --git a/test/files/pos/t8364.scala b/test/files/pos/t8364.scala new file mode 100644 index 0000000000..7a7ea1ff12 --- /dev/null +++ b/test/files/pos/t8364.scala @@ -0,0 +1,12 @@ +import scala.language.dynamics + +object MyDynamic extends Dynamic { + def selectDynamic(name: String): Any = ??? +} + +object Test extends App { + locally { + import java.lang.String + MyDynamic.id + } +} diff --git a/test/files/pos/t8367.scala b/test/files/pos/t8367.scala new file mode 100644 index 0000000000..cae2415405 --- /dev/null +++ b/test/files/pos/t8367.scala @@ -0,0 +1,11 @@ +package java.lang + +// SI-8367 shows something is wrong with primaryConstructor and it was made worse with the fix for SI-8192 +// perhaps primaryConstructor should not return NoSymbol when isJavaDefined +// or, perhaps isJavaDefined should be refined (the package definition above is pretty sneaky) +// also, why does this only happen for a (scala-defined!) class with this special name? +// (there are a couple of others: CloneNotSupportedException,InterruptedException) +class Throwable + +// class CloneNotSupportedException +// class InterruptedException
\ No newline at end of file diff --git a/test/files/pos/t8369a.check b/test/files/pos/t8369a.check new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/test/files/pos/t8369a.check diff --git a/test/files/pos/t8369a.scala b/test/files/pos/t8369a.scala new file mode 100644 index 0000000000..0596fdaf74 --- /dev/null +++ b/test/files/pos/t8369a.scala @@ -0,0 +1,5 @@ +object Bug { + trait Sys[S] + def test[S <: Sys[S]] = read[S]() + def read[S <: Sys[S]](baz: Any = 0): Some[S] = ??? +}
\ No newline at end of file diff --git a/test/files/pos/t8369b.check b/test/files/pos/t8369b.check new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/test/files/pos/t8369b.check diff --git a/test/files/pos/t8369b.scala b/test/files/pos/t8369b.scala new file mode 100644 index 0000000000..8145911db1 --- /dev/null +++ b/test/files/pos/t8369b.scala @@ -0,0 +1,18 @@ +object Bug { + trait Sys[S] { + type Tx + } + + trait Baz[-Tx] + + trait Foo[S <: Sys[S]] { + def bar: Bar[S] = Bar.read[S]() + } + + object Bar { + object NoBaz extends Baz[Any] + + def read[S <: Sys[S]](baz: Baz[S#Tx] = NoBaz): Bar[S] = ??? + } + trait Bar[S <: Sys[S]] +}
\ No newline at end of file diff --git a/test/files/pos/t8376/BindingsX.java b/test/files/pos/t8376/BindingsX.java new file mode 100644 index 0000000000..165fdaf5f6 --- /dev/null +++ b/test/files/pos/t8376/BindingsX.java @@ -0,0 +1,13 @@ +/** + * A simple Java class implementing methods similar to new JavaFX `Bindings`. + */ +public final class BindingsX { + + public static void select(String root, String... steps) { + throw new UnsupportedOperationException("Not implemented"); + } + + public static void select(Object root, String... steps) { + throw new UnsupportedOperationException("Not implemented"); + } +} diff --git a/test/files/pos/t8376/Test.scala b/test/files/pos/t8376/Test.scala new file mode 100644 index 0000000000..ba078a3532 --- /dev/null +++ b/test/files/pos/t8376/Test.scala @@ -0,0 +1,10 @@ +class Test { + BindingsX.select("", "") // okay in 2.10, fails in 2.11 + + BindingsY.select1("", "") // okay in both +} + +object BindingsY { + def select1(root: String, steps: String*) = () + def select1(root: Any, steps: String*) = () +} diff --git a/test/files/pos/t8403.scala b/test/files/pos/t8403.scala new file mode 100644 index 0000000000..eea60ed7ff --- /dev/null +++ b/test/files/pos/t8403.scala @@ -0,0 +1,9 @@ +trait Bug { + val u: { type Amb } = ??? + import u._ + + class Amb { def x = 0 } + class C(x: Amb) { // after dbd8457e4, "reference to Amb is ambiguous" + x.x + } +} diff --git a/test/files/pos/t8411/Macros_1.scala b/test/files/pos/t8411/Macros_1.scala new file mode 100644 index 0000000000..c5319c559c --- /dev/null +++ b/test/files/pos/t8411/Macros_1.scala @@ -0,0 +1,10 @@ +import scala.language.experimental.macros +import scala.reflect.macros.blackbox.Context + +object Macros { + def defaultZeroCase(pf: PartialFunction[Int, Int]): PartialFunction[Int, Int] = macro impl + def impl(c: Context)(pf: c.Tree) = { import c.universe._ + val q"{ case ..$cases }" = pf + q"{ case ..$cases case _ => 0 }" + } +} diff --git a/test/files/pos/t8411/Test_2.scala b/test/files/pos/t8411/Test_2.scala new file mode 100644 index 0000000000..a0ad30f0f5 --- /dev/null +++ b/test/files/pos/t8411/Test_2.scala @@ -0,0 +1,4 @@ +object Test extends App { + val pf = Macros.defaultZeroCase { case 1 => 2 } + assert(pf(2) == 0) +} diff --git a/test/files/pos/t8460.scala b/test/files/pos/t8460.scala new file mode 100644 index 0000000000..10d2ed432c --- /dev/null +++ b/test/files/pos/t8460.scala @@ -0,0 +1,25 @@ +object tan extends UFunc { + implicit def ImplDouble: Impl[Double, Double] = ??? +} + +trait UFunc { + trait TC[+A] + type Impl[V, VR] = UFunc.UImpl[this.type, V, VR] +} + +object UFunc { + class UImpl[A, B, C] + implicit def implicitDoubleUTag[Tag, V, VR](implicit conv: V=>Double, impl: UImpl[Tag, Double, VR]):UImpl[Tag, V, VR] = ??? + +} + +object Test { + implicitly[tan.Impl[Double, Double]] + // we should discard the one and only divergent implicit (`implicitDoubleUTag`) + // This is done under `scalac-hash v2.10.4 test.scala`, but not under + // `scalac-hash v2.10.4 -Xdivergence211 test.scala` + // + // This seems to be because the companion implicits contain redundant entries + // + +} diff --git a/test/files/pos/t8497/A_1.scala b/test/files/pos/t8497/A_1.scala new file mode 100644 index 0000000000..6a76b0ee99 --- /dev/null +++ b/test/files/pos/t8497/A_1.scala @@ -0,0 +1,13 @@ +package p { + object Crash { + def e(s: (String @java.lang.Deprecated)): Unit = () + def f(s: (String @nonStatic)): Unit = () + } + object Ok { + def g(s: (String @nonStatic @static)): Unit = () + def h(s: (String @static)): Unit = () + } +} + +class nonStatic extends scala.annotation.Annotation +class static extends scala.annotation.StaticAnnotation diff --git a/test/files/pos/t8497/B_2.scala b/test/files/pos/t8497/B_2.scala new file mode 100644 index 0000000000..efe2edf2c3 --- /dev/null +++ b/test/files/pos/t8497/B_2.scala @@ -0,0 +1 @@ +package p { object Test { Crash } } diff --git a/test/files/pos/t8523.flags b/test/files/pos/t8523.flags new file mode 100644 index 0000000000..c7d406c649 --- /dev/null +++ b/test/files/pos/t8523.flags @@ -0,0 +1 @@ +-Ywarn-dead-code -Xfatal-warnings
\ No newline at end of file diff --git a/test/files/pos/t8523.scala b/test/files/pos/t8523.scala new file mode 100644 index 0000000000..dfcb35404d --- /dev/null +++ b/test/files/pos/t8523.scala @@ -0,0 +1,10 @@ +import scala.language.experimental.macros +import scala.reflect.macros.blackbox.Context + +class Impl(val c: Context) { + def impl: c.Tree = ??? +} + +object Macros { + def foo: Any = macro Impl.impl +}
\ No newline at end of file diff --git a/test/files/pos/t8531/MyEnum.java b/test/files/pos/t8531/MyEnum.java new file mode 100644 index 0000000000..06cc128a79 --- /dev/null +++ b/test/files/pos/t8531/MyEnum.java @@ -0,0 +1,5 @@ + +package foobar; +public enum MyEnum { +A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31, A32, A33, A34, A35, A36, A37, A38, A39, A40, A41, A42, A43, A44, A45, A46, A47, A48, A49, A50, A51, A52, A53, A54, A55, A56, A57, A58, A59, A60, A61, A62, A63, A64, A65, A66, A67, A68, A69, A70, A71, A72, A73, A74, A75, A76, A77, A78, A79, A80, A81, A82, A83, A84, A85, A86, A87, A88, A89, A90, A91, A92, A93, A94, A95, A96, A97, A98, A99, A100, A101, A102, A103, A104, A105, A106, A107, A108, A109, A110, A111, A112, A113, A114, A115, A116, A117, A118, A119, A120, A121, A122, A123, A124, A125, A126, A127, A128, A129, A130, A131, A132, A133, A134, A135, A136, A137, A138, A139, A140, A141, A142, A143, A144, A145, A146, A147, A148, A149, A150, A151, A152, A153, A154, A155, A156, A157, A158, A159, A160, A161, A162, A163, A164, A165, A166, A167, A168, A169, A170, A171, A172, A173, A174, A175, A176, A177, A178, A179, A180, A181, A182, A183, A184, A185, A186, A187, A188, A189, A190, A191, A192, A193; +} diff --git a/test/files/pos/t8531/Test.scala b/test/files/pos/t8531/Test.scala new file mode 100644 index 0000000000..59861435a6 --- /dev/null +++ b/test/files/pos/t8531/Test.scala @@ -0,0 +1,24 @@ +package test + +// takes > 50s and > 800M heap to compile under 2.11.0 +import foobar._ +class `SI-8531` { + //https://issues.scala-lang.org/browse/SI-8531 + + import MyEnum._ + def foo(e1: MyEnum, e2: MyEnum) = (e1, e2) match { + case (A1, x) => "a1" + case (x, A1) => "a1" + case (A2, x) => "a2" + case (x, A2) => "a2" + case (A3, x) => "a3" + case (x, A3) => "a3" + case (A4, x) => "a4" + case (x, A4) => "a4" + case (A5, x) => "a5" + case (x, A5) => "a5" + case (A6, x) => "a6" + case (x, A6) => "a6" + case (a, b) => "ab" + } +} diff --git a/test/files/pos/t8546.flags b/test/files/pos/t8546.flags new file mode 100644 index 0000000000..85d8eb2ba2 --- /dev/null +++ b/test/files/pos/t8546.flags @@ -0,0 +1 @@ +-Xfatal-warnings diff --git a/test/files/pos/t8546.scala b/test/files/pos/t8546.scala new file mode 100644 index 0000000000..c39d749b4c --- /dev/null +++ b/test/files/pos/t8546.scala @@ -0,0 +1,49 @@ +package test + +class F1() { + private sealed abstract class T + private case class A(m: Int) extends T + private case class B() extends T + private case object C extends T + + // No warnings here + private def foo(t: T) = t match { + case A(m) => println("A:" + m) + case B() => println("B") + case C => println("C") + } + + def test(m: Int): Unit = { + foo(A(m)) + foo(B()) + foo(C) + } +} + +class F2[M]() { + private sealed abstract class T + private case class A(m: M) extends T + private case class B() extends T + private case object C extends T + + // match may not be exhaustive. It would fail on the following input: C + private def foo(t: T) = t match { + case A(m) => println("A:" + m) + case B() => println("B") + case C => println("C") + } + + def test(m: M): Unit = { + foo(A(m)) + foo(B()) + foo(C) + } + +} + +object Test { + def main(args: Array[String]): Unit = { + new F1().test(1) + new F2[Int]().test(1) + } +}
\ No newline at end of file diff --git a/test/files/pos/t8578.flags b/test/files/pos/t8578.flags new file mode 100644 index 0000000000..48b438ddf8 --- /dev/null +++ b/test/files/pos/t8578.flags @@ -0,0 +1 @@ +-Ydelambdafy:method diff --git a/test/files/pos/t8578.scala b/test/files/pos/t8578.scala new file mode 100644 index 0000000000..879b5f5550 --- /dev/null +++ b/test/files/pos/t8578.scala @@ -0,0 +1,18 @@ +class DuplicateClassName { + () => { + {() => ()} + {() => ()} + {() => ()} + {() => ()} + {() => ()} + {() => ()} + {() => ()} + {() => ()} + {() => ()} + {() => () => ()} + {() => ()} + } +} +// Was: +// Different class symbols have the same bytecode-level internal name: +// name: DuplicateClassName$lambda$$$anonfun$111
\ No newline at end of file diff --git a/test/files/pos/t8617.flags b/test/files/pos/t8617.flags new file mode 100644 index 0000000000..281f0a10cd --- /dev/null +++ b/test/files/pos/t8617.flags @@ -0,0 +1 @@ +-Yrangepos diff --git a/test/files/pos/t8617.scala b/test/files/pos/t8617.scala new file mode 100644 index 0000000000..fc825bbcba --- /dev/null +++ b/test/files/pos/t8617.scala @@ -0,0 +1,10 @@ +object Test { + def foo[A] = implicitly[OptManifest[A]] // was "unpositioned tree" under -Yrangepos + + // These did not crash, but testing for good measure. + implicitly[OptManifest[String]] + implicitly[Manifest[String]] + + implicitly[reflect.ClassTag[String]] + implicitly[reflect.runtime.universe.TypeTag[String]] +} diff --git a/test/files/pos/t8625.scala b/test/files/pos/t8625.scala new file mode 100644 index 0000000000..95c4b0dbcd --- /dev/null +++ b/test/files/pos/t8625.scala @@ -0,0 +1,5 @@ +object Test { + def f1(a: Boolean, b: Boolean) = (a || ???) && (b || ???) + def f2(a: Boolean, b: Boolean) = (a || ???) && b + def f3(a: Boolean, b: Boolean) = (a && ???) || b +} diff --git a/test/files/pos/t880.scala b/test/files/pos/t880.scala deleted file mode 100644 index cceb53c398..0000000000 --- a/test/files/pos/t880.scala +++ /dev/null @@ -1,6 +0,0 @@ -import scala.xml.Null - -class Test[A >: Null] -{ - val x : A = null -} diff --git a/test/files/pos/t911.scala b/test/files/pos/t911.scala index 224b14cda3..cfa4f49dc1 100644 --- a/test/files/pos/t911.scala +++ b/test/files/pos/t911.scala @@ -1,6 +1,6 @@ object Test { -def foo : Any = { - case class Foo {} - Foo; -} + def foo: Any = { + case class Foo() {} + Foo; + } } diff --git a/test/files/pos/t927.scala b/test/files/pos/t927.scala index 534f355045..c903f19867 100644 --- a/test/files/pos/t927.scala +++ b/test/files/pos/t927.scala @@ -7,5 +7,5 @@ object Test { } val str: Stream[Int] = List(1,2,3).iterator.toStream assert(sum(str) == 6) - + } diff --git a/test/files/pos/t946.scala b/test/files/pos/t946.scala index 9f4cdbc043..c4bd6e9ba4 100644 --- a/test/files/pos/t946.scala +++ b/test/files/pos/t946.scala @@ -1,7 +1,7 @@ object pmbugbounds { trait Bar class Foo[t <: Bar] {} - + (new Foo[Bar]) match { case _ : Foo[x] => null } diff --git a/test/files/pos/tcpoly_boundedmonad.scala b/test/files/pos/tcpoly_boundedmonad.scala index 24a911769b..8c605dc7b6 100644 --- a/test/files/pos/tcpoly_boundedmonad.scala +++ b/test/files/pos/tcpoly_boundedmonad.scala @@ -1,19 +1,19 @@ trait Monad[T <: Bound[T], MyType[x <: Bound[x]], Bound[_]] { - def map[S <: Bound[S]](f: T => S): MyType[S] + def map[S <: Bound[S]](f: T => S): MyType[S] - def flatMap[S <: RBound[S], RContainer[x <: RBound[x]], RBound[_], + def flatMap[S <: RBound[S], RContainer[x <: RBound[x]], RBound[_], Result[x <: RBound[x]] <: Monad[x, RContainer, RBound]] - (f: T => Result[S]): Result[S] + (f: T => Result[S]): Result[S] def filter(p: T => Boolean): MyType[T] } class Set[T <: Ordered[T]] extends Monad[T, Set, Ordered] { - def map[S <: Ordered[S]](f: T => S): Set[S] = error("TODO") - - def flatMap[S <: RBound[S], RContainer[x <: RBound[x]], RBound[_], + def map[S <: Ordered[S]](f: T => S): Set[S] = sys.error("TODO") + + def flatMap[S <: RBound[S], RContainer[x <: RBound[x]], RBound[_], Result[x <: RBound[x]] <: Monad[x, RContainer, RBound]] - (f: T => Result[S]): Result[S] = error("TODO") - - def filter(p: T => Boolean): Set[T] = error("TODO") + (f: T => Result[S]): Result[S] = sys.error("TODO") + + def filter(p: T => Boolean): Set[T] = sys.error("TODO") } diff --git a/test/files/pos/tcpoly_bounds1.scala b/test/files/pos/tcpoly_bounds1.scala index 142c0b7b7f..63263cb152 100644 --- a/test/files/pos/tcpoly_bounds1.scala +++ b/test/files/pos/tcpoly_bounds1.scala @@ -1,7 +1,7 @@ -class Foo[t[x]<: Pair[Int, x]] +class Foo[t[x]<: Tuple2[Int, x]] -// -class MyPair[z](a: Int, b: z) extends Pair[Int, z](a,b) +// +class MyPair[z](a: Int, b: z) extends Tuple2[Int, z](a,b) object foo extends Foo[MyPair] diff --git a/test/files/pos/tcpoly_checkkinds_mix.scala b/test/files/pos/tcpoly_checkkinds_mix.scala index 2d265da6b9..3734405f8b 100644 --- a/test/files/pos/tcpoly_checkkinds_mix.scala +++ b/test/files/pos/tcpoly_checkkinds_mix.scala @@ -2,9 +2,9 @@ trait Iterable[A <: Bound[A], Bound[_]] { type MyType[x <: Bound[x]] <: Iterable[x, Bound] def map[B <: Bound[B]](f: A => B): MyType[B] def flatMap[B <: Bound[B]](f: A => MyType[B]): MyType[B] - def filter(p: A => Boolean): MyType[A] + def filter(p: A => Boolean): MyType[A] } -trait OrderedSet[T <: Ordered[T]] extends Iterable[T, Ordered] { +trait OrderedSet[T <: Ordered[T]] extends Iterable[T, Ordered] { type MyType[x <: Ordered[x]] = OrderedSet[x] -} +} diff --git a/test/files/pos/tcpoly_gm.scala b/test/files/pos/tcpoly_gm.scala index ecaeef9679..89b66cfba6 100644 --- a/test/files/pos/tcpoly_gm.scala +++ b/test/files/pos/tcpoly_gm.scala @@ -1,4 +1,4 @@ -trait Rep[a] { +trait Rep[a] { def rep[m[x]]: m[a] // typedTypeApply must use asSeenFrom to adapt the return type // since rep is called on x: Rep[t] // a must become t @@ -9,7 +9,6 @@ case class ShowBin[b](app: b => String) object foo { def showBin[t](x: Rep[t], y: t): String = { val r: ShowBin[t] = x.rep[ShowBin] - r.app(y) + r.app(y) } } - diff --git a/test/files/pos/tcpoly_higherorder_bound_method.scala b/test/files/pos/tcpoly_higherorder_bound_method.scala index 090bb8fcf3..3905b3b96d 100644 --- a/test/files/pos/tcpoly_higherorder_bound_method.scala +++ b/test/files/pos/tcpoly_higherorder_bound_method.scala @@ -1,3 +1,3 @@ trait SkolemisationOfHigherOrderBoundInMethod { def method[A, N[X <: A], M[X <: N[A]]]: Unit -} +} diff --git a/test/files/pos/tcpoly_infer_explicit_tuple_wrapper.scala b/test/files/pos/tcpoly_infer_explicit_tuple_wrapper.scala index 97594d506d..f719972a17 100644 --- a/test/files/pos/tcpoly_infer_explicit_tuple_wrapper.scala +++ b/test/files/pos/tcpoly_infer_explicit_tuple_wrapper.scala @@ -2,15 +2,15 @@ import scala.collection.generic.GenericTraversableTemplate import scala.collection.Iterable class IterableOps[CC[+B] <: Iterable[B] with GenericTraversableTemplate[B, CC], A1, A2](tuple: (CC[A1], Iterable[A2])) { - def unzip: (CC[A1], CC[A2]) = error("foo") + def unzip: (CC[A1], CC[A2]) = sys.error("foo") } object Test { - implicit def tupleOfIterableWrapper[CC[+B] <: Iterable[B] with GenericTraversableTemplate[B, CC], A1, A2](tuple: (CC[A1], Iterable[A2])) + implicit def tupleOfIterableWrapper[CC[+B] <: Iterable[B] with GenericTraversableTemplate[B, CC], A1, A2](tuple: (CC[A1], Iterable[A2])) = new IterableOps[CC, A1, A2](tuple) - + val t = (List(1, 2, 3), List(6, 5, 4)) tupleOfIterableWrapper(t) unzip -}
\ No newline at end of file +} diff --git a/test/files/pos/tcpoly_infer_implicit_tuple_wrapper.scala b/test/files/pos/tcpoly_infer_implicit_tuple_wrapper.scala index 3073b298de..19243505b4 100644 --- a/test/files/pos/tcpoly_infer_implicit_tuple_wrapper.scala +++ b/test/files/pos/tcpoly_infer_implicit_tuple_wrapper.scala @@ -2,7 +2,7 @@ import scala.collection.generic.GenericTraversableTemplate import scala.collection.Iterable class IterableOps[CC[+B] <: Iterable[B] with GenericTraversableTemplate[B, CC], A1, A2](tuple: (CC[A1], Iterable[A2])) { - def unzip: (CC[A1], CC[A2]) = error("foo") + def unzip: (CC[A1], CC[A2]) = sys.error("foo") } object Test { @@ -15,4 +15,4 @@ object Test { tupleOfIterableWrapper(t) unzip t unzip -}
\ No newline at end of file +} diff --git a/test/files/pos/tcpoly_late_method_params.scala b/test/files/pos/tcpoly_late_method_params.scala index c9298918a0..e2f0bcffb3 100644 --- a/test/files/pos/tcpoly_late_method_params.scala +++ b/test/files/pos/tcpoly_late_method_params.scala @@ -1,5 +1,5 @@ trait Foo { - def flatMap[RT <: RBound[RT], RBound[_], Result[x <: RBound[x]]]: Result[RT] + def flatMap[RT <: RBound[RT], RBound[_], Result[x <: RBound[x]]]: Result[RT] // bounds for RT& = >: scala.this.Nothing <: RBound&[RT&] // bounds for x = >: scala.this.Nothing <: RBound&[x] } diff --git a/test/files/pos/tcpoly_method.scala b/test/files/pos/tcpoly_method.scala index 80dc0482fd..294b53b915 100644 --- a/test/files/pos/tcpoly_method.scala +++ b/test/files/pos/tcpoly_method.scala @@ -1,6 +1,6 @@ trait Iterable[m[+x], +t] { def flatMap[resColl[+x] <: Iterable[resColl, x], s](f: t => resColl[s]): resColl[s] - + def foo[a[x]] = "a" val x = foo[List] } diff --git a/test/files/pos/tcpoly_overloaded.scala b/test/files/pos/tcpoly_overloaded.scala index 4240074d85..4f6334685b 100644 --- a/test/files/pos/tcpoly_overloaded.scala +++ b/test/files/pos/tcpoly_overloaded.scala @@ -1,10 +1,10 @@ trait Monad[T <: Bound[T], MyType[x <: Bound[x]], Bound[_]] { - def flatMap[S <: RBound[S], RContainer[x <: RBound[x]], RBound[_], + def flatMap[S <: RBound[S], RContainer[x <: RBound[x]], RBound[_], Result[x <: RBound[x]] <: Monad[x, RContainer, RBound]] - (f: T => Result[S]): Result[S] - def flatMap[S <: RBound[S], RContainer[x <: RBound[x]], RBound[_], + (f: T => Result[S]): Result[S] + def flatMap[S <: RBound[S], RContainer[x <: RBound[x]], RBound[_], Result[x <: RBound[x]] <: Monad[x, RContainer, RBound]] - (f: T => Result[S], foo: String): Result[S] + (f: T => Result[S], foo: String): Result[S] def flatMap[S <: Bound[S]] (f: T => MyType[S], foo: Int): MyType[S] } @@ -12,14 +12,14 @@ trait Monad[T <: Bound[T], MyType[x <: Bound[x]], Bound[_]] { trait Test { def moo: MList[Int] class MList[T](el: T) extends Monad[T, List, Any] { - def flatMap[S <: RBound[S], RContainer[x <: RBound[x]], RBound[_], + def flatMap[S <: RBound[S], RContainer[x <: RBound[x]], RBound[_], Result[x <: RBound[x]] <: Monad[x, RContainer, RBound]] - (f: T => Result[S]): Result[S] = error("foo") - def flatMap[S <: RBound[S], RContainer[x <: RBound[x]], RBound[_], + (f: T => Result[S]): Result[S] = sys.error("foo") + def flatMap[S <: RBound[S], RContainer[x <: RBound[x]], RBound[_], Result[x <: RBound[x]] <: Monad[x, RContainer, RBound]] - (f: T => Result[S], foo: String): Result[S] = error("foo") + (f: T => Result[S], foo: String): Result[S] = sys.error("foo") def flatMap[S] - (f: T => List[S], foo: Int): List[S] = error("foo") + (f: T => List[S], foo: Int): List[S] = sys.error("foo") } val l: MList[String] = moo.flatMap[String, List, Any, MList]((x: Int) => new MList("String")) } diff --git a/test/files/pos/tcpoly_poly.scala b/test/files/pos/tcpoly_poly.scala index 50ffc7837f..1ba04e29df 100644 --- a/test/files/pos/tcpoly_poly.scala +++ b/test/files/pos/tcpoly_poly.scala @@ -1,3 +1,3 @@ -class Monad[m[x]] +class Monad[m[x]] object ml extends Monad[List] diff --git a/test/files/pos/tcpoly_return_overriding.scala b/test/files/pos/tcpoly_return_overriding.scala index 0814e73fa4..57ec8da76c 100644 --- a/test/files/pos/tcpoly_return_overriding.scala +++ b/test/files/pos/tcpoly_return_overriding.scala @@ -2,7 +2,7 @@ trait Generic[g[x]] { def unit: g[Unit] } -trait Rep[t] { +trait Rep[t] { def rep[m[x]](implicit gen: Generic[m]): m[t] } diff --git a/test/files/pos/tcpoly_seq.scala b/test/files/pos/tcpoly_seq.scala index b5f46f6b6b..48b3e1ce52 100644 --- a/test/files/pos/tcpoly_seq.scala +++ b/test/files/pos/tcpoly_seq.scala @@ -6,40 +6,40 @@ trait HOSeq { // values implementing this interface, in order to provide more performant ways of building that structure trait Accumulator[+coll[x], elT] { def += (el: elT): Unit - def result: coll[elT] + def result: coll[elT] } - - + + // Iterable abstracts over the type of its structure as well as its elements (see PolyP's Bifunctor) - // m[x] is intentionally unbounded: fold can then be defined nicely - // variance: if we write m[+x] instead of +m[+x], x is an invariant position because its enclosing type + // m[x] is intentionally unbounded: fold can then be defined nicely + // variance: if we write m[+x] instead of +m[+x], x is an invariant position because its enclosing type // is an invariant position -- should probably rule that out? trait Iterable[+m[+x], +t] { //def unit[a](orig: a): m[a] def iterator: Iterator[t] - + // construct an empty accumulator that will produce the same structure as this iterable, with elements of type t def accumulator[t]: Accumulator[m, t] - + def filter(p: t => Boolean): m[t] = { val buf = accumulator[t] val elems = iterator while (elems.hasNext) { val x = elems.next; if (p(x)) buf += x } buf.result } - + def map[s](f: t => s): m[s] = { val buf = accumulator[s] val elems = iterator while (elems.hasNext) buf += f(elems.next) buf.result } - + // flatMap is a more specialized map, it only works if the mapped function produces Iterable values, // which are then added to the result one by one // the compiler should be able to find the right accumulator (implicit buf) to build the result // to get concat, resColl = SingletonIterable, f = unit for SingletonIterable - def flatMap[resColl[+x] <: Iterable[resColl, x], s](f: t => resColl[s])(implicit buf: Accumulator[resColl, s]): resColl[s] = { + def flatMap[resColl[+x] <: Iterable[resColl, x], s](f: t => resColl[s])(implicit buf: Accumulator[resColl, s]): resColl[s] = { // TODO: would a viewbound for resColl[x] be better? // -- 2nd-order type params are not yet in scope in view bound val elems = iterator @@ -48,9 +48,9 @@ trait HOSeq { while (elemss.hasNext) buf += elemss.next } buf.result - } + } } - + final class ListBuffer[A] { private var start: List[A] = Nil private var last: ::[A] = _ @@ -78,7 +78,7 @@ trait HOSeq { exported = !start.isEmpty start } - + /** Clears the buffer contents. */ def clear { @@ -97,13 +97,13 @@ trait HOSeq { } } } - + implicit def listAccumulator[elT]: Accumulator[List, elT] = new Accumulator[List, elT] { private[this] val buff = new ListBuffer[elT] def += (el: elT): Unit = buff += el def result: List[elT] = buff.toList } - + trait List[+t] extends Iterable[List, t] { def head: t def tail: List[t] @@ -121,14 +121,14 @@ trait HOSeq { // construct an empty accumulator that will produce the same structure as this iterable, with elements of type t def accumulator[t]: Accumulator[List, t] = listAccumulator[t] } - + // TODO: the var tl approach does not seem to work because subtyping isn't fully working yet final case class ::[+b](hd: b, private val tl: List[b]) extends List[b] { def head = hd def tail = if(tl==null) this else tl // hack override def isEmpty: Boolean = false } - + case object Nil extends List[Nothing] { def isEmpty = true def head: Nothing = @@ -157,18 +157,18 @@ trait HOSeq { def filter(f: T=>Boolean): FilterResult def subseq(from: Int, to: Int): Subseq def flatMap[S <: Seq[K], K](f: T => S): S#Concat // legal? - def concat(others: Seq[T]): Concat + def concat(others: Seq[T]): Concat */ - + /*trait Iterator[t] { // @post hasAdvanced implies hasNext // model def hasAdvanced: Boolean - + def hasNext: Boolean // pure - + // @pre hasAdvanced def current: t // pure - + // @pre hasNext // @post hasAdvanced def advance: Unit diff --git a/test/files/pos/tcpoly_seq_typealias.scala b/test/files/pos/tcpoly_seq_typealias.scala index 0651ad9760..fb48126ce6 100644 --- a/test/files/pos/tcpoly_seq_typealias.scala +++ b/test/files/pos/tcpoly_seq_typealias.scala @@ -6,42 +6,42 @@ trait HOSeq { // values implementing this interface, in order to provide more performant ways of building that structure trait Accumulator[+coll[x], elT] { def += (el: elT): Unit - def result: coll[elT] + def result: coll[elT] } - - + + // Iterable abstracts over the type of its structure as well as its elements (see PolyP's Bifunctor) - // m[x] is intentionally unbounded: fold can then be defined nicely - // variance: if we write m[+x] instead of +m[+x], x is an invariant position because its enclosing type + // m[x] is intentionally unbounded: fold can then be defined nicely + // variance: if we write m[+x] instead of +m[+x], x is an invariant position because its enclosing type // is an invariant position -- should probably rule that out? trait Iterable[+t] { - type m[+x] - + type m[+x] + //def unit[a](orig: a): m[a] def iterator: Iterator[t] - + // construct an empty accumulator that will produce the same structure as this iterable, with elements of type t def accumulator[t]: Accumulator[m, t] - + def filter(p: t => Boolean): m[t] = { val buf = accumulator[t] val elems = iterator while (elems.hasNext) { val x = elems.next; if (p(x)) buf += x } buf.result } - + def map[s](f: t => s): m[s] = { val buf = accumulator[s] val elems = iterator while (elems.hasNext) buf += f(elems.next) buf.result } - + // flatMap is a more specialized map, it only works if the mapped function produces Iterable values, // which are then added to the result one by one // the compiler should be able to find the right accumulator (implicit buf) to build the result // to get concat, resColl = SingletonIterable, f = unit for SingletonIterable - def flatMap[resColl[+x] <: Iterable[x], s](f: t => resColl[s])(implicit buf: Accumulator[resColl, s]): resColl[s] = { + def flatMap[resColl[+x] <: Iterable[x], s](f: t => resColl[s])(implicit buf: Accumulator[resColl, s]): resColl[s] = { // TODO: would a viewbound for resColl[x] be better? // -- 2nd-order type params are not yet in scope in view bound val elems = iterator @@ -50,9 +50,9 @@ trait HOSeq { while (elemss.hasNext) buf += elemss.next } buf.result - } + } } - + final class ListBuffer[A] { private var start: List[A] = Nil private var last: ::[A] = _ @@ -80,7 +80,7 @@ trait HOSeq { exported = !start.isEmpty start } - + /** Clears the buffer contents. */ def clear { @@ -99,16 +99,16 @@ trait HOSeq { } } } - + implicit def listAccumulator[elT]: Accumulator[List, elT] = new Accumulator[List, elT] { private[this] val buff = new ListBuffer[elT] def += (el: elT): Unit = buff += el def result: List[elT] = buff.toList } - + trait List[+t] extends Iterable[t] { type m[+x] = List[x] - + def head: t def tail: List[t] def isEmpty: Boolean @@ -125,14 +125,14 @@ trait HOSeq { // construct an empty accumulator that will produce the same structure as this iterable, with elements of type t def accumulator[t]: Accumulator[List, t] = listAccumulator[t] } - + // TODO: the var tl approach does not seem to work because subtyping isn't fully working yet final case class ::[+b](hd: b, private val tl: List[b]) extends List[b] { def head = hd def tail = if(tl==null) this else tl // hack override def isEmpty: Boolean = false } - + case object Nil extends List[Nothing] { def isEmpty = true def head: Nothing = diff --git a/test/files/pos/tcpoly_subst.scala b/test/files/pos/tcpoly_subst.scala index f8ddb9a715..88cc4d0610 100644 --- a/test/files/pos/tcpoly_subst.scala +++ b/test/files/pos/tcpoly_subst.scala @@ -1,4 +1,4 @@ object test { - def make[m[x], b]: m[b] = error("foo") + def make[m[x], b]: m[b] = sys.error("foo") val lst: List[Int] = make[List, Int] } diff --git a/test/files/pos/tcpoly_variance_pos.scala b/test/files/pos/tcpoly_variance_pos.scala index b641716d50..b63abce202 100644 --- a/test/files/pos/tcpoly_variance_pos.scala +++ b/test/files/pos/tcpoly_variance_pos.scala @@ -1,7 +1,7 @@ class A[m[+x]] { - def str: m[Object] = error("foo") + def str: m[Object] = sys.error("foo") } class B[m[+x]] extends A[m] { - override def str: m[String] = error("foo") + override def str: m[String] = sys.error("foo") } diff --git a/test/files/pos/tcpoly_wildcards.scala b/test/files/pos/tcpoly_wildcards.scala index d3bb86b591..f6d1b666d0 100644 --- a/test/files/pos/tcpoly_wildcards.scala +++ b/test/files/pos/tcpoly_wildcards.scala @@ -1,3 +1,3 @@ trait test[b[_,_]] { - def moo[a[_, _]] = error("a") + def moo[a[_, _]] = sys.error("a") } diff --git a/test/files/pos/ted.scala b/test/files/pos/ted.scala index d8ae64f29b..314f109328 100644 --- a/test/files/pos/ted.scala +++ b/test/files/pos/ted.scala @@ -9,7 +9,7 @@ object App case (b, e) => b * exponentiate(b, e - 1) } - + def main(args : Array[String]) = System.out.println(exponentiate(2, 2)) diff --git a/test/files/pos/test5.scala b/test/files/pos/test5.scala index b04de5d613..4dbafc9ac3 100644 --- a/test/files/pos/test5.scala +++ b/test/files/pos/test5.scala @@ -53,7 +53,7 @@ object test { // Check type j.P j.chk_ip(val_mp); - j.chk_ip(val_np); + j.chk_ip(val_np); // Check type i.X i.chk_ix(i.val_ix); @@ -63,6 +63,6 @@ object test { // Check j.X j.chk_ix(j.val_ix); j.chk_ix(j.val_jx); - j.chk_ix(val_njx); + j.chk_ix(val_njx); } } diff --git a/test/files/pos/test5refine.scala b/test/files/pos/test5refine.scala index 290449c3ed..5459b3b975 100644 --- a/test/files/pos/test5refine.scala +++ b/test/files/pos/test5refine.scala @@ -60,7 +60,7 @@ object test { // Check type j.P j.chk_ip(val_mp); - j.chk_ip(val_np); + j.chk_ip(val_np); // Check type i.X i.chk_ix(i.val_ix); @@ -70,6 +70,6 @@ object test { // Check j.X j.chk_ix(j.val_ix); j.chk_ix(j.val_jx); - j.chk_ix(val_njx); + j.chk_ix(val_njx); } } diff --git a/test/files/pos/testCoercionThis.scala b/test/files/pos/testCoercionThis.scala index 8bbfdcd684..5631b33306 100644 --- a/test/files/pos/testCoercionThis.scala +++ b/test/files/pos/testCoercionThis.scala @@ -11,9 +11,9 @@ object Test { // PP: is that something we really want to work? Seems like sketchville. // // These work, so I moved this out of pending. - def testCoercionThis1 = this.baz + def testCoercionThis1 = this.baz def testCoercionThis2 = (this: Foo).baz } - - class Bar { def baz = System.out.println("baz") } + + class Bar { def baz = System.out.println("baz") } } diff --git a/test/files/pos/thistypes.scala b/test/files/pos/thistypes.scala index 26339e07c4..7319cc1ecb 100644 --- a/test/files/pos/thistypes.scala +++ b/test/files/pos/thistypes.scala @@ -5,4 +5,4 @@ trait B { trait C extends B { def foo: C.this.I; -} +} diff --git a/test/files/pos/ticket0137.scala b/test/files/pos/ticket0137.scala index 72f955fe5e..94ef8e49fc 100644 --- a/test/files/pos/ticket0137.scala +++ b/test/files/pos/ticket0137.scala @@ -1,7 +1,7 @@ -trait AbsM { - abstract class MonadCompanion[M[_]] +trait AbsM { + abstract class MonadCompanion[M[_]] abstract class AbsMonadCompanion extends MonadCompanion[AM] { - def newTag: Int + def newTag: Int } type AM[_] // to trigger the bug, this must be an abstract type member that comes after the reference to it diff --git a/test/files/pos/ticket2251.scala b/test/files/pos/ticket2251.scala index b3afee4ea9..c220e85350 100644 --- a/test/files/pos/ticket2251.scala +++ b/test/files/pos/ticket2251.scala @@ -22,4 +22,18 @@ lub of List(D, C) is B[_2] forSome { type _2 >: D with C{} <: B[_1] forSome { ty // should be: B[X] forSome {type X <: B[X]} -- can this be done automatically? for now, just detect f-bounded polymorphism and fall back to more coarse approximation val data: List[A] = List(new C, new D) + + val data2 = List(new C, new D) + + val data3: List[B[X] forSome { type X <: B[_ <: A] }] = List(new C, new D) + + // Not yet -- + // val data4: List[B[X] forSome { type X <: B[X] }] = List(new C, new D) + // <console>:7: error: type mismatch; + // found : List[B[_ >: D with C <: B[_ >: D with C <: A]]] + // required: List[B[X] forSome { type X <: B[X] }] + // val data4: List[B[X] forSome { type X <: B[X] }] = List(new C, new D) + + // works + val data5 = List[B[X] forSome { type X <: B[X] }](new C, new D) } diff --git a/test/files/pos/trait-force-info.scala b/test/files/pos/trait-force-info.scala index e01d225c84..c2b33869c3 100644 --- a/test/files/pos/trait-force-info.scala +++ b/test/files/pos/trait-force-info.scala @@ -8,7 +8,7 @@ trait MyContextTrees { val self: Global val NoContext = self.analyzer.NoContext } -// +// // error: java.lang.AssertionError: assertion failed: trait Contexts.NoContext$ linkedModule: <none>List() // at scala.Predef$.assert(Predef.scala:160) // at scala.tools.nsc.symtab.classfile.ClassfileParser$innerClasses$.innerSymbol$1(ClassfileParser.scala:1211) diff --git a/test/files/pos/trait-parents.scala b/test/files/pos/trait-parents.scala index f6a2688751..c5908cdcd9 100644 --- a/test/files/pos/trait-parents.scala +++ b/test/files/pos/trait-parents.scala @@ -6,11 +6,11 @@ trait Quux object Test { def f(x: Bip) = 1 def g1(x: Foo with Bip) = f(x) - + def main(args: Array[String]): Unit = { - f(new Bip with Foo { }) + f(new Bip with Foo { }) f(new Foo with Bip { }) - g1(new Bip with Foo { }) + g1(new Bip with Foo { }) g1(new Foo with Bip { }) } } diff --git a/test/files/pos/traits.scala b/test/files/pos/traits.scala index bd64d7215a..3c6f9437a5 100644 --- a/test/files/pos/traits.scala +++ b/test/files/pos/traits.scala @@ -20,8 +20,8 @@ object Test { trait BorderedColoredShape extends Shape with Bordered with Colored { override def equals(other: Any) = other match { case that: BorderedColoredShape => ( - super.equals(that) && - super[Bordered].equals(that) && + super.equals(that) && + super[Bordered].equals(that) && super[Colored].equals(that)) case _ => false } diff --git a/test/files/pos/typealias_dubious.scala b/test/files/pos/typealias_dubious.scala index 587453a037..cdba1a64d0 100644 --- a/test/files/pos/typealias_dubious.scala +++ b/test/files/pos/typealias_dubious.scala @@ -1,15 +1,15 @@ class MailBox { - //class Message + //class Message type Message = AnyRef -} - +} + abstract class Actor { private val in = new MailBox - def send(msg: in.Message) = error("foo") + def send(msg: in.Message) = sys.error("foo") - def unstable: Actor = error("foo") + def unstable: Actor = sys.error("foo") - def dubiousSend(msg: MailBox#Message) = + def dubiousSend(msg: MailBox#Message) = unstable.send(msg) // in.Message becomes unstable.Message, but that's ok since Message is a concrete type member -} +} diff --git a/test/files/pos/typealiases.scala b/test/files/pos/typealiases.scala index 5974921ed3..93d1dce4dc 100644 --- a/test/files/pos/typealiases.scala +++ b/test/files/pos/typealiases.scala @@ -3,18 +3,18 @@ package foo trait Test[T] { type Check[T] = Array[T] => Unit; type MyPair[S] = (T, S) - + val pair1: (T, Int) val pair: MyPair[Int] = pair1 - + def check(xs: Array[T], c: Check[T]) = c(xs) - def check2[S](xs: Array[S], c: Check[S]) = c(xs) -} + def check2[S](xs: Array[S], c: Check[S]) = c(xs) +} -object main extends Test[Int] { - val pair1 = (1,1) +object main extends Test[Int] { + val pair1 = (1,1) - implicit def topair(x: Int): Pair[Int, Int] = (x,x) - val pair2: MyPair[Int] = 1 + implicit def topair(x: Int): Tuple2[Int, Int] = (x,x) + val pair2: MyPair[Int] = 1 val x: Short = 1 } diff --git a/test/files/pos/unapplyNeedsMemberType.scala b/test/files/pos/unapplyNeedsMemberType.scala index 2581512a7b..3a96e189af 100644 --- a/test/files/pos/unapplyNeedsMemberType.scala +++ b/test/files/pos/unapplyNeedsMemberType.scala @@ -8,7 +8,7 @@ trait Gunk[a] { def unapply(s: Seq) = unapply_Cons(s) } def unapply_Cons(s: Any): Option[Tuple2[a, Seq]] -} +} class Join[a] extends Gunk[a] { type Seq = JoinSeq @@ -19,7 +19,7 @@ class Join[a] extends Gunk[a] { def append(s1: Seq, s2: Seq): Seq = s1 // mock implementation def unapply_Cons(s: Any) = s match { - case App(Cons(x, xs), ys) => Some(Pair(x, append(xs, ys))) + case App(Cons(x, xs), ys) => Some((x, append(xs, ys))) case _ => null } } diff --git a/test/files/pos/unapplySeq.scala b/test/files/pos/unapplySeq.scala index 4d5409c6f7..6d13cc8b52 100644 --- a/test/files/pos/unapplySeq.scala +++ b/test/files/pos/unapplySeq.scala @@ -4,7 +4,7 @@ object FooSeq { val y = x.asInstanceOf[Bar] Some(y.size, y.name) } else None - } + } def main(args:Array[String]) = { val b = new Bar diff --git a/test/files/pos/unapplyVal.scala b/test/files/pos/unapplyVal.scala index 0d6394a90f..368b9b9375 100644 --- a/test/files/pos/unapplyVal.scala +++ b/test/files/pos/unapplyVal.scala @@ -10,7 +10,7 @@ class Buffer { def joinPat(x: Any): Unit = { x match { - case Put => + case Put => case Put(y) => println("returning "+y) } @@ -29,7 +29,7 @@ object unapplyJoins extends App { // bug #1257 object Get extends Sync val jp: PartialFunction[Any, Any] = { - case Get() => + case Get() => } } diff --git a/test/files/pos/valdefs.scala b/test/files/pos/valdefs.scala index 85ffa132b7..c8f78cd2bf 100644 --- a/test/files/pos/valdefs.scala +++ b/test/files/pos/valdefs.scala @@ -11,6 +11,6 @@ object test { } abstract class Sub2() extends Base() { - override val Pair(x, y) = Pair("abc", 2.0); + override val (x, y) = ("abc", 2.0); } } diff --git a/test/files/pos/variances-flip.scala b/test/files/pos/variances-flip.scala new file mode 100644 index 0000000000..c3ea7b571d --- /dev/null +++ b/test/files/pos/variances-flip.scala @@ -0,0 +1,7 @@ +trait Foo[-A, +B, -C, +D] { + private[this] def b: B = ??? + private[this] def d: D = ??? + + def f(p1: B => A, p2: D => C) = g(p1(b), p2(d)) + def g(x: A, y: C) = ((b, d)) +} diff --git a/test/files/pos/variances-local.scala b/test/files/pos/variances-local.scala new file mode 100644 index 0000000000..35e395095c --- /dev/null +++ b/test/files/pos/variances-local.scala @@ -0,0 +1,7 @@ +class Foo1[+T] { + private[this] type MyType = T +} + +class Foo2[+T] { + protected[this] type MyType = T +} diff --git a/test/files/pos/virtpatmat_binding_opt.scala b/test/files/pos/virtpatmat_binding_opt.scala index 962e3d7dbe..8ec931fe78 100644 --- a/test/files/pos/virtpatmat_binding_opt.scala +++ b/test/files/pos/virtpatmat_binding_opt.scala @@ -4,8 +4,8 @@ class Test { case that: Test2 => println(that) this - case _ => error("meh") + case _ => sys.error("meh") } } -class Test2 extends Test
\ No newline at end of file +class Test2 extends Test diff --git a/test/files/pos/virtpatmat_castbinder.scala b/test/files/pos/virtpatmat_castbinder.scala index 53e937e866..be269638ce 100644 --- a/test/files/pos/virtpatmat_castbinder.scala +++ b/test/files/pos/virtpatmat_castbinder.scala @@ -6,7 +6,7 @@ trait IntMapIterator[V, T] { def valueOf(tip: Tip[V]): T def pop: IntMap[V] - def next: T = + def next: T = pop match { case Bin(t@Tip(_)) => { valueOf(t) diff --git a/test/files/pos/virtpatmat_exist1.scala b/test/files/pos/virtpatmat_exist1.scala index ccb91299db..6cad017b0b 100644 --- a/test/files/pos/virtpatmat_exist1.scala +++ b/test/files/pos/virtpatmat_exist1.scala @@ -13,7 +13,7 @@ object Test { // without type ascription for the one in the body of the last flatmap of each alternative, type inference borks on the existentials // def splitArray[T >: Nothing <: Any](ad: Array[Iterable[T]]): Any = { import OptionMatching._ // runOrElse(ad.apply(0))(((x1: Iterable[T]) => ( - // or(((x4: Iterable[T]) => one(null)), + // or(((x4: Iterable[T]) => one(null)), // guard(x1.isInstanceOf[Iterable[T] with Test.HashMapCollision1[_,_]], x1.asInstanceOf[Iterable[T] with Test.HashMapCollision1[_,_]]).flatMap(((x2: Iterable[T] with Test.HashMapCollision1[_,_]) => one(x2))), // guard(x1.isInstanceOf[Test.HashSetCollision1[_]], x1.asInstanceOf[Iterable[T] with Test.HashSetCollision1[_]]).flatMap(((x3: Iterable[T] with Test.HashSetCollision1[_]) => one(x3)))): Option[Any]).orElse( // (zero: Option[Any]))) diff --git a/test/files/pos/virtpatmat_exist2.scala b/test/files/pos/virtpatmat_exist2.scala index b0e4c667b7..ee186074ab 100644 --- a/test/files/pos/virtpatmat_exist2.scala +++ b/test/files/pos/virtpatmat_exist2.scala @@ -9,11 +9,11 @@ object Test { // what's the _$1 doing there? // def grow[T >: Nothing <: Any]: ParseResult[T] = { // import OptionMatching._ - // runOrElse[MemoEntry[T], ParseResult[T]]((null: MemoEntry[T]))(((x1: MemoEntry[T]) => - // (MemoEntry.unapply[T](x1).flatMap[ParseResult[T]](((x4: Either[Nothing,ParseResult[_]]) => - // guard[Right[Nothing,ParseResult[_]]](x4.isInstanceOf[Right[Nothing,ParseResult[_]]], x4.asInstanceOf[Right[Nothing,ParseResult[_]]]).flatMap[ParseResult[T]](((cp3: Right[Nothing,ParseResult[_]]) => - // scala.Right.unapply[Nothing, ParseResult[_]](cp3).flatMap[ParseResult[T]](((x5: ParseResult[_]) => - // guard[ParseResult[_$1]](x5.ne(null), x5.asInstanceOf[ParseResult[_]]).flatMap[ParseResult[T]](((x6: ParseResult[_]) => + // runOrElse[MemoEntry[T], ParseResult[T]]((null: MemoEntry[T]))(((x1: MemoEntry[T]) => + // (MemoEntry.unapply[T](x1).flatMap[ParseResult[T]](((x4: Either[Nothing,ParseResult[_]]) => + // guard[Right[Nothing,ParseResult[_]]](x4.isInstanceOf[Right[Nothing,ParseResult[_]]], x4.asInstanceOf[Right[Nothing,ParseResult[_]]]).flatMap[ParseResult[T]](((cp3: Right[Nothing,ParseResult[_]]) => + // scala.Right.unapply[Nothing, ParseResult[_]](cp3).flatMap[ParseResult[T]](((x5: ParseResult[_]) => + // guard[ParseResult[_$1]](x5.ne(null), x5.asInstanceOf[ParseResult[_]]).flatMap[ParseResult[T]](((x6: ParseResult[_]) => // one[ParseResult[T]](x6.asInstanceOf[ParseResult[T]]))))))))): Option[ParseResult[T]] // ).orElse[ParseResult[T]]((zero: Option[ParseResult[T]])))) // } diff --git a/test/files/pos/virtpatmat_exist3.scala b/test/files/pos/virtpatmat_exist3.scala index c8f873878f..94385f32c9 100644 --- a/test/files/pos/virtpatmat_exist3.scala +++ b/test/files/pos/virtpatmat_exist3.scala @@ -4,8 +4,8 @@ class ReferenceQueue[T] { case null => null } - // def wrapper(jref: ReferenceQueue[_]): ReferenceQueue[T] = OptionMatching.runOrElse(jref)(((x1: ReferenceQueue[_]) => - // (OptionMatching.guard(null.==(x1), x1.asInstanceOf[ReferenceQueue[_]]).flatMap(((x2: ReferenceQueue[_]) => + // def wrapper(jref: ReferenceQueue[_]): ReferenceQueue[T] = OptionMatching.runOrElse(jref)(((x1: ReferenceQueue[_]) => + // (OptionMatching.guard(null.==(x1), x1.asInstanceOf[ReferenceQueue[_]]).flatMap(((x2: ReferenceQueue[_]) => // OptionMatching.one(null))): Option[ReferenceQueue[T]]).orElse( // (OptionMatching.zero: Option[ReferenceQueue[T]]))) // ) diff --git a/test/files/pos/virtpatmat_gadt_array.scala b/test/files/pos/virtpatmat_gadt_array.scala index 27e72aa03e..f3332a897f 100644 --- a/test/files/pos/virtpatmat_gadt_array.scala +++ b/test/files/pos/virtpatmat_gadt_array.scala @@ -4,12 +4,12 @@ object Test { case x: Array[AnyRef] => refArrayOps[AnyRef](x).asInstanceOf[ArrayOps[T]] case null => null } - // def genericArrayOps[T >: Nothing <: Any](xs: Array[T]): scala.collection.mutable.ArrayOps[T] - // = OptionMatching.runOrElse(xs)(((x1: Array[T]) => - // ((OptionMatching.guard(x1.isInstanceOf[Array[AnyRef]], x1.asInstanceOf[Array[T] with Array[AnyRef]]).flatMap(((x2: Array[T] with Array[AnyRef]) => + // def genericArrayOps[T >: Nothing <: Any](xs: Array[T]): scala.collection.mutable.ArrayOps[T] + // = OptionMatching.runOrElse(xs)(((x1: Array[T]) => + // ((OptionMatching.guard(x1.isInstanceOf[Array[AnyRef]], x1.asInstanceOf[Array[T] with Array[AnyRef]]).flatMap(((x2: Array[T] with Array[AnyRef]) => // OptionMatching.one(Test.this.refArrayOps[AnyRef](x2).asInstanceOf[scala.collection.mutable.ArrayOps[T]]))): Option[scala.collection.mutable.ArrayOps[T]]).orElse( - // (OptionMatching.guard(null.==(x1), x1.asInstanceOf[Array[T]]).flatMap(((x3: Array[T]) => + // (OptionMatching.guard(null.==(x1), x1.asInstanceOf[Array[T]]).flatMap(((x3: Array[T]) => // OptionMatching.one(null))): Option[scala.collection.mutable.ArrayOps[T]])): Option[scala.collection.mutable.ArrayOps[T]]).orElse((OptionMatching.zero: Option[scala.collection.mutable.ArrayOps[T]])))) - + def refArrayOps[T <: AnyRef](xs: Array[T]): ArrayOps[T] = new ArrayOps.ofRef[T](xs) }
\ No newline at end of file |