aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDmitry Petrashko <dmitry.petrashko@gmail.com>2016-04-18 21:28:04 +0200
committerDmitry Petrashko <dmitry.petrashko@gmail.com>2016-06-07 14:18:27 +0200
commit4ce8ab06470db959aed3527f013a261bc4c3c9a0 (patch)
tree80fed807d4e19f4dd0090b78cc2e2df5c3f3b12b /src
parentdb6a07d445ab1e31888a779b70d41ffda129bb66 (diff)
downloaddotty-4ce8ab06470db959aed3527f013a261bc4c3c9a0.tar.gz
dotty-4ce8ab06470db959aed3527f013a261bc4c3c9a0.tar.bz2
dotty-4ce8ab06470db959aed3527f013a261bc4c3c9a0.zip
Allow creating static initialisers.
Diffstat (limited to 'src')
-rw-r--r--src/dotty/tools/dotc/core/Names.scala1
-rw-r--r--src/dotty/tools/dotc/transform/TreeChecker.scala5
2 files changed, 5 insertions, 1 deletions
diff --git a/src/dotty/tools/dotc/core/Names.scala b/src/dotty/tools/dotc/core/Names.scala
index 223d95045..11f0b55a8 100644
--- a/src/dotty/tools/dotc/core/Names.scala
+++ b/src/dotty/tools/dotc/core/Names.scala
@@ -335,6 +335,7 @@ object Names {
// can't move CONSTRUCTOR/EMPTY_PACKAGE to `nme` because of bootstrap failures in `encode`.
val CONSTRUCTOR = termName("<init>")
+ val STATIC_CONSTRUCTOR = termName("<clinit>")
val EMPTY_PACKAGE = termName("<empty>")
val dontEncode = Set(CONSTRUCTOR, EMPTY_PACKAGE)
diff --git a/src/dotty/tools/dotc/transform/TreeChecker.scala b/src/dotty/tools/dotc/transform/TreeChecker.scala
index 0dce0fd36..ce160d7b0 100644
--- a/src/dotty/tools/dotc/transform/TreeChecker.scala
+++ b/src/dotty/tools/dotc/transform/TreeChecker.scala
@@ -26,6 +26,9 @@ import collection.mutable
import ProtoTypes._
import config.Printers
import java.lang.AssertionError
+
+import dotty.tools.dotc.core.Names
+
import scala.util.control.NonFatal
/** Run by -Ycheck option after a given phase, this class retypes all syntax trees
@@ -382,7 +385,7 @@ class TreeChecker extends Phase with SymTransformer {
override def typedDefDef(ddef: untpd.DefDef, sym: Symbol)(implicit ctx: Context) =
withDefinedSyms(ddef.tparams) {
withDefinedSymss(ddef.vparamss) {
- if (!sym.isClassConstructor) assert(isValidJVMMethodName(sym.name), s"${sym.fullName} name is invalid on jvm")
+ if (!sym.isClassConstructor && !(sym.name eq Names.STATIC_CONSTRUCTOR)) assert(isValidJVMMethodName(sym.name), s"${sym.fullName} name is invalid on jvm")
val tpdTree = super.typedDefDef(ddef, sym)
assert(isMethodType(sym.info), i"wrong type, expect a method type for ${sym.fullName}, but found: ${sym.info}")
tpdTree