diff options
author | Paul Phillips <paulp@improving.org> | 2013-03-27 08:37:20 -0700 |
---|---|---|
committer | Paul Phillips <paulp@improving.org> | 2013-03-27 08:37:20 -0700 |
commit | 79b18ccf9e9e9cb167ef9c2bdaf7e5adfa9a0ef0 (patch) | |
tree | fa1bc5ea392094a8b3c23f05685e4eafd29d0714 | |
parent | 8f23848ec74d1a760aba0822b4ddd82b81f28978 (diff) | |
parent | ccf886c208a1ed5cc2ff8d8040cff2c76d6f6032 (diff) | |
download | scala-79b18ccf9e9e9cb167ef9c2bdaf7e5adfa9a0ef0.tar.gz scala-79b18ccf9e9e9cb167ef9c2bdaf7e5adfa9a0ef0.tar.bz2 scala-79b18ccf9e9e9cb167ef9c2bdaf7e5adfa9a0ef0.zip |
Merge pull request #2325 from retronym/ticket/7186-2
SI-7186 Slim down some TypeRefs by 8 bytes.
-rw-r--r-- | src/reflect/scala/reflect/internal/Types.scala | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/src/reflect/scala/reflect/internal/Types.scala b/src/reflect/scala/reflect/internal/Types.scala index d7ff4faa5d..d6eeb68452 100644 --- a/src/reflect/scala/reflect/internal/Types.scala +++ b/src/reflect/scala/reflect/internal/Types.scala @@ -2422,20 +2422,28 @@ trait Types override def kind = "TypeRef" } + // No longer defined as anonymous classes in `object TypeRef` to avoid an unnecessary outer pointer. + private final class AliasArgsTypeRef(pre: Type, sym: Symbol, args: List[Type]) extends ArgsTypeRef(pre, sym, args) with AliasTypeRef + private final class AbstractArgsTypeRef(pre: Type, sym: Symbol, args: List[Type]) extends ArgsTypeRef(pre, sym, args) with AbstractTypeRef + private final class ClassArgsTypeRef(pre: Type, sym: Symbol, args: List[Type]) extends ArgsTypeRef(pre, sym, args) with ClassTypeRef + private final class AliasNoArgsTypeRef(pre: Type, sym: Symbol) extends NoArgsTypeRef(pre, sym) with AliasTypeRef + private final class AbstractNoArgsTypeRef(pre: Type, sym: Symbol) extends NoArgsTypeRef(pre, sym) with AbstractTypeRef + private final class ClassNoArgsTypeRef(pre: Type, sym: Symbol) extends NoArgsTypeRef(pre, sym) with ClassTypeRef + object TypeRef extends TypeRefExtractor { def apply(pre: Type, sym: Symbol, args: List[Type]): Type = unique({ if (args.nonEmpty) { - if (sym.isAliasType) new ArgsTypeRef(pre, sym, args) with AliasTypeRef - else if (sym.isAbstractType) new ArgsTypeRef(pre, sym, args) with AbstractTypeRef - else new ArgsTypeRef(pre, sym, args) with ClassTypeRef + if (sym.isAliasType) new AliasArgsTypeRef(pre, sym, args) + else if (sym.isAbstractType) new AbstractArgsTypeRef(pre, sym, args) + else new ClassArgsTypeRef(pre, sym, args) } else { - if (sym.isAliasType) new NoArgsTypeRef(pre, sym) with AliasTypeRef - else if (sym.isAbstractType) new NoArgsTypeRef(pre, sym) with AbstractTypeRef + if (sym.isAliasType) new AliasNoArgsTypeRef(pre, sym) + else if (sym.isAbstractType) new AbstractNoArgsTypeRef(pre, sym) else if (sym.isRefinementClass) new RefinementTypeRef(pre, sym) else if (sym.isPackageClass) new PackageTypeRef(pre, sym) else if (sym.isModuleClass) new ModuleTypeRef(pre, sym) - else new NoArgsTypeRef(pre, sym) with ClassTypeRef + else new ClassNoArgsTypeRef(pre, sym) } }) } |