summaryrefslogtreecommitdiff
path: root/src/compiler/scala/tools/nsc/typechecker/Typers.scala
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2006-03-11 23:07:10 +0000
committerMartin Odersky <odersky@gmail.com>2006-03-11 23:07:10 +0000
commit7cb7defbd4063d6c4cbd42a9222f51fe09346dab (patch)
tree799a8fddde6fa6a71e96d286fa13bbe98f7ab79f /src/compiler/scala/tools/nsc/typechecker/Typers.scala
parent74d770b456e0d907b35fae994ee4acb4a7fd3d63 (diff)
downloadscala-7cb7defbd4063d6c4cbd42a9222f51fe09346dab.tar.gz
scala-7cb7defbd4063d6c4cbd42a9222f51fe09346dab.tar.bz2
scala-7cb7defbd4063d6c4cbd42a9222f51fe09346dab.zip
Bug fixes
Diffstat (limited to 'src/compiler/scala/tools/nsc/typechecker/Typers.scala')
-rw-r--r--src/compiler/scala/tools/nsc/typechecker/Typers.scala12
1 files changed, 8 insertions, 4 deletions
diff --git a/src/compiler/scala/tools/nsc/typechecker/Typers.scala b/src/compiler/scala/tools/nsc/typechecker/Typers.scala
index 4482480496..7d1b5a9c78 100644
--- a/src/compiler/scala/tools/nsc/typechecker/Typers.scala
+++ b/src/compiler/scala/tools/nsc/typechecker/Typers.scala
@@ -273,7 +273,8 @@ trait Typers requires Analyzer {
if (tree.symbol.hasFlag(OVERLOADED) && (mode & FUNmode) == 0)
inferExprAlternative(tree, pt)
val sym = tree.symbol
- if ((mode & (PATTERNmode | FUNmode)) == PATTERNmode && tree.isTerm) { // (1)
+ if (tree.tpe.isError) tree
+ else if ((mode & (PATTERNmode | FUNmode)) == PATTERNmode && tree.isTerm) { // (1)
checkStable(tree)
} else if ((mode & (EXPRmode | QUALmode)) == EXPRmode && !sym.isValue) { // (2)
errorTree(tree, ""+sym+" is not a value")
@@ -407,6 +408,8 @@ trait Typers requires Analyzer {
case NoType =>
errorTree(tree, "expected pattern type "+pt +
" does not conform to sequence "+clazz)
+ case ErrorType =>
+ setError(tree)
}
} else {
if (!tree.tpe.isError)
@@ -552,7 +555,7 @@ trait Typers requires Analyzer {
*/
def validateParentClasses(parents: List[Tree], selfType: Type): unit = {
- def validateParentClass(parent: Tree, superclazz: Symbol): unit =
+ def validateParentClass(parent: Tree, superclazz: Symbol): unit = {
if (!parent.tpe.isError) {
val psym = parent.tpe.symbol.initialize
if (!psym.isClass)
@@ -585,8 +588,10 @@ trait Typers requires Analyzer {
if (parents exists (p => p != parent && p.tpe.symbol == psym && !psym.isError))
error(parent.pos, ""+psym+" is inherited twice")
}
+ }
- for (val p <- parents) validateParentClass(p, parents.head.tpe.symbol)
+ if (!parents.head.tpe.isError)
+ for (val p <- parents) validateParentClass(p, parents.head.tpe.symbol)
}
def typedClassDef(cdef: ClassDef): Tree = {
@@ -1172,7 +1177,6 @@ trait Typers requires Analyzer {
val tree1 = if (qual == EmptyTree) tree
else atPos(tree.pos)(Select(qual, name));
// atPos necessary because qualifier might come from startContext
- //System.out.println("check acc: "+defSym+" "+pre);//DEBUG
stabilize(checkAccessible(tree1, defSym, pre, qual), pre, mode, pt)
}