summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2006-11-21 19:38:53 +0000
committerMartin Odersky <odersky@gmail.com>2006-11-21 19:38:53 +0000
commit2a19832b23b9d1c5a07b984b72d910ae00c3f467 (patch)
tree0625b177d6e94550c93f5230f249379971d40e07 /src
parent6e5b3945dd40ef553a95b9f1585fe7621c4f604e (diff)
downloadscala-2a19832b23b9d1c5a07b984b72d910ae00c3f467.tar.gz
scala-2a19832b23b9d1c5a07b984b72d910ae00c3f467.tar.bz2
scala-2a19832b23b9d1c5a07b984b72d910ae00c3f467.zip
fixed bug 831
Diffstat (limited to 'src')
-rw-r--r--src/compiler/scala/tools/nsc/ast/parser/Parsers.scala12
-rw-r--r--src/compiler/scala/tools/nsc/symtab/Types.scala2
-rw-r--r--src/compiler/scala/tools/nsc/transform/AddInterfaces.scala13
-rw-r--r--src/compiler/scala/tools/nsc/typechecker/TreeCheckers.scala4
4 files changed, 17 insertions, 14 deletions
diff --git a/src/compiler/scala/tools/nsc/ast/parser/Parsers.scala b/src/compiler/scala/tools/nsc/ast/parser/Parsers.scala
index 7a175d7c8c..86219c6876 100644
--- a/src/compiler/scala/tools/nsc/ast/parser/Parsers.scala
+++ b/src/compiler/scala/tools/nsc/ast/parser/Parsers.scala
@@ -556,7 +556,7 @@ trait Parsers requires SyntaxAnalyzer {
}
/** Type1 ::= SimpleType {with SimpleType} [Refinement]
- * TypePattern1 ::= SimpleTypePattern {with SimpleTypePattern}
+ * TypePattern ::= SimpleTypePattern {with SimpleTypePattern}
*/
def type1(isPattern: boolean): Tree =
type1rest(in.currentPos, simpleType(isPattern), isPattern)
@@ -578,7 +578,7 @@ trait Parsers requires SyntaxAnalyzer {
* | Path `.' type
* | `(' Type `)'
* SimpleTypePattern ::= SimpleTypePattern TypePatternArgs
- * | SimpleTypePattern1 "#" Id
+ * SimpleTypePattern1 ::= SimpleTypePattern1 "#" Id
* | StableId
* | Path `.' type
*/
@@ -1109,11 +1109,11 @@ trait Parsers requires SyntaxAnalyzer {
def pattern(): Tree = pattern(false)
- /** Pattern1 ::= varid `:' TypePattern1
- * | `_' `:' TypePattern1
+ /** Pattern1 ::= varid `:' TypePattern
+ * | `_' `:' TypePattern
* | Pattern2
- * SeqPattern1 ::= varid `:' TypePattern1
- * | `_' `:' TypePattern1
+ * SeqPattern1 ::= varid `:' TypePattern
+ * | `_' `:' TypePattern
* | [SeqPattern2]
*/
def pattern1(seqOK: boolean): Tree = {
diff --git a/src/compiler/scala/tools/nsc/symtab/Types.scala b/src/compiler/scala/tools/nsc/symtab/Types.scala
index 74a47ddb51..fa68dc4402 100644
--- a/src/compiler/scala/tools/nsc/symtab/Types.scala
+++ b/src/compiler/scala/tools/nsc/symtab/Types.scala
@@ -1665,7 +1665,7 @@ trait Types requires SymbolTable {
val bcs = pre.baseClasses.dropWhile(bc => !corresponds(bc, sym.owner));
assert(!bcs.isEmpty)
rebind0 = pre.baseType(bcs.head).member(sym.name)
- if (settings.debug.value) Console.println("ADAPT2 pre = "+pre+", sym = "+sym+sym.locationString+", rebind = "+rebind0+rebind0.locationString)
+ if (settings.debug.value) Console.println("ADAPT2 pre = "+pre+", bcs.head = "+bcs.head+", sym = "+sym+sym.locationString+", rebind = "+rebind0+(if (rebind0 == NoSymbol) "" else rebind0.locationString))
}
val rebind = rebind0.suchThat(sym => sym.isType || sym.isStable)
if (rebind == NoSymbol) {
diff --git a/src/compiler/scala/tools/nsc/transform/AddInterfaces.scala b/src/compiler/scala/tools/nsc/transform/AddInterfaces.scala
index 37138d2638..c6dae63c2f 100644
--- a/src/compiler/scala/tools/nsc/transform/AddInterfaces.scala
+++ b/src/compiler/scala/tools/nsc/transform/AddInterfaces.scala
@@ -63,18 +63,20 @@ abstract class AddInterfaces extends InfoTransform {
sym.isMethod && isInterfaceMember(sym) &&
(!(sym hasFlag (DEFERRED | SUPERACCESSOR)) || (sym hasFlag lateDEFERRED))
+ def implClassPhase = currentRun.erasurePhase.next
+
/** Return the implementation class of a trait; create a new one of one does not yet exist */
def implClass(iface: Symbol): Symbol = implClassMap.get(iface) match {
case Some(c) => c
case None =>
- atPhase(currentRun.erasurePhase) {
+ atPhase(implClassPhase) {
val implName = nme.implClassName(iface.name)
var impl = if (iface.owner.isClass) iface.owner.info.decl(implName) else NoSymbol
if (impl == NoSymbol) {
impl = iface.cloneSymbolImpl(iface.owner)
impl.name = implName
if (iface.owner.isClass) {
- atPhase(phase.next) {
+ atPhase(currentRun.erasurePhase.next) {
val decls = iface.owner.info.decls
val e = decls.lookupEntry(impl.name)
if (e eq null) {
@@ -156,15 +158,16 @@ abstract class AddInterfaces extends InfoTransform {
override def complete(sym: Symbol): unit = {
def implType(tp: Type): Type = tp match {
case ClassInfoType(parents, decls, _) =>
- //ClassInfoType(mixinToImplClass(parents) ::: List(iface.tpe), implDecls(sym, decls), sym)
+ //Console.println("completing "+sym+" at "+phase+", decls = "+decls)
+ //ClassInfoType(mixinToImplClass(parents) ::: List(iface.tpe), implDecls(sym, 0decls), sym)
ClassInfoType(
ObjectClass.tpe :: (parents.tail map mixinToImplClass) ::: List(iface.tpe),
implDecls(sym, decls),
sym)
case PolyType(tparams, restpe) =>
- PolyType(tparams, implType(restpe))
+ implType(restpe)
}
- sym.setInfo(atPhase(currentRun.erasurePhase)(implType(iface.info)))
+ sym.setInfo(atPhase(implClassPhase)(implType(atPhase(currentRun.erasurePhase)(iface.info))))
}
override def load(clazz: Symbol): unit = complete(clazz)
diff --git a/src/compiler/scala/tools/nsc/typechecker/TreeCheckers.scala b/src/compiler/scala/tools/nsc/typechecker/TreeCheckers.scala
index d2d0d64805..5871edbf10 100644
--- a/src/compiler/scala/tools/nsc/typechecker/TreeCheckers.scala
+++ b/src/compiler/scala/tools/nsc/typechecker/TreeCheckers.scala
@@ -68,13 +68,13 @@ abstract class TreeCheckers extends Analyzer {
if (tree.symbol.hasFlag(ACCESSOR) &&
!tree.symbol.hasFlag(DEFERRED) &&
!tree.symbol.tpe.resultType.isInstanceOf[ConstantType]) {
- assert(tree.symbol.accessed != NoSymbol)
+ assert(tree.symbol.accessed != NoSymbol, tree.symbol)
assert(tree.symbol.accessed.getter(tree.symbol.owner) == tree.symbol ||
tree.symbol.accessed.setter(tree.symbol.owner) == tree.symbol)
}
case ValDef(_, _, _, _) =>
if (tree.symbol.hasGetter) {
- assert(tree.symbol.getter(tree.symbol.owner) != NoSymbol)
+ assert(tree.symbol.getter(tree.symbol.owner) != NoSymbol, tree.symbol)
}
case Apply(_, args) =>
assert(args forall (EmptyTree !=))