From 52a8a0aec9da8a4eaa3faf95ec7acd3ecfbabf53 Mon Sep 17 00:00:00 2001 From: Martin Odersky Date: Sun, 27 Oct 2013 18:33:57 +0100 Subject: Fixed unpickling of polymorphic constructors. Constructors of parameterized classes now get polymorphic types when unpickled, as is the case when defining them or when reading them from a Java classfile. This caused a ripple of other faults which this commit also fixes. --- src/dotty/tools/dotc/core/pickling/ClassfileParser.scala | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) (limited to 'src/dotty/tools/dotc/core/pickling/ClassfileParser.scala') diff --git a/src/dotty/tools/dotc/core/pickling/ClassfileParser.scala b/src/dotty/tools/dotc/core/pickling/ClassfileParser.scala index b65fc55bb..a641e10cc 100644 --- a/src/dotty/tools/dotc/core/pickling/ClassfileParser.scala +++ b/src/dotty/tools/dotc/core/pickling/ClassfileParser.scala @@ -174,7 +174,7 @@ class ClassfileParser( val isEnum = (jflags & JAVA_ACC_ENUM) != 0 val name = pool.getName(in.nextChar) val isConstructor = name eq nme.CONSTRUCTOR - + /** Strip leading outer param from constructor. * Todo: Also strip trailing access tag for private inner constructors? */ @@ -190,10 +190,9 @@ class ClassfileParser( */ def normalizeConstructorInfo() = { val mt @ MethodType(paramnames, paramtypes) = denot.info - val typeParams = classRoot.typeParams - val rt = classRoot.typeConstructor appliedTo (typeParams map (_.symRef)) - denot.info = PolyType.fromSymbols(typeParams, - mt.derivedMethodType(paramnames, paramtypes, rt)) + val rt = classRoot.typeConstructor appliedTo (classRoot.typeParams map (_.symRef)) + denot.info = mt.derivedMethodType(paramnames, paramtypes, rt) + addConstructorTypeParams(denot) } denot.info = pool.getType(in.nextChar) -- cgit v1.2.3