@@ -32,21 +32,13 @@ object ScalaRunTime {
32
32
clazz.isArray && (atLevel == 1 || isArrayClass(clazz.getComponentType, atLevel - 1 ))
33
33
34
34
def isValueClass (clazz : jClass[_]) = clazz.isPrimitive()
35
- def isTuple (x : Any ) = x != null && tupleNames(x.getClass.getName)
35
+
36
+ // includes specialized subclasses and future proofed against hypothetical TupleN (for N > 22)
37
+ def isTuple (x : Any ) = x != null && x.getClass.getName.startsWith(" scala.Tuple" )
36
38
def isAnyVal (x : Any ) = x match {
37
39
case _ : Byte | _ : Short | _ : Char | _ : Int | _ : Long | _ : Float | _ : Double | _ : Boolean | _ : Unit => true
38
40
case _ => false
39
41
}
40
- // Avoiding boxing which messes up the specialized tests. Don't ask.
41
- private val tupleNames = {
42
- var i = 22
43
- var names : List [String ] = Nil
44
- while (i >= 1 ) {
45
- names ::= (" scala.Tuple" + String .valueOf(i))
46
- i -= 1
47
- }
48
- names.toSet
49
- }
50
42
51
43
// A helper method to make my life in the pattern matcher a lot easier.
52
44
def drop [Repr ](coll : Repr , num : Int )(implicit traversable : IsTraversableLike [Repr ]): Repr =
@@ -77,33 +69,37 @@ object ScalaRunTime {
77
69
classTag[T ].runtimeClass.asInstanceOf [jClass[T ]]
78
70
79
71
/** Retrieve generic array element */
80
- def array_apply (xs : AnyRef , idx : Int ): Any = xs match {
81
- case x : Array [AnyRef ] => x(idx).asInstanceOf [Any ]
82
- case x : Array [Int ] => x(idx).asInstanceOf [Any ]
83
- case x : Array [Double ] => x(idx).asInstanceOf [Any ]
84
- case x : Array [Long ] => x(idx).asInstanceOf [Any ]
85
- case x : Array [Float ] => x(idx).asInstanceOf [Any ]
86
- case x : Array [Char ] => x(idx).asInstanceOf [Any ]
87
- case x : Array [Byte ] => x(idx).asInstanceOf [Any ]
88
- case x : Array [Short ] => x(idx).asInstanceOf [Any ]
89
- case x : Array [Boolean ] => x(idx).asInstanceOf [Any ]
90
- case x : Array [Unit ] => x(idx).asInstanceOf [Any ]
91
- case null => throw new NullPointerException
72
+ def array_apply (xs : AnyRef , idx : Int ): Any = {
73
+ xs match {
74
+ case x : Array [AnyRef ] => x(idx).asInstanceOf [Any ]
75
+ case x : Array [Int ] => x(idx).asInstanceOf [Any ]
76
+ case x : Array [Double ] => x(idx).asInstanceOf [Any ]
77
+ case x : Array [Long ] => x(idx).asInstanceOf [Any ]
78
+ case x : Array [Float ] => x(idx).asInstanceOf [Any ]
79
+ case x : Array [Char ] => x(idx).asInstanceOf [Any ]
80
+ case x : Array [Byte ] => x(idx).asInstanceOf [Any ]
81
+ case x : Array [Short ] => x(idx).asInstanceOf [Any ]
82
+ case x : Array [Boolean ] => x(idx).asInstanceOf [Any ]
83
+ case x : Array [Unit ] => x(idx).asInstanceOf [Any ]
84
+ case null => throw new NullPointerException
85
+ }
92
86
}
93
87
94
88
/** update generic array element */
95
- def array_update (xs : AnyRef , idx : Int , value : Any ): Unit = xs match {
96
- case x : Array [AnyRef ] => x(idx) = value.asInstanceOf [AnyRef ]
97
- case x : Array [Int ] => x(idx) = value.asInstanceOf [Int ]
98
- case x : Array [Double ] => x(idx) = value.asInstanceOf [Double ]
99
- case x : Array [Long ] => x(idx) = value.asInstanceOf [Long ]
100
- case x : Array [Float ] => x(idx) = value.asInstanceOf [Float ]
101
- case x : Array [Char ] => x(idx) = value.asInstanceOf [Char ]
102
- case x : Array [Byte ] => x(idx) = value.asInstanceOf [Byte ]
103
- case x : Array [Short ] => x(idx) = value.asInstanceOf [Short ]
104
- case x : Array [Boolean ] => x(idx) = value.asInstanceOf [Boolean ]
105
- case x : Array [Unit ] => x(idx) = value.asInstanceOf [Unit ]
106
- case null => throw new NullPointerException
89
+ def array_update (xs : AnyRef , idx : Int , value : Any ): Unit = {
90
+ xs match {
91
+ case x : Array [AnyRef ] => x(idx) = value.asInstanceOf [AnyRef ]
92
+ case x : Array [Int ] => x(idx) = value.asInstanceOf [Int ]
93
+ case x : Array [Double ] => x(idx) = value.asInstanceOf [Double ]
94
+ case x : Array [Long ] => x(idx) = value.asInstanceOf [Long ]
95
+ case x : Array [Float ] => x(idx) = value.asInstanceOf [Float ]
96
+ case x : Array [Char ] => x(idx) = value.asInstanceOf [Char ]
97
+ case x : Array [Byte ] => x(idx) = value.asInstanceOf [Byte ]
98
+ case x : Array [Short ] => x(idx) = value.asInstanceOf [Short ]
99
+ case x : Array [Boolean ] => x(idx) = value.asInstanceOf [Boolean ]
100
+ case x : Array [Unit ] => x(idx) = value.asInstanceOf [Unit ]
101
+ case null => throw new NullPointerException
102
+ }
107
103
}
108
104
109
105
/** Get generic array length */
0 commit comments