diff options
author | Martin Odersky <odersky@gmail.com> | 2016-09-26 08:44:39 +0200 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2016-09-26 08:44:39 +0200 |
commit | 41ff7c286525855e345fc0641481a7cd9ec2ccee (patch) | |
tree | 016603fb46de92b66c1061550d185dcf84784e49 /src | |
parent | d096f004b5e6ad88ec406b4ca0163a9cdd4fcb17 (diff) | |
download | dotty-41ff7c286525855e345fc0641481a7cd9ec2ccee.tar.gz dotty-41ff7c286525855e345fc0641481a7cd9ec2ccee.tar.bz2 dotty-41ff7c286525855e345fc0641481a7cd9ec2ccee.zip |
Drop tpd.modsDeco
Prefer to access directly via symbol.
Diffstat (limited to 'src')
-rw-r--r-- | src/dotty/tools/backend/jvm/DottyBackendInterface.scala | 6 | ||||
-rw-r--r-- | src/dotty/tools/dotc/ast/TreeInfo.scala | 27 | ||||
-rw-r--r-- | src/dotty/tools/dotc/ast/Trees.scala | 7 | ||||
-rw-r--r-- | src/dotty/tools/dotc/ast/tpd.scala | 4 | ||||
-rw-r--r-- | src/dotty/tools/dotc/ast/untpd.scala | 17 | ||||
-rw-r--r-- | src/dotty/tools/dotc/printing/RefinedPrinter.scala | 6 | ||||
-rw-r--r-- | src/dotty/tools/dotc/transform/LazyVals.scala | 6 | ||||
-rw-r--r-- | src/dotty/tools/dotc/transform/TreeChecker.scala | 1 |
8 files changed, 28 insertions, 46 deletions
diff --git a/src/dotty/tools/backend/jvm/DottyBackendInterface.scala b/src/dotty/tools/backend/jvm/DottyBackendInterface.scala index 34bcd0757..c70cb4be2 100644 --- a/src/dotty/tools/backend/jvm/DottyBackendInterface.scala +++ b/src/dotty/tools/backend/jvm/DottyBackendInterface.scala @@ -944,7 +944,7 @@ class DottyBackendInterface(outputDirectory: AbstractFile, val superCallsMap: Ma } object ValDef extends ValDefDeconstructor { - def _1: Modifiers = field.mods + def _1: Modifiers = tpd.Modifiers(field.symbol) def _2: Name = field.name def _3: Tree = field.tpt def _4: Tree = field.rhs @@ -1055,7 +1055,7 @@ class DottyBackendInterface(outputDirectory: AbstractFile, val superCallsMap: Ma } object DefDef extends DefDefDeconstructor { - def _1: Modifiers = field.mods + def _1: Modifiers = tpd.Modifiers(field.symbol) def _2: Name = field.name def _3: List[TypeDef] = field.tparams def _4: List[List[ValDef]] = field.vparamss @@ -1081,7 +1081,7 @@ class DottyBackendInterface(outputDirectory: AbstractFile, val superCallsMap: Ma } object ClassDef extends ClassDefDeconstructor { - def _1: Modifiers = field.mods + def _1: Modifiers = tpd.Modifiers(field.symbol) def _2: Name = field.name def _4: Template = field.rhs.asInstanceOf[Template] def _3: List[TypeDef] = Nil diff --git a/src/dotty/tools/dotc/ast/TreeInfo.scala b/src/dotty/tools/dotc/ast/TreeInfo.scala index d6df204c1..725838ef6 100644 --- a/src/dotty/tools/dotc/ast/TreeInfo.scala +++ b/src/dotty/tools/dotc/ast/TreeInfo.scala @@ -249,17 +249,6 @@ trait TreeInfo[T >: Untyped <: Type] { self: Trees.Instance[T] => /** Is this case guarded? */ def isGuardedCase(cdef: CaseDef) = cdef.guard ne EmptyTree - /** True iff definition is a val or def with no right-hand-side, or it - * is an abstract typoe declaration - */ - def lacksDefinition(mdef: MemberDef)(implicit ctx: Context) = mdef match { - case mdef: ValOrDefDef => - mdef.unforcedRhs == EmptyTree && !mdef.name.isConstructorName && !mdef.mods.is(ParamAccessor) - case mdef: TypeDef => - mdef.rhs.isEmpty || mdef.rhs.isInstanceOf[TypeBoundsTree] - case _ => false - } - /** The underlying pattern ignoring any bindings */ def unbind(x: Tree): Tree = unsplice(x) match { case Bind(_, y) => unbind(y) @@ -279,9 +268,21 @@ trait TreeInfo[T >: Untyped <: Type] { self: Trees.Instance[T] => trait UntypedTreeInfo extends TreeInfo[Untyped] { self: Trees.Instance[Untyped] => import TreeInfo._ + import untpd._ + + /** True iff definition is a val or def with no right-hand-side, or it + * is an abstract typoe declaration + */ + def lacksDefinition(mdef: MemberDef)(implicit ctx: Context) = mdef match { + case mdef: ValOrDefDef => + mdef.unforcedRhs == EmptyTree && !mdef.name.isConstructorName && !mdef.mods.is(ParamAccessor) + case mdef: TypeDef => + mdef.rhs.isEmpty || mdef.rhs.isInstanceOf[TypeBoundsTree] + case _ => false + } def isFunctionWithUnknownParamType(tree: Tree) = tree match { - case untpd.Function(args, _) => + case Function(args, _) => args.exists { case ValDef(_, tpt, _) => tpt.isEmpty case _ => false @@ -307,7 +308,7 @@ trait TypedTreeInfo extends TreeInfo[Type] { self: Trees.Instance[Type] => | DefDef(_, _, _, _, _) => Pure case vdef @ ValDef(_, _, _) => - if (vdef.mods is Mutable) Impure else exprPurity(vdef.rhs) + if (vdef.symbol.flags is Mutable) Impure else exprPurity(vdef.rhs) case _ => Impure } diff --git a/src/dotty/tools/dotc/ast/Trees.scala b/src/dotty/tools/dotc/ast/Trees.scala index 528e3c589..061a0c019 100644 --- a/src/dotty/tools/dotc/ast/Trees.scala +++ b/src/dotty/tools/dotc/ast/Trees.scala @@ -322,7 +322,7 @@ object Trees { private[this] var myMods: Modifiers[T] = null - private[ast] def rawMods: Modifiers[T] = + private[dotc] def rawMods: Modifiers[T] = if (myMods == null) genericEmptyModifiers else myMods def rawComment: Option[Comment] = getAttachment(DocComment) @@ -870,11 +870,6 @@ object Trees { case ys => Thicket(ys) } - // ----- Accessing modifiers ---------------------------------------------------- - - abstract class ModsDeco { def mods: Modifiers } - implicit def modsDeco(mdef: MemberDef)(implicit ctx: Context): ModsDeco - // ----- Helper classes for copying, transforming, accumulating ----------------- val cpy: TreeCopier diff --git a/src/dotty/tools/dotc/ast/tpd.scala b/src/dotty/tools/dotc/ast/tpd.scala index 31a9c6975..355843cad 100644 --- a/src/dotty/tools/dotc/ast/tpd.scala +++ b/src/dotty/tools/dotc/ast/tpd.scala @@ -446,10 +446,6 @@ object tpd extends Trees.Instance[Type] with TypedTreeInfo { } else foldOver(sym, tree) } - implicit class modsDeco(mdef: MemberDef)(implicit ctx: Context) extends ModsDeco { - def mods = if (mdef.hasType) Modifiers(mdef.symbol) else mdef.rawMods - } - override val cpy = new TypedTreeCopier class TypedTreeCopier extends TreeCopier { diff --git a/src/dotty/tools/dotc/ast/untpd.scala b/src/dotty/tools/dotc/ast/untpd.scala index d6af6ecd0..102ee2e4e 100644 --- a/src/dotty/tools/dotc/ast/untpd.scala +++ b/src/dotty/tools/dotc/ast/untpd.scala @@ -264,22 +264,11 @@ object untpd extends Trees.Instance[Untyped] with UntypedTreeInfo { /** A repeated argument such as `arg: _*` */ def repeated(arg: Tree)(implicit ctx: Context) = Typed(arg, Ident(tpnme.WILDCARD_STAR)) -// ------- Decorators ------------------------------------------------- +// ----- Accessing modifiers ---------------------------------------------------- - implicit class UntypedTreeDecorator(val self: Tree) extends AnyVal { - def locateEnclosing(base: List[Tree], pos: Position): List[Tree] = { - def encloses(elem: Any) = elem match { - case t: Tree => t.pos contains pos - case _ => false - } - base.productIterator find encloses match { - case Some(tree: Tree) => locateEnclosing(tree :: base, pos) - case none => base - } - } - } + abstract class ModsDecorator { def mods: Modifiers } - implicit class modsDeco(val mdef: MemberDef)(implicit ctx: Context) extends ModsDeco { + implicit class modsDeco(val mdef: MemberDef)(implicit ctx: Context) { def mods = mdef.rawMods } diff --git a/src/dotty/tools/dotc/printing/RefinedPrinter.scala b/src/dotty/tools/dotc/printing/RefinedPrinter.scala index 1125f5f01..8b91d1a7a 100644 --- a/src/dotty/tools/dotc/printing/RefinedPrinter.scala +++ b/src/dotty/tools/dotc/printing/RefinedPrinter.scala @@ -161,8 +161,10 @@ class RefinedPrinter(_ctx: Context) extends PlainPrinter(_ctx) { import untpd.{modsDeco => _, _} /** Print modifiers from symbols if tree has type, overriding the untpd behavior. */ - implicit def modsDeco(mdef: untpd.MemberDef)(implicit ctx: Context): untpd.ModsDeco = - tpd.modsDeco(mdef.asInstanceOf[tpd.MemberDef]).asInstanceOf[untpd.ModsDeco] + implicit def modsDeco(mdef: untpd.MemberDef)(implicit ctx: Context): untpd.ModsDecorator = + new untpd.ModsDecorator { + def mods = if (mdef.hasType) tpd.Modifiers(mdef.symbol) else mdef.rawMods + } def isLocalThis(tree: Tree) = tree.typeOpt match { case tp: ThisType => tp.cls == ctx.owner.enclosingClass diff --git a/src/dotty/tools/dotc/transform/LazyVals.scala b/src/dotty/tools/dotc/transform/LazyVals.scala index 424bc4f8e..e63a7c3a7 100644 --- a/src/dotty/tools/dotc/transform/LazyVals.scala +++ b/src/dotty/tools/dotc/transform/LazyVals.scala @@ -210,7 +210,7 @@ class LazyVals extends MiniPhaseTransform with IdentityDenotTransformer { def transformMemberDefNonVolatile(x: ValOrDefDef)(implicit ctx: Context) = { val claz = x.symbol.owner.asClass val tpe = x.tpe.widen.resultType.widen - assert(!(x.mods is Flags.Mutable)) + assert(!(x.symbol is Flags.Mutable)) val containerName = ctx.freshName(x.name.asTermName.lazyLocalName).toTermName val containerSymbol = ctx.newSymbol(claz, containerName, x.symbol.flags &~ containerFlagsMask | containerFlags | Flags.Private, @@ -331,7 +331,7 @@ class LazyVals extends MiniPhaseTransform with IdentityDenotTransformer { } def transformMemberDefVolatile(x: ValOrDefDef)(implicit ctx: Context) = { - assert(!(x.mods is Flags.Mutable)) + assert(!(x.symbol is Flags.Mutable)) val tpe = x.tpe.widen.resultType.widen val claz = x.symbol.owner.asClass @@ -377,7 +377,7 @@ class LazyVals extends MiniPhaseTransform with IdentityDenotTransformer { } val containerName = ctx.freshName(x.name.asTermName.lazyLocalName).toTermName - val containerSymbol = ctx.newSymbol(claz, containerName, (x.mods &~ containerFlagsMask | containerFlags).flags, tpe, coord = x.symbol.coord).enteredAfter(this) + val containerSymbol = ctx.newSymbol(claz, containerName, x.symbol.flags &~ containerFlagsMask | containerFlags, tpe, coord = x.symbol.coord).enteredAfter(this) val containerTree = ValDef(containerSymbol, defaultValue(tpe)) diff --git a/src/dotty/tools/dotc/transform/TreeChecker.scala b/src/dotty/tools/dotc/transform/TreeChecker.scala index 7cd1267b8..e7342aec9 100644 --- a/src/dotty/tools/dotc/transform/TreeChecker.scala +++ b/src/dotty/tools/dotc/transform/TreeChecker.scala @@ -164,7 +164,6 @@ class TreeChecker extends Phase with SymTransformer { tree match { case t: MemberDef => if (t.name ne sym.name) ctx.warning(s"symbol ${sym.fullName} name doesn't correspond to AST: ${t}") - if (sym.flags != t.mods.flags) ctx.warning(s"symbol ${sym.fullName} flags ${sym.flags} doesn't match AST definition flags ${t.mods.flags}") // todo: compare trees inside annotations case _ => } |