diff options
author | Martin Odersky <odersky@gmail.com> | 2013-12-06 14:36:57 +0100 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2013-12-06 14:37:04 +0100 |
commit | e3aa7d4042496a0e44f2086943ad3c29a7b8c8b8 (patch) | |
tree | 1add6850ac11c85d8658138537db7faf3c80eb1c /src/dotty/tools | |
parent | ad37a192feb2eb0e2ab7415b9ec744310534f39d (diff) | |
download | dotty-e3aa7d4042496a0e44f2086943ad3c29a7b8c8b8.tar.gz dotty-e3aa7d4042496a0e44f2086943ad3c29a7b8c8b8.tar.bz2 dotty-e3aa7d4042496a0e44f2086943ad3c29a7b8c8b8.zip |
Empty type trees in desugarings need a TypeTree(), not an EmptyTree
Diffstat (limited to 'src/dotty/tools')
-rw-r--r-- | src/dotty/tools/dotc/ast/Desugar.scala | 8 | ||||
-rw-r--r-- | src/dotty/tools/dotc/ast/Trees.scala | 2 |
2 files changed, 6 insertions, 4 deletions
diff --git a/src/dotty/tools/dotc/ast/Desugar.scala b/src/dotty/tools/dotc/ast/Desugar.scala index fc7486efa..7904a9388 100644 --- a/src/dotty/tools/dotc/ast/Desugar.scala +++ b/src/dotty/tools/dotc/ast/Desugar.scala @@ -206,7 +206,7 @@ object desugar { if (mods is Case) { val caseParams = vparamss.head.toArray def syntheticProperty(name: TermName, rhs: Tree) = - DefDef(synthetic, name, Nil, Nil, EmptyTree, rhs) + DefDef(synthetic, name, Nil, Nil, TypeTree(), rhs) val isDefinedMeth = syntheticProperty(nme.isDefined, Literal(Constant(true))) val productArityMeth = syntheticProperty(nme.productArity, Literal(Constant(caseParams.length))) val productElemMeths = for (i <- 0 until caseParams.length) yield @@ -218,7 +218,7 @@ object desugar { cpy.ValDef(vparam, vparam.mods, vparam.name, vparam.tpt, refOfDef(vparam))) val copyRestParamss = vparamss.tail.nestedMap(vparam => cpy.ValDef(vparam, vparam.mods, vparam.name, vparam.tpt, EmptyTree)) - DefDef(synthetic, nme.copy, tparams, copyFirstParams :: copyRestParamss, EmptyTree, creatorExpr) :: Nil + DefDef(synthetic, nme.copy, tparams, copyFirstParams :: copyRestParamss, TypeTree(), creatorExpr) :: Nil } copyMeths ::: isDefinedMeth :: productArityMeth :: productElemMeths.toList } @@ -254,11 +254,11 @@ object desugar { else (vparamss :\ classTypeRef) ((vparams, restpe) => Function(vparams map (_.tpt), restpe)) val applyMeths = if (mods is Abstract) Nil - else DefDef(synthetic, nme.apply, tparams, vparamss, EmptyTree, creatorExpr) :: Nil + else DefDef(synthetic, nme.apply, tparams, vparamss, TypeTree(), creatorExpr) :: Nil val unapplyMeth = { val unapplyParam = makeSyntheticParameter(tpt = classTypeRef) DefDef(synthetic, nme.unapply, tparams, (unapplyParam :: Nil) :: Nil, - EmptyTree, Ident(unapplyParam.name)) + TypeTree(), Ident(unapplyParam.name)) } companionDefs(parent, applyMeths ::: unapplyMeth :: defaultGetters) } diff --git a/src/dotty/tools/dotc/ast/Trees.scala b/src/dotty/tools/dotc/ast/Trees.scala index c1039a996..388cf8579 100644 --- a/src/dotty/tools/dotc/ast/Trees.scala +++ b/src/dotty/tools/dotc/ast/Trees.scala @@ -651,6 +651,7 @@ object Trees { extends ValOrDefDef[T] { type ThisTree[-T >: Untyped] = ValDef[T] def withName(name: Name)(implicit ctx: Context): untpd.ValDef = untpd.cpy.ValDef(this, mods, name.toTermName, tpt, rhs) + assert(isEmpty || tpt != genericEmptyTree) } /** mods def name[tparams](vparams_1)...(vparams_n): tpt = rhs */ @@ -658,6 +659,7 @@ object Trees { extends ValOrDefDef[T] { type ThisTree[-T >: Untyped] = DefDef[T] def withName(name: Name)(implicit ctx: Context): untpd.DefDef = untpd.cpy.DefDef(this, mods, name.toTermName, tparams, vparamss, tpt, rhs) + assert(tpt != genericEmptyTree) } /** mods class name template or |