aboutsummaryrefslogtreecommitdiff
path: root/core/shared/src/main/scala/magnolia.scala
diff options
context:
space:
mode:
authorMathias <mathias@decodified.com>2017-12-14 10:55:11 +0100
committerMathias <mathias@decodified.com>2017-12-14 11:11:25 +0100
commita2c85fe8be5dfaae8585f669ef05e072a13aa946 (patch)
tree5e1b11d48b516c65142a1f8151c80f7454cc2c56 /core/shared/src/main/scala/magnolia.scala
parent379f0075ca8042945d8ff89212536894a96f56a8 (diff)
downloadmagnolia-a2c85fe8be5dfaae8585f669ef05e072a13aa946.tar.gz
magnolia-a2c85fe8be5dfaae8585f669ef05e072a13aa946.tar.bz2
magnolia-a2c85fe8be5dfaae8585f669ef05e072a13aa946.zip
Make `SealedTrait.dispatch` allocation-free
Diffstat (limited to 'core/shared/src/main/scala/magnolia.scala')
-rw-r--r--core/shared/src/main/scala/magnolia.scala14
1 files changed, 7 insertions, 7 deletions
diff --git a/core/shared/src/main/scala/magnolia.scala b/core/shared/src/main/scala/magnolia.scala
index f55dfa7..68c0f4f 100644
--- a/core/shared/src/main/scala/magnolia.scala
+++ b/core/shared/src/main/scala/magnolia.scala
@@ -1,6 +1,7 @@
package magnolia
-import scala.reflect._, macros._
+import scala.reflect._
+import macros._
import scala.collection.immutable.ListMap
import language.existentials
import language.higherKinds
@@ -505,15 +506,14 @@ object Magnolia {
*
* This method is intended to be called only from code generated by the Magnolia macro, and
* should not be called directly from users' code. */
- def subtype[Tc[_], T, S <: T](name: String, tc: => Tc[S], isType: T => Boolean, asType: T => S) =
- new Subtype[Tc, T] {
+ def subtype[Tc[_], T, S <: T](name: String, tc: => Tc[S], isType: T => Boolean, asType: T => S): Subtype[Tc, T] =
+ new Subtype[Tc, T] with PartialFunction[T, S] {
type SType = S
def label: String = name
def typeclass: Tc[SType] = tc
- def cast: PartialFunction[T, SType] = new PartialFunction[T, S] {
- def isDefinedAt(t: T) = isType(t)
- def apply(t: T): SType = asType(t)
- }
+ def cast: PartialFunction[T, SType] = this
+ def isDefinedAt(t: T) = isType(t)
+ def apply(t: T): SType = asType(t)
}
/** constructs a new [[Param]] instance