diff options
author | Martin Odersky <odersky@gmail.com> | 2011-07-30 21:04:43 +0000 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2011-07-30 21:04:43 +0000 |
commit | c0db3f2d065e22796a2c917c6c3b0f14f3982cf0 (patch) | |
tree | a21a5982ec9d0a6311843b2e1397192a3a64aecd /src/compiler/scala/reflect/internal/Trees.scala | |
parent | d0c5e4be5554f4862da0690ac0315a4433fcb5d5 (diff) | |
download | scala-c0db3f2d065e22796a2c917c6c3b0f14f3982cf0.tar.gz scala-c0db3f2d065e22796a2c917c6c3b0f14f3982cf0.tar.bz2 scala-c0db3f2d065e22796a2c917c6c3b0f14f3982cf0.zip |
LiftCode works again, now integrated with new r...
LiftCode works again, now integrated with new reflection library.
Other changes: def Literal(x: Any) has been deprecated, and all its uses removed.
Modifiers has lost positions as fourth case class argument; is now a field, mirroring Tree.pos (this removes junk in patterns and makes reification simpler). Review by extempore.
Diffstat (limited to 'src/compiler/scala/reflect/internal/Trees.scala')
-rw-r--r-- | src/compiler/scala/reflect/internal/Trees.scala | 26 |
1 files changed, 16 insertions, 10 deletions
diff --git a/src/compiler/scala/reflect/internal/Trees.scala b/src/compiler/scala/reflect/internal/Trees.scala index ef80b5d479..5ba1a1221e 100644 --- a/src/compiler/scala/reflect/internal/Trees.scala +++ b/src/compiler/scala/reflect/internal/Trees.scala @@ -22,8 +22,13 @@ trait Trees extends api.Trees { self: SymbolTable => */ case class Modifiers(flags: Long, privateWithin: Name, - annotations: List[Tree], - positions: Map[Long, Position]) extends AbsModifiers with HasFlags { + annotations: List[Tree]) extends AbsModifiers with HasFlags { + + var positions: Map[Long, Position] = Map() + + def setPositions(poss: Map[Long, Position]): this.type = { + positions = poss; this + } /* Abstract types from HasFlags. */ type FlagsType = Long @@ -40,42 +45,43 @@ trait Trees extends api.Trees { self: SymbolTable => def & (flag: Long): Modifiers = { val flags1 = flags & flag if (flags1 == flags) this - else Modifiers(flags1, privateWithin, annotations, positions) + else Modifiers(flags1, privateWithin, annotations) setPositions positions } def &~ (flag: Long): Modifiers = { val flags1 = flags & (~flag) if (flags1 == flags) this - else Modifiers(flags1, privateWithin, annotations, positions) + else Modifiers(flags1, privateWithin, annotations) setPositions positions } def | (flag: Long): Modifiers = { val flags1 = flags | flag if (flags1 == flags) this - else Modifiers(flags1, privateWithin, annotations, positions) + else Modifiers(flags1, privateWithin, annotations) setPositions positions } def withAnnotations(annots: List[Tree]) = if (annots.isEmpty) this - else copy(annotations = annotations ::: annots) + else copy(annotations = annotations ::: annots) setPositions positions + def withPosition(flag: Long, position: Position) = - copy(positions = positions + (flag -> position)) + copy() setPositions positions + (flag -> position) override def hasModifier(mod: Modifier.Value) = hasFlag(flagOfModifier(mod)) override def allModifiers: Set[Modifier.Value] = Modifier.values filter hasModifier override def mapAnnotations(f: List[Tree] => List[Tree]): Modifiers = - Modifiers(flags, privateWithin, f(annotations), positions) + Modifiers(flags, privateWithin, f(annotations)) setPositions positions override def toString = "Modifiers(%s, %s, %s)".format(hasFlagsToString(-1L), annotations mkString ", ", positions) } - def Modifiers(flags: Long, privateWithin: Name): Modifiers = Modifiers(flags, privateWithin, List(), Map.empty) + def Modifiers(flags: Long, privateWithin: Name): Modifiers = Modifiers(flags, privateWithin, List()) def Modifiers(flags: Long): Modifiers = Modifiers(flags, tpnme.EMPTY) def Modifiers(mods: Set[Modifier.Value], privateWithin: Name, annotations: List[Tree]): Modifiers = { val flagSet = mods map flagOfModifier - Modifiers((0L /: flagSet)(_ | _), privateWithin, annotations, Map.empty) + Modifiers((0L /: flagSet)(_ | _), privateWithin, annotations) } lazy val NoMods = Modifiers(0) |