diff options
author | Martin Odersky <odersky@gmail.com> | 2006-03-11 23:07:10 +0000 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2006-03-11 23:07:10 +0000 |
commit | 7cb7defbd4063d6c4cbd42a9222f51fe09346dab (patch) | |
tree | 799a8fddde6fa6a71e96d286fa13bbe98f7ab79f /src/compiler/scala/tools/nsc/typechecker/Typers.scala | |
parent | 74d770b456e0d907b35fae994ee4acb4a7fd3d63 (diff) | |
download | scala-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.scala | 12 |
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) } |