diff options
8 files changed, 30 insertions, 22 deletions
diff --git a/src/compiler/scala/reflect/reify/codegen/GenSymbols.scala b/src/compiler/scala/reflect/reify/codegen/GenSymbols.scala index 90fb41f80b..3a97089d51 100644 --- a/src/compiler/scala/reflect/reify/codegen/GenSymbols.scala +++ b/src/compiler/scala/reflect/reify/codegen/GenSymbols.scala @@ -131,9 +131,9 @@ trait GenSymbols { if (sym.isCapturedVariable) { assert(binding.isInstanceOf[Ident], showRaw(binding)) val capturedBinding = referenceCapturedVariable(sym) - Reification(name, capturedBinding, mirrorBuildCall(nme.newFreeTerm, reify(sym.name.toString), capturedBinding, mirrorBuildCall(nme.flagsFromBits, reify(sym.flags)), reify(origin(sym)))) + Reification(name, capturedBinding, mirrorBuildCall(nme.newFreeTerm, reify(sym.name.toString), capturedBinding, mirrorBuildCall(nme.FlagsRepr, reify(sym.flags)), reify(origin(sym)))) } else { - Reification(name, binding, mirrorBuildCall(nme.newFreeTerm, reify(sym.name.toString), binding, mirrorBuildCall(nme.flagsFromBits, reify(sym.flags)), reify(origin(sym)))) + Reification(name, binding, mirrorBuildCall(nme.newFreeTerm, reify(sym.name.toString), binding, mirrorBuildCall(nme.FlagsRepr, reify(sym.flags)), reify(origin(sym)))) } } @@ -142,7 +142,7 @@ trait GenSymbols { if (reifyDebug) println("Free type: %s (%s)".format(sym, sym.accurateKindString)) state.reificationIsConcrete = false val name: TermName = nme.REIFY_FREE_PREFIX append sym.name - Reification(name, binding, mirrorBuildCall(nme.newFreeType, reify(sym.name.toString), mirrorBuildCall(nme.flagsFromBits, reify(sym.flags)), reify(origin(sym)))) + Reification(name, binding, mirrorBuildCall(nme.newFreeType, reify(sym.name.toString), mirrorBuildCall(nme.FlagsRepr, reify(sym.flags)), reify(origin(sym)))) } def reifySymDef(sym: Symbol): Tree = @@ -150,7 +150,7 @@ trait GenSymbols { if (reifyDebug) println("Sym def: %s (%s)".format(sym, sym.accurateKindString)) val name: TermName = nme.REIFY_SYMDEF_PREFIX append sym.name def reifiedOwner = if (sym.owner.isLocatable) reify(sym.owner) else reifySymDef(sym.owner) - Reification(name, Ident(sym), mirrorBuildCall(nme.newNestedSymbol, reifiedOwner, reify(sym.name), reify(sym.pos), mirrorBuildCall(nme.flagsFromBits, reify(sym.flags)), reify(sym.isClass))) + Reification(name, Ident(sym), mirrorBuildCall(nme.newNestedSymbol, reifiedOwner, reify(sym.name), reify(sym.pos), mirrorBuildCall(nme.FlagsRepr, reify(sym.flags)), reify(sym.isClass))) } case class Reification(name: Name, binding: Tree, tree: Tree) diff --git a/src/compiler/scala/reflect/reify/codegen/GenTrees.scala b/src/compiler/scala/reflect/reify/codegen/GenTrees.scala index 3507c2a173..ff20d529aa 100644 --- a/src/compiler/scala/reflect/reify/codegen/GenTrees.scala +++ b/src/compiler/scala/reflect/reify/codegen/GenTrees.scala @@ -84,7 +84,7 @@ trait GenTrees { } def reifyModifiers(m: global.Modifiers) = - mirrorFactoryCall(nme.Modifiers, mirrorBuildCall(nme.flagsFromBits, reify(m.flags)), reify(m.privateWithin), reify(m.annotations)) + mirrorFactoryCall(nme.Modifiers, mirrorBuildCall(nme.FlagsRepr, reify(m.flags)), reify(m.privateWithin), reify(m.annotations)) private def spliceTree(tree: Tree): Tree = { tree match { diff --git a/src/compiler/scala/reflect/reify/utils/Extractors.scala b/src/compiler/scala/reflect/reify/utils/Extractors.scala index d5f27dc119..9af8f2de2a 100644 --- a/src/compiler/scala/reflect/reify/utils/Extractors.scala +++ b/src/compiler/scala/reflect/reify/utils/Extractors.scala @@ -164,6 +164,16 @@ trait Extractors { } } + // abstract over possible additional .apply select + // which is sometimes inserted after desugaring of calls + object ApplyCall { + def unapply(tree: Tree): Option[(Tree, List[Tree])] = tree match { + case Apply(Select(id, nme.apply), args) => Some((id, args)) + case Apply(id, args) => Some((id, args)) + case _ => None + } + } + sealed abstract class FreeDefExtractor(acceptTerms: Boolean, acceptTypes: Boolean) { def unapply(tree: Tree): Option[(Tree, TermName, Tree, Long, String)] = { def acceptFreeTermFactory(name: Name) = { @@ -175,10 +185,10 @@ trait Extractors { ValDef(_, name, _, Apply( Select(Select(uref1 @ Ident(_), build1), freeTermFactory), _ :+ - Apply(Select(Select(uref2 @ Ident(_), build2), flagsFromBits), List(Literal(Constant(flags: Long)))) :+ + ApplyCall(Select(Select(uref2 @ Ident(_), build2), flagsRepr), List(Literal(Constant(flags: Long)))) :+ Literal(Constant(origin: String)))) if uref1.name == nme.UNIVERSE_SHORT && build1 == nme.build && acceptFreeTermFactory(freeTermFactory) && - uref2.name == nme.UNIVERSE_SHORT && build2 == nme.build && flagsFromBits == nme.flagsFromBits => + uref2.name == nme.UNIVERSE_SHORT && build2 == nme.build && flagsRepr == nme.FlagsRepr => Some((uref1, name, reifyBinding(tree), flags, origin)) case _ => None @@ -208,10 +218,10 @@ trait Extractors { _, _, _, - Apply(Select(Select(uref2 @ Ident(_), build2), flagsFromBits), List(Literal(Constant(flags: Long)))), + ApplyCall(Select(Select(uref2 @ Ident(_), build2), flagsRepr), List(Literal(Constant(flags: Long)))), Literal(Constant(isClass: Boolean))))) if uref1.name == nme.UNIVERSE_SHORT && build1 == nme.build && newNestedSymbol == nme.newNestedSymbol && - uref2.name == nme.UNIVERSE_SHORT && build2 == nme.build && flagsFromBits == nme.flagsFromBits => + uref2.name == nme.UNIVERSE_SHORT && build2 == nme.build && flagsRepr == nme.FlagsRepr => Some((uref1, name, flags, isClass)) case _ => None diff --git a/src/compiler/scala/reflect/reify/utils/NodePrinters.scala b/src/compiler/scala/reflect/reify/utils/NodePrinters.scala index 0903bc481c..e37b861461 100644 --- a/src/compiler/scala/reflect/reify/utils/NodePrinters.scala +++ b/src/compiler/scala/reflect/reify/utils/NodePrinters.scala @@ -32,7 +32,7 @@ trait NodePrinters { s = "List\\[List\\[.*?\\].*?\\]".r.replaceAllIn(s, "List") s = "List\\[.*?\\]".r.replaceAllIn(s, "List") s = s.replace("immutable.this.Nil", "List()") - s = """build\.flagsFromBits\((\d+)[lL]\)""".r.replaceAllIn(s, m => { + s = """build\.FlagsRepr\((\d+)[lL]\)""".r.replaceAllIn(s, m => { flagsAreUsed = true show(m.group(1).toLong) }) diff --git a/src/compiler/scala/tools/reflect/quasiquotes/Reifiers.scala b/src/compiler/scala/tools/reflect/quasiquotes/Reifiers.scala index fe51098f05..47ccec17d6 100644 --- a/src/compiler/scala/tools/reflect/quasiquotes/Reifiers.scala +++ b/src/compiler/scala/tools/reflect/quasiquotes/Reifiers.scala @@ -229,7 +229,7 @@ trait Reifiers { self: Quasiquotes => case _ :: (second, _) :: Nil => c.abort(second.pos, "Can't splice multiple modifiers, consider merging them into a single modifiers instance") case _ => - val baseFlags = reifyBuildCall(nme.flagsFromBits, m.flags) + val baseFlags = reifyBuildCall(nme.FlagsRepr, m.flags) val reifiedFlags = flags.foldLeft[Tree](baseFlags) { case (flag, (tree, _)) => Apply(Select(flag, nme.OR), List(tree)) } mirrorFactoryCall(nme.Modifiers, reifiedFlags, reify(m.privateWithin), reifyAnnotList(annots)) } @@ -282,7 +282,7 @@ trait Reifiers { self: Quasiquotes => case _ :: second :: rest => c.abort(second.pos, "Can't extract multiple modifiers together, consider extracting a single modifiers instance") case Nil => - mirrorFactoryCall(nme.Modifiers, reifyBuildCall(nme.FlagsAsBits, m.flags), + mirrorFactoryCall(nme.Modifiers, reifyBuildCall(nme.FlagsRepr, m.flags), reify(m.privateWithin), reifyAnnotList(m.annotations)) } } diff --git a/src/reflect/scala/reflect/api/BuildUtils.scala b/src/reflect/scala/reflect/api/BuildUtils.scala index e401325dbc..394cbf55c5 100644 --- a/src/reflect/scala/reflect/api/BuildUtils.scala +++ b/src/reflect/scala/reflect/api/BuildUtils.scala @@ -58,8 +58,6 @@ private[reflect] trait BuildUtils { self: Universe => */ def setAnnotations[S <: Symbol](sym: S, annots: List[Annotation]): S - def flagsFromBits(bits: Long): FlagSet - def This(sym: Symbol): Tree def Select(qualifier: Tree, sym: Symbol): Select @@ -78,10 +76,12 @@ private[reflect] trait BuildUtils { self: Universe => def mkAnnotation(tree: Tree, args: List[Tree]): Tree - val FlagsAsBits: FlagsAsBitsExtractor - trait FlagsAsBitsExtractor { - def unapply(flags: Long): Option[Long] + val FlagsRepr: FlagsReprExtractor + + trait FlagsReprExtractor { + def apply(value: Long): FlagSet + def unapply(flags: Long): Some[Long] } val TypeApplied: TypeAppliedExtractor diff --git a/src/reflect/scala/reflect/internal/BuildUtils.scala b/src/reflect/scala/reflect/internal/BuildUtils.scala index dc3be59acd..73b7b79fdb 100644 --- a/src/reflect/scala/reflect/internal/BuildUtils.scala +++ b/src/reflect/scala/reflect/internal/BuildUtils.scala @@ -47,8 +47,6 @@ trait BuildUtils { self: SymbolTable => def setTypeSignature[S <: Symbol](sym: S, tpe: Type): S = sym.setTypeSignature(tpe) - def flagsFromBits(bits: Long): FlagSet = bits - def This(sym: Symbol): Tree = self.This(sym) def Select(qualifier: Tree, sym: Symbol): Select = self.Select(qualifier, sym) @@ -78,7 +76,8 @@ trait BuildUtils { self: SymbolTable => case _ => throw new IllegalArgumentException(s"Tree ${showRaw(tree)} isn't a correct representation of annotation, consider passing Ident as a first argument") } - object FlagsAsBits extends FlagsAsBitsExtractor { + object FlagsRepr extends FlagsReprExtractor { + def apply(bits: Long): FlagSet = bits def unapply(flags: Long): Some[Long] = Some(flags) } diff --git a/src/reflect/scala/reflect/internal/StdNames.scala b/src/reflect/scala/reflect/internal/StdNames.scala index 4fd35e1f24..77571d02da 100644 --- a/src/reflect/scala/reflect/internal/StdNames.scala +++ b/src/reflect/scala/reflect/internal/StdNames.scala @@ -568,7 +568,7 @@ trait StdNames { val EmptyPackageClass: NameType = "EmptyPackageClass" val False : NameType = "False" val Flag : NameType = "Flag" - val FlagsAsBits: NameType = "FlagsAsBits" + val FlagsRepr: NameType = "FlagsRepr" val Ident: NameType = "Ident" val Import: NameType = "Import" val Literal: NameType = "Literal" @@ -650,7 +650,6 @@ trait StdNames { val filter: NameType = "filter" val finalize_ : NameType = "finalize" val find_ : NameType = "find" - val flagsFromBits : NameType = "flagsFromBits" val flatMap: NameType = "flatMap" val flatten: NameType = "flatten" val foldLeft: NameType = "foldLeft" |