summaryrefslogtreecommitdiff
path: root/examples/scala-js/tools/shared/src/main/scala/scala/scalajs/tools/javascript/LongImpl.scala
diff options
context:
space:
mode:
Diffstat (limited to 'examples/scala-js/tools/shared/src/main/scala/scala/scalajs/tools/javascript/LongImpl.scala')
-rw-r--r--examples/scala-js/tools/shared/src/main/scala/scala/scalajs/tools/javascript/LongImpl.scala116
1 files changed, 116 insertions, 0 deletions
diff --git a/examples/scala-js/tools/shared/src/main/scala/scala/scalajs/tools/javascript/LongImpl.scala b/examples/scala-js/tools/shared/src/main/scala/scala/scalajs/tools/javascript/LongImpl.scala
new file mode 100644
index 0000000..70b81a3
--- /dev/null
+++ b/examples/scala-js/tools/shared/src/main/scala/scala/scalajs/tools/javascript/LongImpl.scala
@@ -0,0 +1,116 @@
+/* __ *\
+** ________ ___ / / ___ __ ____ Scala.js tools **
+** / __/ __// _ | / / / _ | __ / // __/ (c) 2014, LAMP/EPFL **
+** __\ \/ /__/ __ |/ /__/ __ |/_// /_\ \ http://scala-js.org/ **
+** /____/\___/_/ |_/____/_/ | |__/ /____/ **
+** |/____/ **
+\* */
+
+
+package scala.scalajs.tools.javascript
+
+object LongImpl {
+ final val RuntimeLongClass = "sjsr_RuntimeLong"
+ final val RuntimeLongModuleClass = "sjsr_RuntimeLong$"
+
+ private final val SigUnary = "__sjsr_RuntimeLong"
+ private final val SigBinary = "__sjsr_RuntimeLong__sjsr_RuntimeLong"
+ private final val SigShift = "__I__sjsr_RuntimeLong"
+ private final val SigCompare = "__sjsr_RuntimeLong__Z"
+
+ final val UNARY_- = "unary$und$minus" + SigUnary
+ final val UNARY_~ = "unary$und$tilde" + SigUnary
+
+ final val + = "$$plus" + SigBinary
+ final val - = "$$minus" + SigBinary
+ final val * = "$$times" + SigBinary
+ final val / = "$$div" + SigBinary
+ final val % = "$$percent" + SigBinary
+
+ final val | = "$$bar" + SigBinary
+ final val & = "$$amp" + SigBinary
+ final val ^ = "$$up" + SigBinary
+
+ final val << = "$$less$less" + SigShift
+ final val >>> = "$$greater$greater$greater" + SigShift
+ final val >> = "$$greater$greater" + SigShift
+
+ final val === = "equals" + SigCompare
+ final val !== = "notEquals" + SigCompare
+ final val < = "$$less" + SigCompare
+ final val <= = "$$less$eq" + SigCompare
+ final val > = "$$greater" + SigCompare
+ final val >= = "$$greater$eq" + SigCompare
+
+ final val toInt = "toInt" + "__I"
+ final val toDouble = "toDouble" + "__D"
+
+ final val byteValue = "byteValue__B"
+ final val shortValue = "shortValue__S"
+ final val intValue = "intValue__I"
+ final val longValue = "longValue__J"
+ final val floatValue = "floatValue__F"
+ final val doubleValue = "doubleValue__D"
+
+ final val equals_ = "equals__O__Z"
+ final val hashCode_ = "hashCode__I"
+ final val compareTo = "compareTo__jl_Long__I"
+ final val compareToO = "compareTo__O__I"
+
+ private val OperatorMethods = Set(
+ UNARY_-, UNARY_~, this.+, this.-, *, /, %, |, &, ^, <<, >>>, >>,
+ ===, !==, <, <=, >, >=, toInt, toDouble)
+
+ private val BoxedLongMethods = Set(
+ byteValue, shortValue, intValue, longValue, floatValue, doubleValue,
+ equals_, hashCode_, compareTo, compareToO)
+
+ val AllMethods = OperatorMethods ++ BoxedLongMethods
+
+ // Methods used for intrinsics
+
+ final val bitCount = "bitCount__I"
+ final val signum = "signum__sjsr_RuntimeLong"
+ final val numberOfLeadingZeros = "numberOfLeadingZeros__I"
+ final val numberOfTrailingZeros = "numberOfTrailingZeros__I"
+ final val toBinaryString = "toBinaryString__T"
+ final val toHexString = "toHexString__T"
+ final val toOctalString = "toOctalString__T"
+
+ val AllIntrinsicMethods = Set(
+ bitCount, signum, numberOfLeadingZeros, numberOfTrailingZeros,
+ toBinaryString, toHexString, toOctalString)
+
+ // Constructors
+
+ final val initFromParts = "init___I__I__I"
+ final val initFromInt = "init___I"
+
+ val AllConstructors = Set(
+ initFromParts, initFromInt)
+
+ // Methods on the companion
+
+ final val fromDouble = "fromDouble__D__sjsr_RuntimeLong"
+
+ final val Zero = "Zero__sjsr_RuntimeLong"
+
+ val AllModuleMethods = Set(
+ fromDouble, Zero)
+
+ // Boldly copied from library/scala.scalajs.runtime.RuntimeLong
+
+ /** Number of relevant bits in l and m each. */
+ private final val BITS = 22
+ /** Number of relevant bits in l and m together. */
+ private final val BITS01 = 2 * BITS
+ /** Number of relevant bits in h. */
+ private final val BITS2 = 64 - BITS01
+ /** Bitmask for l and m. */
+ private final val MASK = (1 << BITS) - 1
+ /** Bitmask for h. */
+ private final val MASK_2 = (1 << BITS2) - 1
+
+ def extractParts(value: Long): (Int, Int, Int) =
+ (value.toInt & MASK, (value >> BITS).toInt & MASK, (value >> BITS01).toInt & MASK_2)
+}