/[classpath]/classpath/native/jni/java-io/java_io_VMObjectStreamClass.c
ViewVC logotype

Diff of /classpath/native/jni/java-io/java_io_VMObjectStreamClass.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.9 by mark, Tue Oct 26 20:26:03 2004 UTC revision 1.10 by glavaux, Fri Apr 8 13:01:42 2005 UTC
# Line 50  exception statement from your version. * Line 50  exception statement from your version. *
50   * Signature: (Ljava/lang/Class;)Z   * Signature: (Ljava/lang/Class;)Z
51   */   */
52  JNIEXPORT jboolean JNICALL  JNIEXPORT jboolean JNICALL
53  Java_java_io_VMObjectStreamClass_hasClassInitializer(JNIEnv * env,  Java_java_io_VMObjectStreamClass_hasClassInitializer (JNIEnv * env,
54                                                   jclass vmosklass                                                        jclass vmosklass
55                                                   __attribute__ ((__unused__)),                                                        __attribute__ ((__unused__)), jclass klass)
                                                  jclass klass )  
56  {  {
57    jmethodID mid = (*env)->GetStaticMethodID(env, klass, "<clinit>", "()V");    jmethodID mid = (*env)->GetStaticMethodID (env, klass, "<clinit>", "()V");
58    if (mid == NULL)    if (mid == NULL)
59      {      {
60        (*env)->ExceptionClear(env);        (*env)->ExceptionClear (env);
61        return JNI_FALSE;        return JNI_FALSE;
62      }      }
63    return JNI_TRUE;    return JNI_TRUE;
64  }  }
65    
66  static void throwInternalError(JNIEnv *env)  static void
67    throwInternalError (JNIEnv * env)
68  {  {
69    jclass internalErrorClass;    jclass internalErrorClass;
70    jthrowable previousException, newException;    jthrowable previousException, newException;
71    jmethodID initException, getMessageID, initCauseID;    jmethodID initException, getMessageID, initCauseID;
72    jstring message;    jstring message;
73    
74    internalErrorClass = (*env)->FindClass(env, "java/lang/InternalError");    internalErrorClass = (*env)->FindClass (env, "java/lang/InternalError");
75    /** Just give up if this also fails. */    /** Just give up if this also fails. */
76    if (internalErrorClass == NULL)    if (internalErrorClass == NULL)
77      return;      return;
78    
79    previousException = (*env)->ExceptionOccurred(env);    previousException = (*env)->ExceptionOccurred (env);
80    
81    if (previousException == NULL)    if (previousException == NULL)
82      {      {
83        (*env)->ThrowNew(env, internalErrorClass, "Unknown error raised by the VM");        (*env)->ThrowNew (env, internalErrorClass,
84                            "Unknown error raised by the VM");
85        return;        return;
86      }      }
87      
88    initException = (*env)->GetMethodID    initException = (*env)->GetMethodID
89      (env, internalErrorClass, "<init>", "(Ljava/lang/String;)V");      (env, internalErrorClass, "<init>", "(Ljava/lang/String;)V");
90    getMessageID = (*env)->GetMethodID    getMessageID = (*env)->GetMethodID
91      (env, (*env)->GetObjectClass(env, previousException),      (env, (*env)->GetObjectClass (env, previousException),
92       "getMessage", "()Ljava/lang/String;");       "getMessage", "()Ljava/lang/String;");
93    initCauseID = (*env)->GetMethodID    initCauseID = (*env)->GetMethodID
94      (env, internalErrorClass, "initCause", "(Ljava/lang/Throwable;)V");      (env, internalErrorClass, "initCause", "(Ljava/lang/Throwable;)V");
95    
96    message = (*env)->CallObjectMethod(env, previousException,    message = (*env)->CallObjectMethod (env, previousException, getMessageID);
                                      getMessageID);  
97    
98    newException = (*env)->NewObject(env, internalErrorClass, initException,    newException = (*env)->NewObject (env, internalErrorClass, initException,
99                                     message);                                      message);
100    (*env)->CallVoidMethod(env, newException, initCauseID,    (*env)->CallVoidMethod (env, newException, initCauseID, previousException);
                          previousException);  
101    
102    (*env)->ExceptionClear(env);    (*env)->ExceptionClear (env);
103    (*env)->Throw(env, newException);    (*env)->Throw (env, newException);
104  }  }
105    
106  static jfieldID getFieldReference(JNIEnv *env, jobject field,  static jfieldID
107                                    const char *type)  getFieldReference (JNIEnv * env, jobject field, const char *type)
108  {  {
109    jclass classClass;    jclass classClass;
110    jclass fieldClass;    jclass fieldClass;
# Line 120  static jfieldID getFieldReference(JNIEnv Line 119  static jfieldID getFieldReference(JNIEnv
119    jstring tname;    jstring tname;
120    int i;    int i;
121    
122    fieldClass = (*env)->GetObjectClass(env, field);    fieldClass = (*env)->GetObjectClass (env, field);
123    
124    mid = (*env)->GetMethodID(env, fieldClass, "getName", "()Ljava/lang/String;");    mid =
125    if (mid == NULL || (*env)->ExceptionOccurred(env) != NULL)      (*env)->GetMethodID (env, fieldClass, "getName", "()Ljava/lang/String;");
126      if (mid == NULL || (*env)->ExceptionOccurred (env) != NULL)
127      {      {
128        throwInternalError(env);        throwInternalError (env);
129        return NULL;        return NULL;
130      }      }
131    
132    name = (*env)->CallObjectMethod(env, field, mid);    name = (*env)->CallObjectMethod (env, field, mid);
133    field_name = (*env)->GetStringUTFChars(env, name, NULL);    field_name = (*env)->GetStringUTFChars (env, name, NULL);
134    
135    mid = (*env)->GetMethodID(env, fieldClass,    mid = (*env)->GetMethodID (env, fieldClass,
136                              "getDeclaringClass",                               "getDeclaringClass", "()Ljava/lang/Class;");
137                              "()Ljava/lang/Class;");    if (mid == NULL || (*env)->ExceptionOccurred (env) != NULL)
   if (mid == NULL || (*env)->ExceptionOccurred(env) != NULL)  
138      {      {
139        throwInternalError(env);        throwInternalError (env);
140        return NULL;        return NULL;
141      }      }
142    
143    declaringClass = (*env)->CallObjectMethod(env, field, mid);    declaringClass = (*env)->CallObjectMethod (env, field, mid);
144    
145    /* Do we need to find out the exact type descriptor of the field? */    /* Do we need to find out the exact type descriptor of the field? */
146    if (type == NULL)    if (type == NULL)
147      {      {
148        char *the_type;        char *the_type;
149    
150        mid = (*env)->GetMethodID(env, fieldClass,        mid = (*env)->GetMethodID (env, fieldClass,
151                                  "getType",                                   "getType", "()Ljava/lang/Class;");
                                 "()Ljava/lang/Class;");  
152    
153        if (mid == NULL || (*env)->ExceptionOccurred(env) != NULL)        if (mid == NULL || (*env)->ExceptionOccurred (env) != NULL)
154          {          {
155            throwInternalError(env);            throwInternalError (env);
156            return NULL;            return NULL;
157          }          }
158    
159        typeClass = (*env)->CallObjectMethod(env, field, mid);        typeClass = (*env)->CallObjectMethod (env, field, mid);
160        classClass = (*env)->FindClass(env, "java/lang/Class");        classClass = (*env)->FindClass (env, "java/lang/Class");
161    
162        mid = (*env)->GetMethodID(env, classClass,        mid = (*env)->GetMethodID (env, classClass,
163                                  "getName",                                   "getName", "()Ljava/lang/String;");
                                 "()Ljava/lang/String;");  
164    
165        if (mid == NULL || (*env)->ExceptionOccurred(env) != NULL)        if (mid == NULL || (*env)->ExceptionOccurred (env) != NULL)
166          {          {
167            throwInternalError(env);            throwInternalError (env);
168            return NULL;            return NULL;
169          }          }
170    
171        tname = (*env)->CallObjectMethod(env, typeClass, mid);        tname = (*env)->CallObjectMethod (env, typeClass, mid);
172        type_name = (*env)->GetStringUTFChars(env, tname, NULL);        type_name = (*env)->GetStringUTFChars (env, tname, NULL);
173    
174        /*        /*
175         * If it isn't an array class then the actual field type descriptor         * If it isn't an array class then the actual field type descriptor
176         * starts with 'L', ends with ';' and has '/' instead of '.'.         * starts with 'L', ends with ';' and has '/' instead of '.'.
177         */         */
178        type_len = strlen((char *) type_name);        type_len = strlen ((char *) type_name);
179        if (type_name[0] != '[')        if (type_name[0] != '[')
180          {          {
181            /* XXX - FIXME - should not use dynamic allocation in core lib. */            /* XXX - FIXME - should not use dynamic allocation in core lib. */
182            the_type = (char *) malloc(type_len + 3);            the_type = (char *) malloc (type_len + 3);
183            the_type[0] = 'L';            the_type[0] = 'L';
184            the_type[type_len + 1] = ';';            the_type[type_len + 1] = ';';
185            the_type[type_len + 2] = '\0';            the_type[type_len + 2] = '\0';
# Line 191  static jfieldID getFieldReference(JNIEnv Line 188  static jfieldID getFieldReference(JNIEnv
188        else        else
189          {          {
190            /* XXX - FIXME - should not use dynamic allocation in core lib. */            /* XXX - FIXME - should not use dynamic allocation in core lib. */
191            the_type = (char *) malloc(type_len + 1);            the_type = (char *) malloc (type_len + 1);
192            the_type[type_len] = '\0';            the_type[type_len] = '\0';
193          }          }
194    
195        for (i = 0; i < type_len; i++)        for (i = 0; i < type_len; i++)
196          if (type_name[i] == '.')          if (type_name[i] == '.')
197            the_type[i] = '/';            the_type[i] = '/';
198          else          else
199            the_type[i] = type_name[i];            the_type[i] = type_name[i];
200    
201        if (type_name[0] != '[')        if (type_name[0] != '[')
202          the_type--;          the_type--;
203    
204        (*env)->ReleaseStringUTFChars(env, tname, type_name);        (*env)->ReleaseStringUTFChars (env, tname, type_name);
205        fid = (*env)->GetFieldID(env, declaringClass, field_name, the_type);        fid = (*env)->GetFieldID (env, declaringClass, field_name, the_type);
206        free(the_type);        free (the_type);
207      }      }
208    else    else
209      {      {
210        type_len = -1;        type_len = -1;
211        fid = (*env)->GetFieldID(env, declaringClass, field_name, type);        fid = (*env)->GetFieldID (env, declaringClass, field_name, type);
212      }      }
213    
214    if (fid == NULL)    if (fid == NULL)
215      {      {
216        throwInternalError(env);        throwInternalError (env);
217        return NULL;        return NULL;
218      }      }
219    (*env)->ReleaseStringUTFChars(env, name, field_name);    (*env)->ReleaseStringUTFChars (env, name, field_name);
220    
221    return fid;    return fid;
222  }  }
# Line 230  static jfieldID getFieldReference(JNIEnv Line 227  static jfieldID getFieldReference(JNIEnv
227   * Signature: (Ljava/lang/reflect/Field;Ljava/lang/Object;Z)V   * Signature: (Ljava/lang/reflect/Field;Ljava/lang/Object;Z)V
228   */   */
229  JNIEXPORT void JNICALL  JNIEXPORT void JNICALL
230  Java_java_io_VMObjectStreamClass_setBooleanNative(JNIEnv * env,  Java_java_io_VMObjectStreamClass_setBooleanNative (JNIEnv * env,
231                                                    jclass vmosklass                                                     jclass vmosklass
232                                                    __attribute__ ((__unused__)),                                                     __attribute__ ((__unused__)), jobject field, jobject object, jboolean value)
                                                   jobject field,  
                                                   jobject object,  
                                                   jboolean value )  
233  {  {
234    jfieldID fid = getFieldReference (env, field, "Z");    jfieldID fid = getFieldReference (env, field, "Z");
235    
236    if (fid != NULL)    if (fid != NULL)
237      (*env)->SetBooleanField(env, object, fid, value);      (*env)->SetBooleanField (env, object, fid, value);
238  }  }
239    
240  /*  /*
# Line 249  Java_java_io_VMObjectStreamClass_setBool Line 243  Java_java_io_VMObjectStreamClass_setBool
243   * Signature: (Ljava/lang/reflect/Field;Ljava/lang/Object;C)V   * Signature: (Ljava/lang/reflect/Field;Ljava/lang/Object;C)V
244   */   */
245  JNIEXPORT void JNICALL  JNIEXPORT void JNICALL
246  Java_java_io_VMObjectStreamClass_setCharNative(JNIEnv * env,  Java_java_io_VMObjectStreamClass_setCharNative (JNIEnv * env,
247                                                 jclass vmosklass                                                  jclass vmosklass
248                                                 __attribute__ ((__unused__)),                                                  __attribute__ ((__unused__)),
249                                                 jobject field,                                                  jobject field,
250                                                 jobject object,                                                  jobject object, jchar value)
                                                jchar value )  
251  {  {
252    jfieldID fid = getFieldReference (env, field, "C");    jfieldID fid = getFieldReference (env, field, "C");
253    
254    if (fid != NULL)    if (fid != NULL)
255      (*env)->SetCharField(env, object, fid, value);      (*env)->SetCharField (env, object, fid, value);
256  }  }
257    
258  /*  /*
# Line 268  Java_java_io_VMObjectStreamClass_setChar Line 261  Java_java_io_VMObjectStreamClass_setChar
261   * Signature: (Ljava/lang/reflect/Field;Ljava/lang/Object;B)V   * Signature: (Ljava/lang/reflect/Field;Ljava/lang/Object;B)V
262   */   */
263  JNIEXPORT void JNICALL  JNIEXPORT void JNICALL
264  Java_java_io_VMObjectStreamClass_setByteNative(JNIEnv * env,  Java_java_io_VMObjectStreamClass_setByteNative (JNIEnv * env,
265                                                 jclass vmosklass                                                  jclass vmosklass
266                                                 __attribute__ ((__unused__)),                                                  __attribute__ ((__unused__)),
267                                                 jobject field,                                                  jobject field,
268                                                 jobject object,                                                  jobject object, jbyte value)
                                                jbyte value )  
269  {  {
270    jfieldID fid = getFieldReference (env, field, "B");    jfieldID fid = getFieldReference (env, field, "B");
271    
272    if (fid != NULL)    if (fid != NULL)
273      (*env)->SetByteField(env, object, fid, value);      (*env)->SetByteField (env, object, fid, value);
274  }  }
275    
276    
# Line 288  Java_java_io_VMObjectStreamClass_setByte Line 280  Java_java_io_VMObjectStreamClass_setByte
280   * Signature: (Ljava/lang/reflect/Field;Ljava/lang/Object;S)V   * Signature: (Ljava/lang/reflect/Field;Ljava/lang/Object;S)V
281   */   */
282  JNIEXPORT void JNICALL  JNIEXPORT void JNICALL
283  Java_java_io_VMObjectStreamClass_setShortNative(JNIEnv * env,  Java_java_io_VMObjectStreamClass_setShortNative (JNIEnv * env,
284                                                  jclass vmosklass                                                   jclass vmosklass
285                                                  __attribute__ ((__unused__)),                                                   __attribute__ ((__unused__)),
286                                                  jobject field,                                                   jobject field,
287                                                  jobject object,                                                   jobject object, jshort value)
                                                 jshort value )  
288  {  {
289    jfieldID fid = getFieldReference (env, field, "S");    jfieldID fid = getFieldReference (env, field, "S");
290    
291    if (fid != NULL)    if (fid != NULL)
292      (*env)->SetShortField(env, object, fid, value);      (*env)->SetShortField (env, object, fid, value);
293  }  }
294    
295  /*  /*
# Line 307  Java_java_io_VMObjectStreamClass_setShor Line 298  Java_java_io_VMObjectStreamClass_setShor
298   * Signature: (Ljava/lang/reflect/Field;Ljava/lang/Object;I)V   * Signature: (Ljava/lang/reflect/Field;Ljava/lang/Object;I)V
299   */   */
300  JNIEXPORT void JNICALL  JNIEXPORT void JNICALL
301  Java_java_io_VMObjectStreamClass_setIntNative(JNIEnv * env,  Java_java_io_VMObjectStreamClass_setIntNative (JNIEnv * env,
302                                                jclass vmosklass                                                 jclass vmosklass
303                                                __attribute__ ((__unused__)),                                                 __attribute__ ((__unused__)),
304                                                jobject field,                                                 jobject field,
305                                                jobject object,                                                 jobject object, jint value)
                                               jint value )  
306  {  {
307    jfieldID fid = getFieldReference (env, field, "I");    jfieldID fid = getFieldReference (env, field, "I");
308    
309    if (fid != NULL)    if (fid != NULL)
310      (*env)->SetIntField(env, object, fid, value);      (*env)->SetIntField (env, object, fid, value);
311  }  }
312    
313    
# Line 327  Java_java_io_VMObjectStreamClass_setIntN Line 317  Java_java_io_VMObjectStreamClass_setIntN
317   * Signature: (Ljava/lang/reflect/Field;Ljava/lang/Object;J)V   * Signature: (Ljava/lang/reflect/Field;Ljava/lang/Object;J)V
318   */   */
319  JNIEXPORT void JNICALL  JNIEXPORT void JNICALL
320  Java_java_io_VMObjectStreamClass_setLongNative(JNIEnv * env,  Java_java_io_VMObjectStreamClass_setLongNative (JNIEnv * env,
321                                                 jclass vmosklass                                                  jclass vmosklass
322                                                 __attribute__ ((__unused__)),                                                  __attribute__ ((__unused__)),
323                                                 jobject field,                                                  jobject field,
324                                                 jobject object,                                                  jobject object, jlong value)
                                                jlong value )  
325  {  {
326    jfieldID fid = getFieldReference (env, field, "J");    jfieldID fid = getFieldReference (env, field, "J");
327    
328    if (fid != NULL)    if (fid != NULL)
329      (*env)->SetLongField(env, object, fid, value);      (*env)->SetLongField (env, object, fid, value);
330  }  }
331    
332    
# Line 347  Java_java_io_VMObjectStreamClass_setLong Line 336  Java_java_io_VMObjectStreamClass_setLong
336   * Signature: (Ljava/lang/reflect/Field;Ljava/lang/Object;F)V   * Signature: (Ljava/lang/reflect/Field;Ljava/lang/Object;F)V
337   */   */
338  JNIEXPORT void JNICALL  JNIEXPORT void JNICALL
339  Java_java_io_VMObjectStreamClass_setFloatNative(JNIEnv * env,  Java_java_io_VMObjectStreamClass_setFloatNative (JNIEnv * env,
340                                                  jclass vmosklass                                                   jclass vmosklass
341                                                  __attribute__ ((__unused__)),                                                   __attribute__ ((__unused__)),
342                                                  jobject field,                                                   jobject field,
343                                                  jobject object,                                                   jobject object, jfloat value)
                                                 jfloat value )  
344  {  {
345    jfieldID fid = getFieldReference (env, field, "F");    jfieldID fid = getFieldReference (env, field, "F");
346    
347    if (fid != NULL)    if (fid != NULL)
348      (*env)->SetFloatField(env, object, fid, value);      (*env)->SetFloatField (env, object, fid, value);
349  }  }
350    
351  /*  /*
# Line 366  Java_java_io_VMObjectStreamClass_setFloa Line 354  Java_java_io_VMObjectStreamClass_setFloa
354   * Signature: (Ljava/lang/reflect/Field;Ljava/lang/Object;D)V   * Signature: (Ljava/lang/reflect/Field;Ljava/lang/Object;D)V
355   */   */
356  JNIEXPORT void JNICALL  JNIEXPORT void JNICALL
357  Java_java_io_VMObjectStreamClass_setDoubleNative(JNIEnv * env,  Java_java_io_VMObjectStreamClass_setDoubleNative (JNIEnv * env,
358                                                   jclass vmosklass                                                    jclass vmosklass
359                                                   __attribute__ ((__unused__)),                                                    __attribute__ ((__unused__)), jobject field, jobject object, jdouble value)
                                                  jobject field,  
                                                  jobject object,  
                                                  jdouble value )  
360  {  {
361    jfieldID fid = getFieldReference (env, field, "D");    jfieldID fid = getFieldReference (env, field, "D");
362    
363    if (fid != NULL)    if (fid != NULL)
364      (*env)->SetDoubleField(env, object, fid, value);      (*env)->SetDoubleField (env, object, fid, value);
365  }  }
366    
367  /*  /*
# Line 385  Java_java_io_VMObjectStreamClass_setDoub Line 370  Java_java_io_VMObjectStreamClass_setDoub
370   * Signature: (Ljava/lang/reflect/Field;Ljava/lang/Object;Ljava/lang/Object;)V   * Signature: (Ljava/lang/reflect/Field;Ljava/lang/Object;Ljava/lang/Object;)V
371   */   */
372  JNIEXPORT void JNICALL  JNIEXPORT void JNICALL
373  Java_java_io_VMObjectStreamClass_setObjectNative(JNIEnv * env,  Java_java_io_VMObjectStreamClass_setObjectNative (JNIEnv * env,
374                                                   jclass vmosklass                                                    jclass vmosklass
375                                                   __attribute__ ((__unused__)),                                                    __attribute__ ((__unused__)), jobject field, jobject object, jobject value)
                                                  jobject field,  
                                                  jobject object,  
                                                  jobject value )  
376  {  {
377    jfieldID fid = getFieldReference (env, field, NULL);    jfieldID fid = getFieldReference (env, field, NULL);
378    
379    if (fid != NULL)    if (fid != NULL)
380      (*env)->SetObjectField(env, object, fid, value);      (*env)->SetObjectField (env, object, fid, value);
381  }  }

Legend:
Removed from v.1.9  
changed lines
  Added in v.1.10

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26