From 981a0d142c0bec9d34bc1ddfff50658ecef82ff1 Mon Sep 17 00:00:00 2001 From: Martin Odersky Date: Tue, 8 Jul 2003 15:08:56 +0000 Subject: *** empty log message *** --- doc/reference/reference.verb.tex | 4 ++-- sources/scalac/typechecker/Analyzer.java | 3 ++- sources/scalac/typechecker/DeSugarize.java | 2 +- test/files/neg/S4.check | 6 +++--- test/files/neg/vincent1.check | 7 +++++-- test/files/neg/vincent1.scala | 2 ++ test/neg/S4.check | 6 +++--- test/neg/vincent1.check | 7 +++++-- test/neg/vincent1.scala | 2 ++ 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; -- cgit v1.2.3