1"====================================================================== 2| 3| Java run-time support. java.lang.reflect.Array native methods. 4| 5| 6 ======================================================================" 7 8 9"====================================================================== 10| 11| Copyright 2003 Free Software Foundation, Inc. 12| Written by Paolo Bonzini. 13| 14| This file is part of GNU Smalltalk. 15| 16| The GNU Smalltalk class library is free software; you can redistribute it 17| and/or modify it under the terms of the GNU General Public License 18| as published by the Free Software Foundation; either version 2, or (at 19| your option) any later version. 20| 21| The GNU Smalltalk class library is distributed in the hope that it will be 22| useful, but WITHOUT ANY WARRANTY; without even the implied warranty of 23| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General 24| Public License for more details. 25| 26| You should have received a copy of the GNU Lesser General Public License 27| along with the GNU Smalltalk class library; see the file COPYING. If not, 28| write to the Free Software Foundation, 51 Franklin Street, Fifth Floor, 29| Boston, MA 02110-1301, USA. 30| 31 ======================================================================" 32 33 34!JavaVM methodsFor: 'java.lang.reflect.Array'! 35 36java_lang_reflect_Array_newInstance_java_lang_Class: arg1 int: arg2 37 | arrayClass | 38 <javaNativeMethod: #'newInstance(Ljava/lang/Class;I)Ljava/lang/Object;' 39 for: #{Java.java.lang.reflect.Array} static: true> 40 arg1 == VoidClass ifTrue: [ 41 ^JavaVM throw: Java.java.lang.IllegalArgumentException ]. 42 arg2 < 0 ifTrue: [ 43 ^JavaVM throw: Java.java.lang.NegativeArraySizeException ]. 44 45 arrayClass := arg1 javaType arrayClass. 46 ^arrayClass new: arg2! 47 48java_lang_reflect_Array_newInstance_java_lang_Class: arg1 intArray: arg2 49 <javaNativeMethod: #'newInstance(Ljava/lang/Class;[I)Ljava/lang/Object;' 50 for: #{Java.java.lang.reflect.Array} static: true> 51 (arg1 javaType isArrayType and: [ 52 (arg1 javaType arrayDimensionality >= arg2 size) ]) ifFalse: [ 53 ^JavaVM throw: Java.java.lang.IllegalArgumentException ]. 54 55 ^arg1 javaType javaMultiNewArray: arg2 from: 1 56! 57 58java_lang_reflect_Array_getLength_java_lang_Object: arg1 59 <javaNativeMethod: #'getLength(Ljava/lang/Object;)I' 60 for: #{Java.java.lang.reflect.Array} static: true> 61 ^(arg1 isKindOf: JavaObject) 62 ifTrue: [ JavaVM throw: Java.java.lang.IllegalArgumentException ] 63 ifFalse: [ arg1 size ] 64! 65 66java_lang_reflect_Array_get_java_lang_Object: arg1 int: arg2 67 | desiredClass | 68 <javaNativeMethod: #'get(Ljava/lang/Object;I)Ljava/lang/Object;' 69 for: #{Java.java.lang.reflect.Array} static: true> 70 arg1 class == Array 71 ifTrue: [ ^arg1 javaAt: arg2 ]. 72 73 arg1 class == JavaBooleanArray ifTrue: [ 74 ^(arg1 javaAt: arg2) = 0 75 ifTrue: [ Java.java.lang.Boolean FALSE ] 76 ifFalse: [ Java.java.lang.Boolean TRUE ]]. 77 78 desiredClass := 79 arg1 class == JavaIntArray ifTrue: [ Java.java.lang.Integer ] ifFalse: [ 80 arg1 class == JavaShortArray ifTrue: [ Java.java.lang.Short ] ifFalse: [ 81 arg1 class == JavaByteArray ifTrue: [ Java.java.lang.Byte ] ifFalse: [ 82 arg1 class == JavaLongArray ifTrue: [ Java.java.lang.Long ] ifFalse: [ 83 arg1 class == JavaFloatArray ifTrue: [ Java.java.lang.Float ] ifFalse: [ 84 arg1 class == JavaDoubleArray ifTrue: [ Java.java.lang.Double ] ifFalse: [ 85 Java.java.lang.Char ]]]]]]. 86 87 ^desiredClass new 88 perform: #'<init>()V'; 89 value: (arg1 javaAt: arg2) 90! 91 92java_lang_reflect_Array_getChar_java_lang_Object: arg1 int: arg2 93 <javaNativeMethod: #'getChar(Ljava/lang/Object;I)C' 94 for: #{Java.java.lang.reflect.Array} static: true> 95 ^arg1 class == JavaCharArray 96 ifFalse: [ JavaVM throw: Java.java.lang.IllegalArgumentException ] 97 ifTrue: [ arg1 javaAt: arg2 ] 98! 99 100java_lang_reflect_Array_getByte_java_lang_Object: arg1 int: arg2 101 <javaNativeMethod: #'getByte(Ljava/lang/Object;I)B' 102 for: #{Java.java.lang.reflect.Array} static: true> 103 ^arg1 class == JavaByteArray 104 ifFalse: [ JavaVM throw: Java.java.lang.IllegalArgumentException ] 105 ifTrue: [ arg1 javaAt: arg2 ] 106! 107 108java_lang_reflect_Array_getShort_java_lang_Object: arg1 int: arg2 109 <javaNativeMethod: #'getShort(Ljava/lang/Object;I)S' 110 for: #{Java.java.lang.reflect.Array} static: true> 111 ^(arg1 class == JavaByteArray 112 or: [ arg1 class == JavaShortArray ]) 113 ifFalse: [ JavaVM throw: Java.java.lang.IllegalArgumentException ] 114 ifTrue: [ arg1 javaAt: arg2 ] 115! 116 117java_lang_reflect_Array_getInt_java_lang_Object: arg1 int: arg2 118 <javaNativeMethod: #'getInt(Ljava/lang/Object;I)I' 119 for: #{Java.java.lang.reflect.Array} static: true> 120 ^(arg1 class == JavaByteArray 121 or: [ arg1 class == JavaCharArray 122 or: [ arg1 class == JavaIntArray 123 or: [ arg1 class == JavaShortArray ]]]) 124 ifFalse: [ JavaVM throw: Java.java.lang.IllegalArgumentException ] 125 ifTrue: [ arg1 javaAt: arg2 ] 126! 127 128java_lang_reflect_Array_getLong_java_lang_Object: arg1 int: arg2 129 <javaNativeMethod: #'getLong(Ljava/lang/Object;I)J' 130 for: #{Java.java.lang.reflect.Array} static: true> 131 ^(arg1 class == Array 132 or: [ arg1 class == ByteArray 133 or: [ arg1 class == JavaDoubleArray 134 or: [ arg1 class == JavaFloatArray ]]]) 135 ifTrue: [ JavaVM throw: Java.java.lang.IllegalArgumentException ] 136 ifFalse: [ arg1 javaAt: arg2 ] 137! 138 139java_lang_reflect_Array_getFloat_java_lang_Object: arg1 int: arg2 140 <javaNativeMethod: #'getFloat(Ljava/lang/Object;I)F' 141 for: #{Java.java.lang.reflect.Array} static: true> 142 ^(arg1 class == Array 143 or: [ arg1 class == ByteArray 144 or: [ arg1 class == JavaDoubleArray ]]) 145 ifTrue: [ JavaVM throw: Java.java.lang.IllegalArgumentException ] 146 ifFalse: [ (arg1 javaAt: arg2) asFloatE ] 147! 148 149java_lang_reflect_Array_getDouble_java_lang_Object: arg1 int: arg2 150 <javaNativeMethod: #'getDouble(Ljava/lang/Object;I)D' 151 for: #{Java.java.lang.reflect.Array} static: true> 152 ^(arg1 class == Array or: [ arg1 class == ByteArray ]) 153 ifTrue: [ JavaVM throw: Java.java.lang.IllegalArgumentException ] 154 ifFalse: [ (arg1 javaAt: arg2) asFloatD ] 155! 156 157java_lang_reflect_Array_getBoolean_java_lang_Object: arg1 int: arg2 158 <javaNativeMethod: #'getBoolean(Ljava/lang/Object;I)Z' 159 for: #{Java.java.lang.reflect.Array} static: true> 160 ^arg1 class == ByteArray 161 ifFalse: [ JavaVM throw: Java.java.lang.IllegalArgumentException ] 162 ifTrue: [ arg1 javaAt: arg2 ] 163! 164 165java_lang_reflect_Array_getElementType_java_lang_Object: arg1 int: arg2 166 <javaNativeMethod: #'getElementType(Ljava/lang/Object;I)Ljava/lang/Class;' 167 for: #{Java.java.lang.reflect.Array} static: true> 168 self notYetImplemented 169! 170 171java_lang_reflect_Array_set_java_lang_Object: arg1 int: arg2 java_lang_Object: arg3 java_lang_Class: arg4 172 <javaNativeMethod: #'set(Ljava/lang/Object;ILjava/lang/Object;Ljava/lang/Class;)V' 173 for: #{Java.java.lang.reflect.Array} static: true> 174 175 (arg3 isKindOf: arg4 asSmalltalkClass) 176 ifFalse: [ ^JavaVM throw: Java.java.lang.IllegalArgumentException ] 177 178 arg1 javaAt: arg2 put: arg3 179! 180 181java_lang_reflect_Array_setByte_java_lang_Object: arg1 int: arg2 byte: arg3 182 <javaNativeMethod: #'setByte(Ljava/lang/Object;IB)V' 183 for: #{Java.java.lang.reflect.Array} static: true> 184 ^(arg1 class == Array 185 or: [ arg1 class == ByteArray 186 or: [ arg1 class == JavaCharArray ]]) 187 ifTrue: [ JavaVM throw: Java.java.lang.IllegalArgumentException ] 188 ifFalse: [ arg1 javaAt: arg2 put: arg3 ] 189! 190 191java_lang_reflect_Array_setShort_java_lang_Object: arg1 int: arg2 short: arg3 192 <javaNativeMethod: #'setShort(Ljava/lang/Object;IS)V' 193 for: #{Java.java.lang.reflect.Array} static: true> 194 ^(arg1 class == Array 195 or: [ arg1 class == JavaByteArray 196 or: [ arg1 class == ByteArray 197 or: [ arg1 class == JavaCharArray ]]]) 198 ifTrue: [ JavaVM throw: Java.java.lang.IllegalArgumentException ] 199 ifFalse: [ arg1 javaAt: arg2 put: arg3 ] 200! 201 202java_lang_reflect_Array_setInt_java_lang_Object: arg1 int: arg2 int: arg3 203 <javaNativeMethod: #'setInt(Ljava/lang/Object;II)V' 204 for: #{Java.java.lang.reflect.Array} static: true> 205 ^(arg1 class == JavaDoubleArray 206 or: [ arg1 class == JavaFloatArray 207 or: [ arg1 class == JavaIntArray 208 or: [ arg1 class == JavaLong Array ]]]) 209 ifFalse: [ JavaVM throw: Java.java.lang.IllegalArgumentException ] 210 ifTrue: [ arg1 javaAt: arg2 put: arg3 ] 211! 212 213java_lang_reflect_Array_setLong_java_lang_Object: arg1 int: arg2 long: arg3 214 <javaNativeMethod: #'setLong(Ljava/lang/Object;IJ)V' 215 for: #{Java.java.lang.reflect.Array} static: true> 216 ^(arg1 class == JavaDoubleArray 217 or: [ arg1 class == JavaFloatArray 218 or: [ arg1 class == JavaLong Array ]]) 219 ifFalse: [ JavaVM throw: Java.java.lang.IllegalArgumentException ] 220 ifTrue: [ arg1 javaAt: arg2 put: arg3 ] 221! 222 223java_lang_reflect_Array_setFloat_java_lang_Object: arg1 int: arg2 float: arg3 224 <javaNativeMethod: #'setFloat(Ljava/lang/Object;IF)V' 225 for: #{Java.java.lang.reflect.Array} static: true> 226 ^(arg1 class == JavaDoubleArray or: [ arg1 class == JavaFloatArray ]) 227 ifFalse: [ JavaVM throw: Java.java.lang.IllegalArgumentException ] 228 ifTrue: [ arg1 javaAt: arg2 put: arg3 ] 229! 230 231java_lang_reflect_Array_setDouble_java_lang_Object: arg1 int: arg2 double: arg3 232 <javaNativeMethod: #'setDouble(Ljava/lang/Object;ID)V' 233 for: #{Java.java.lang.reflect.Array} static: true> 234 ^arg1 class == JavaDoubleArray 235 ifFalse: [ JavaVM throw: Java.java.lang.IllegalArgumentException ] 236 ifTrue: [ arg1 javaAt: arg2 put: arg3 ] 237! 238 239java_lang_reflect_Array_setChar_java_lang_Object: arg1 int: arg2 char: arg3 240 <javaNativeMethod: #'setChar(Ljava/lang/Object;IC)V' 241 for: #{Java.java.lang.reflect.Array} static: true> 242 ^(arg1 class == Array 243 or: [ arg1 class == ByteArray 244 or: [ arg1 class == JavaShortArray 245 or: [ arg1 class == JavaCharArray ]]]) 246 ifTrue: [ JavaVM throw: Java.java.lang.IllegalArgumentException ] 247 ifFalse: [ arg1 javaAt: arg2 put: arg3 ] 248! 249 250java_lang_reflect_Array_setBoolean_java_lang_Object: arg1 int: arg2 boolean: arg3 251 <javaNativeMethod: #'setBoolean(Ljava/lang/Object;IZ)V' 252 for: #{Java.java.lang.reflect.Array} static: true> 253 ^arg1 class == ByteArray 254 ifFalse: [ JavaVM throw: Java.java.lang.IllegalArgumentException ] 255 ifTrue: [ arg1 javaAt: arg2 put: arg3 ] 256! ! 257 258