summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/reference/reference.verb.tex4
-rw-r--r--sources/scalac/typechecker/Analyzer.java3
-rw-r--r--sources/scalac/typechecker/DeSugarize.java2
-rw-r--r--test/files/neg/S4.check6
-rw-r--r--test/files/neg/vincent1.check7
-rw-r--r--test/files/neg/vincent1.scala2
-rw-r--r--test/neg/S4.check6
-rw-r--r--test/neg/vincent1.check7
-rw-r--r--test/neg/vincent1.scala2
9 files changed, 25 insertions, 14 deletions
diff --git a/doc/reference/reference.verb.tex b/doc/reference/reference.verb.tex
index cca510c3aa..03471656bf 100644
--- a/doc/reference/reference.verb.tex
+++ b/doc/reference/reference.verb.tex
@@ -1487,8 +1487,8 @@ Constructor invocations define the type, members, and initial state of
objects created by an instance creation expression, or of parts of an
object's definition which are inherited by a class or module
definition. A constructor invocation is a designator or function
-application whose type is a class constructor type \verb@class T@, for
-some type \verb@T@.
+application whose function part is a stable identifier and whose type
+is a class constructor type \verb@class T@, for some type \verb@T@.
\subsection{Base Classes}
\label{sec:base-classes}
diff --git a/sources/scalac/typechecker/Analyzer.java b/sources/scalac/typechecker/Analyzer.java
index cb02f966ce..2dd60522d1 100644
--- a/sources/scalac/typechecker/Analyzer.java
+++ b/sources/scalac/typechecker/Analyzer.java
@@ -2168,7 +2168,8 @@ public class Analyzer extends Transformer implements Modifiers, Kinds {
case Select(Tree qual, Name name):
int qualmode = EXPRmode | POLYmode | QUALmode;
Tree qual1 = transform(qual, qualmode);
- if (name.isTypeName()) qual1 = checkStable(qual1);
+ if (name.isTypeName() || name.isConstrName())
+ qual1 = checkStable(qual1);
return transformSelect(
tree, adapt(qual1, qualmode, Type.AnyType), name);
diff --git a/sources/scalac/typechecker/DeSugarize.java b/sources/scalac/typechecker/DeSugarize.java
index df97f9623f..152aae0a5a 100644
--- a/sources/scalac/typechecker/DeSugarize.java
+++ b/sources/scalac/typechecker/DeSugarize.java
@@ -666,7 +666,7 @@ public class DeSugarize implements Kinds, Modifiers {
/** Build value element definition name for case parameter.
*/
void addCaseElement(TreeList ts, ValDef vparam) {
- //System.out.println("add case for " + vparam.name);//DEBUG
+ vparam.symbol().initialize();
ts.append(
make.ValDef(
vparam.pos, CASEACCESSOR, vparam.name, vparam.tpe,
diff --git a/test/files/neg/S4.check b/test/files/neg/S4.check
index 7fd616488b..49f79ba97a 100644
--- a/test/files/neg/S4.check
+++ b/test/files/neg/S4.check
@@ -1,4 +1,4 @@
-S4.scala:5: stable identifier required, but a found.
- def foo(x: a.Inner) = x;
- ^
+S4.scala:4: stable identifier required, but a found.
+class S4(a: Other) extends a.Inner() {
+ ^
one error found
diff --git a/test/files/neg/vincent1.check b/test/files/neg/vincent1.check
index b9243e7560..32dffd2884 100644
--- a/test/files/neg/vincent1.check
+++ b/test/files/neg/vincent1.check
@@ -1,4 +1,7 @@
-vincent1.scala:7: type x.type escapes its defining scope as part of test.B { type T = x.T }
+vincent1.scala:7: stable identifier required, but x found.
+ class Functor(x: A) { type T = x.T }
+ ^
+vincent1.scala:9: type x.type escapes its defining scope as part of test.B { type T = x.T }
def functor(x: A): B { type T = x.T } =
^
-one error found
+two errors found
diff --git a/test/files/neg/vincent1.scala b/test/files/neg/vincent1.scala
index 6082b271b3..fb047305ff 100644
--- a/test/files/neg/vincent1.scala
+++ b/test/files/neg/vincent1.scala
@@ -4,6 +4,8 @@ object test {
trait B { type T; }
+ class Functor(x: A) { type T = x.T }
+
def functor(x: A): B { type T = x.T } =
new B {
type T = x.T;
diff --git a/test/neg/S4.check b/test/neg/S4.check
index 7fd616488b..49f79ba97a 100644
--- a/test/neg/S4.check
+++ b/test/neg/S4.check
@@ -1,4 +1,4 @@
-S4.scala:5: stable identifier required, but a found.
- def foo(x: a.Inner) = x;
- ^
+S4.scala:4: stable identifier required, but a found.
+class S4(a: Other) extends a.Inner() {
+ ^
one error found
diff --git a/test/neg/vincent1.check b/test/neg/vincent1.check
index b9243e7560..32dffd2884 100644
--- a/test/neg/vincent1.check
+++ b/test/neg/vincent1.check
@@ -1,4 +1,7 @@
-vincent1.scala:7: type x.type escapes its defining scope as part of test.B { type T = x.T }
+vincent1.scala:7: stable identifier required, but x found.
+ class Functor(x: A) { type T = x.T }
+ ^
+vincent1.scala:9: type x.type escapes its defining scope as part of test.B { type T = x.T }
def functor(x: A): B { type T = x.T } =
^
-one error found
+two errors found
diff --git a/test/neg/vincent1.scala b/test/neg/vincent1.scala
index 6082b271b3..fb047305ff 100644
--- a/test/neg/vincent1.scala
+++ b/test/neg/vincent1.scala
@@ -4,6 +4,8 @@ object test {
trait B { type T; }
+ class Functor(x: A) { type T = x.T }
+
def functor(x: A): B { type T = x.T } =
new B {
type T = x.T;