diff options
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.scala | 87 |
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 + +} |