Created
April 25, 2014 21:19
-
-
Save paulp/11303639 to your computer and use it in GitHub Desktop.
Revisions
-
paulp created this gist
Apr 25, 2014 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,59 @@ // Quasiquoted excerpt def cdef = q""" class $ClassName[..$classTypeParams](..$primaryParams) extends ..$classParents { ..$primaryAccessors def get = this def isEmpty = ${quasi.isEmpty} def copy(..$primaryWithDefaults) = $ObjectName(..$primaryNames) override def productPrefix: String = $ClassNameString override def productIterator: $primaryIteratorType = Iterator(..$primaryNames) override def canEqual(that: Any): Boolean = ${CanEqualLogic("that")} override def toString(): String = $ToStringLogic override def hashCode(): Int = $HashCodeLogic override def equals(that: Any): Boolean = ${EqualsLogic("that")} }""" def mdef = q""" object $ObjectName extends $objectParent { private[this] val $NoClassName: $ClassType = ${quasi.createEmpty()} override final def toString = $ClassNameString def apply[..$classTypeParams](..$primaryParams): $ClassName = $newClassType def unapply[..$classTypeParams](x: $ClassType): $ClassType = if (x eq null) $NoClassName else x private def readResolve(): Object = $ObjectName }""" // Generating QuasiCaseClass("Rational").vparam[Int]("n").vparam[Int]("d").result class Rational(val n: Int, val d: Int) extends AnyRef with Product2[Int, Int] { def _1 = n; def _2 = d; def get = this; def isEmpty = d == 0; def copy(n: Int = n, d: Int = d) = Rational(n, d); override def productPrefix: String = "Rational"; override def productIterator: Iterator[Int] = Iterator(n, d); override def canEqual(that: Any): Boolean = that.isInstanceOf[Rational]; override def toString(): String = List(n, d).mkString("Rational".+("("), ", ", ")"); override def hashCode(): Int = { var acc: Int = -889275714; scala.runtime.Statics.mix(acc, n); scala.runtime.Statics.mix(acc, d); scala.runtime.Statics.finalizeHash(acc, 2) }; override def equals(that: Any): Boolean = this.eq(that.asInstanceOf[AnyRef]).||(true) } object Rational extends _root_.scala.Function2[Int, Int, Rational] { private[this] val NoRational: Rational = new Rational(0, 0); final override def toString = "Rational"; def apply(n: Int, d: Int): Rational = new Rational(n, d); def unapply(x: Rational): Rational = if (x.eq(null)) NoRational else x; private def readResolve(): Object = Rational }