summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2008-07-28 17:50:11 +0000
committerMartin Odersky <odersky@gmail.com>2008-07-28 17:50:11 +0000
commit8bacd7cf469bd3097070e74e8bb72010403d21e6 (patch)
tree6f736fe232c536623dfb4b2b68fcfa3c6a9621fd
parentd3b56e4b39fa5964e3876f9f7cdc89d19553f7ac (diff)
downloadscala-8bacd7cf469bd3097070e74e8bb72010403d21e6.tar.gz
scala-8bacd7cf469bd3097070e74e8bb72010403d21e6.tar.bz2
scala-8bacd7cf469bd3097070e74e8bb72010403d21e6.zip
fixed #1086, #1102, #1144
-rwxr-xr-xsrc/compiler/scala/tools/nsc/javac/JavaParsers.scala7
-rw-r--r--src/compiler/scala/tools/nsc/symtab/Types.scala7
-rw-r--r--src/compiler/scala/tools/nsc/symtab/classfile/UnPickler.scala11
-rw-r--r--src/compiler/scala/tools/nsc/typechecker/Typers.scala2
4 files changed, 20 insertions, 7 deletions
diff --git a/src/compiler/scala/tools/nsc/javac/JavaParsers.scala b/src/compiler/scala/tools/nsc/javac/JavaParsers.scala
index e187a07138..a8eb8a0f46 100755
--- a/src/compiler/scala/tools/nsc/javac/JavaParsers.scala
+++ b/src/compiler/scala/tools/nsc/javac/JavaParsers.scala
@@ -607,9 +607,14 @@ trait JavaParsers extends JavaScanners {
makeTemplate(List(javaLangObject()), statics))
}
+ def importCompanionObject(cdef: ClassDef): Tree =
+ atPos(cdef.pos) {
+ Import(Ident(cdef.name.toTermName), List((nme.WILDCARD, null)))
+ }
+
def addCompanionObject(statics: List[Tree], cdef: ClassDef): List[Tree] =
if (statics.isEmpty) List(cdef)
- else List(cdef, makeCompanionObject(cdef, statics))
+ else List(makeCompanionObject(cdef, statics), importCompanionObject(cdef), cdef)
def importDecl(): List[Tree] = {
accept(IMPORT)
diff --git a/src/compiler/scala/tools/nsc/symtab/Types.scala b/src/compiler/scala/tools/nsc/symtab/Types.scala
index 33eff2fb8a..0ac0519f6b 100644
--- a/src/compiler/scala/tools/nsc/symtab/Types.scala
+++ b/src/compiler/scala/tools/nsc/symtab/Types.scala
@@ -1315,9 +1315,10 @@ trait Types {
* @param args ...
*/
case class TypeRef(pre: Type, sym: Symbol, args: List[Type]) extends Type {
- assert(!checkMalformedSwitch || !sym.isAbstractType || pre.isStable || pre.isError)
- assert(!pre.isInstanceOf[ClassInfoType], this)
- assert(!(sym hasFlag (PARAM | EXISTENTIAL)) || pre == NoPrefix, this)
+// assert(!checkMalformedSwitch || !sym.isAbstractType || pre.isStable || pre.isError)
+// assert(!pre.isInstanceOf[ClassInfoType], this)
+// assert(!(sym hasFlag (PARAM | EXISTENTIAL)) || pre == NoPrefix, this)
+// assert(args.isEmpty || !sym.info.typeParams.isEmpty, this)
private var parentsCache: List[Type] = _
private var parentsPeriod = NoPeriod
diff --git a/src/compiler/scala/tools/nsc/symtab/classfile/UnPickler.scala b/src/compiler/scala/tools/nsc/symtab/classfile/UnPickler.scala
index f89a1e80bf..57445add42 100644
--- a/src/compiler/scala/tools/nsc/symtab/classfile/UnPickler.scala
+++ b/src/compiler/scala/tools/nsc/symtab/classfile/UnPickler.scala
@@ -228,7 +228,7 @@ abstract class UnPickler {
if (readIndex != end) new LazyTypeRefAndAlias(inforef, readNat())
else new LazyTypeRef(inforef))
if (sym.owner.isClass && sym != classRoot && sym != moduleRoot &&
- !sym.isModuleClass && !sym.isRefinementClass && !sym.isTypeParameter)
+ !sym.isModuleClass && !sym.isRefinementClass && !sym.isTypeParameter && !sym.isExistential)
symScope(sym.owner) enter sym
}
sym
@@ -250,7 +250,14 @@ abstract class UnPickler {
case CONSTANTtpe =>
mkConstantType(readConstantRef())
case TYPEREFtpe =>
- rawTypeRef(readTypeRef(), readSymbolRef(), until(end, readTypeRef))
+ val pre = readTypeRef()
+ val sym = readSymbolRef()
+ var args = until(end, readTypeRef)
+ if ((sym hasFlag JAVA) && sym.typeParams.isEmpty && global.settings.target.value != "jvm-1.5") {
+ // forget arguments, we are compiling for 1.4; see #1144
+ args = List()
+ }
+ rawTypeRef(pre, sym, args)
case TYPEBOUNDStpe =>
mkTypeBounds(readTypeRef(), readTypeRef())
case REFINEDtpe =>
diff --git a/src/compiler/scala/tools/nsc/typechecker/Typers.scala b/src/compiler/scala/tools/nsc/typechecker/Typers.scala
index a1c99aa049..97275ad526 100644
--- a/src/compiler/scala/tools/nsc/typechecker/Typers.scala
+++ b/src/compiler/scala/tools/nsc/typechecker/Typers.scala
@@ -3297,7 +3297,7 @@ trait Typers { self: Analyzer =>
case _ => tp
}
var tree1 = if (tree.tpe ne null) tree else typed1(tree, mode, dropExistential(pt))
-// Console.println("typed "+tree1+":"+tree1.tpe+", "+context.undetparams);//DEBUG
+// Console.println("typed "+tree1+":"+tree1.tpe+", "+context.undetparams+", pt = "+pt);//DEBUG
tree1.tpe = addAnnotations(tree1, tree1.tpe)