From e69ee3676dec6023a0d552a6dbabf9ffd29a7111 Mon Sep 17 00:00:00 2001 From: Paul Phillips Date: Tue, 1 May 2012 18:27:05 -0700 Subject: Hackaround for people who like to instantiate the uninstantiable. Closes SI-5666 again. (I don't have the least clue how I'm supposed to issue the error.) --- .../scala/tools/nsc/typechecker/Typers.scala | 4 +++ test/files/neg/t5666.check | 29 +++++++++++++++++++++- 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/src/compiler/scala/tools/nsc/typechecker/Typers.scala b/src/compiler/scala/tools/nsc/typechecker/Typers.scala index 89c30590c9..9c13c630b1 100644 --- a/src/compiler/scala/tools/nsc/typechecker/Typers.scala +++ b/src/compiler/scala/tools/nsc/typechecker/Typers.scala @@ -3925,6 +3925,10 @@ trait Typers extends Modes with Adaptations with Taggings with PatMatVirtualiser val sym = tp.typeSymbol.initialize if (sym.isAbstractType || sym.hasAbstractFlag) IsAbstractError(tree, sym) + else if (isPrimitiveValueClass(sym)) { + NotAMemberError(tpt, TypeTree(tp), nme.CONSTRUCTOR) + setError(tpt) + } else if (!( tp == sym.thisSym.tpe // when there's no explicit self type -- with (#3612) or without self variable // sym.thisSym.tpe == tp.typeOfThis (except for objects) || narrowRhs(tp) <:< tp.typeOfThis diff --git a/test/files/neg/t5666.check b/test/files/neg/t5666.check index 2b8b9077bb..4289b00ade 100644 --- a/test/files/neg/t5666.check +++ b/test/files/neg/t5666.check @@ -4,7 +4,34 @@ t5666.scala:2: error: class Any is abstract; cannot be instantiated t5666.scala:3: error: class AnyVal is abstract; cannot be instantiated new AnyVal ^ +t5666.scala:4: error: Double does not have a constructor + new Double + ^ +t5666.scala:5: error: Float does not have a constructor + new Float + ^ +t5666.scala:6: error: Long does not have a constructor + new Long + ^ +t5666.scala:7: error: Int does not have a constructor + new Int + ^ +t5666.scala:8: error: Char does not have a constructor + new Char + ^ +t5666.scala:9: error: Short does not have a constructor + new Short + ^ +t5666.scala:10: error: Byte does not have a constructor + new Byte + ^ +t5666.scala:11: error: Boolean does not have a constructor + new Boolean + ^ +t5666.scala:12: error: Unit does not have a constructor + new Unit + ^ t5666.scala:13: error: class Nothing is abstract; cannot be instantiated new Nothing ^ -three errors found +12 errors found -- cgit v1.2.3