summaryrefslogtreecommitdiff
path: root/examples/scala-js/library/src/main/scala/scala/scalajs/runtime/IntegerReflectiveCall.scala
diff options
context:
space:
mode:
Diffstat (limited to 'examples/scala-js/library/src/main/scala/scala/scalajs/runtime/IntegerReflectiveCall.scala')
-rw-r--r--examples/scala-js/library/src/main/scala/scala/scalajs/runtime/IntegerReflectiveCall.scala87
1 files changed, 87 insertions, 0 deletions
diff --git a/examples/scala-js/library/src/main/scala/scala/scalajs/runtime/IntegerReflectiveCall.scala b/examples/scala-js/library/src/main/scala/scala/scalajs/runtime/IntegerReflectiveCall.scala
new file mode 100644
index 0000000..ddf65df
--- /dev/null
+++ b/examples/scala-js/library/src/main/scala/scala/scalajs/runtime/IntegerReflectiveCall.scala
@@ -0,0 +1,87 @@
+package scala.scalajs.runtime
+
+import java.lang.{Double => JDouble, Integer => JInteger}
+
+/** Explicit box for number values when doing a reflective call that was
+ * identified to be a call on Int rather than on Double (based on the
+ * result type of the method called reflectively).
+ * This class and its methods are only here to properly support reflective
+ * calls on numbers.
+ */
+class IntegerReflectiveCall(value: Int) {
+
+ // Methods of scala.Int whose result type is different than in scala.Double
+
+ def unary_+ : scala.Int = value
+ def unary_- : scala.Int = -value
+
+ def +(x: scala.Byte): scala.Int = value + x
+ def +(x: scala.Short): scala.Int = value + x
+ def +(x: scala.Char): scala.Int = value + x
+ def +(x: scala.Int): scala.Int = value + x
+ def +(x: scala.Long): scala.Long = value + x
+ def +(x: scala.Float): scala.Float = value + x
+ def +(x: scala.Double): scala.Double = value + x
+
+ def -(x: scala.Byte): scala.Int = value - x
+ def -(x: scala.Short): scala.Int = value - x
+ def -(x: scala.Char): scala.Int = value - x
+ def -(x: scala.Int): scala.Int = value - x
+ def -(x: scala.Long): scala.Long = value - x
+ def -(x: scala.Float): scala.Float = value - x
+ def -(x: scala.Double): scala.Double = value - x
+
+ def *(x: scala.Byte): scala.Int = value * x
+ def *(x: scala.Short): scala.Int = value * x
+ def *(x: scala.Char): scala.Int = value * x
+ def *(x: scala.Int): scala.Int = value * x
+ def *(x: scala.Long): scala.Long = value * x
+ def *(x: scala.Float): scala.Float = value * x
+ def *(x: scala.Double): scala.Double = value * x
+
+ def /(x: scala.Byte): scala.Int = value / x
+ def /(x: scala.Short): scala.Int = value / x
+ def /(x: scala.Char): scala.Int = value / x
+ def /(x: scala.Int): scala.Int = value / x
+ def /(x: scala.Long): scala.Long = value / x
+ def /(x: scala.Float): scala.Float = value / x
+ def /(x: scala.Double): scala.Double = value / x
+
+ def %(x: scala.Byte): scala.Int = value % x
+ def %(x: scala.Short): scala.Int = value % x
+ def %(x: scala.Char): scala.Int = value % x
+ def %(x: scala.Int): scala.Int = value % x
+ def %(x: scala.Long): scala.Long = value % x
+ def %(x: scala.Float): scala.Float = value % x
+ def %(x: scala.Double): scala.Double = value % x
+
+ // Methods of scala.Int that are not defined on scala.Double
+
+ def unary_~ : scala.Int = ~value
+
+ def <<(x: scala.Int): scala.Int = value << x
+ def <<(x: scala.Long): scala.Int = value << x
+ def >>>(x: scala.Int): scala.Int = value >>> x
+ def >>>(x: scala.Long): scala.Int = value >>> x
+ def >>(x: scala.Int): scala.Int = value >> x
+ def >>(x: scala.Long): scala.Int = value >> x
+
+ def |(x: scala.Byte): scala.Int = value | x
+ def |(x: scala.Short): scala.Int = value | x
+ def |(x: scala.Char): scala.Int = value | x
+ def |(x: scala.Int): scala.Int = value | x
+ def |(x: scala.Long): scala.Long = value | x
+
+ def &(x: scala.Byte): scala.Int = value & x
+ def &(x: scala.Short): scala.Int = value & x
+ def &(x: scala.Char): scala.Int = value & x
+ def &(x: scala.Int): scala.Int = value & x
+ def &(x: scala.Long): scala.Long = value & x
+
+ def ^(x: scala.Byte): scala.Int = value ^ x
+ def ^(x: scala.Short): scala.Int = value ^ x
+ def ^(x: scala.Char): scala.Int = value ^ x
+ def ^(x: scala.Int): scala.Int = value ^ x
+ def ^(x: scala.Long): scala.Long = value ^ x
+
+}