summaryrefslogtreecommitdiff
path: root/examples/scala-js/library/src/main/scala/scala/scalajs/runtime/IntegerReflectiveCall.scala
blob: ddf65df13104770bad43ee3bf1f24634a33821a5 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
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

}