782 } 783 value = kelem->multi_allocate(rank, dims, CHECK); 784 } else { 785 if (strcmp(field_signature, "[B") == 0) { 786 value = oopFactory::new_byteArray(length, CHECK); 787 } else if (strcmp(field_signature, "[Z") == 0) { 788 value = oopFactory::new_boolArray(length, CHECK); 789 } else if (strcmp(field_signature, "[C") == 0) { 790 value = oopFactory::new_charArray(length, CHECK); 791 } else if (strcmp(field_signature, "[S") == 0) { 792 value = oopFactory::new_shortArray(length, CHECK); 793 } else if (strcmp(field_signature, "[F") == 0) { 794 value = oopFactory::new_singleArray(length, CHECK); 795 } else if (strcmp(field_signature, "[D") == 0) { 796 value = oopFactory::new_doubleArray(length, CHECK); 797 } else if (strcmp(field_signature, "[I") == 0) { 798 value = oopFactory::new_intArray(length, CHECK); 799 } else if (strcmp(field_signature, "[J") == 0) { 800 value = oopFactory::new_longArray(length, CHECK); 801 } else if (field_signature[0] == '[' && field_signature[1] == 'L') { 802 KlassHandle kelem = resolve_klass(field_signature + 1, CHECK); 803 value = oopFactory::new_objArray(kelem(), length, CHECK); 804 } else { 805 report_error("unhandled array staticfield"); 806 } 807 } 808 java_mirror->obj_field_put(fd.offset(), value); 809 } else { 810 const char* string_value = parse_escaped_string(); 811 if (strcmp(field_signature, "I") == 0) { 812 int value = atoi(string_value); 813 java_mirror->int_field_put(fd.offset(), value); 814 } else if (strcmp(field_signature, "B") == 0) { 815 int value = atoi(string_value); 816 java_mirror->byte_field_put(fd.offset(), value); 817 } else if (strcmp(field_signature, "C") == 0) { 818 int value = atoi(string_value); 819 java_mirror->char_field_put(fd.offset(), value); 820 } else if (strcmp(field_signature, "S") == 0) { 821 int value = atoi(string_value); 822 java_mirror->short_field_put(fd.offset(), value); 823 } else if (strcmp(field_signature, "Z") == 0) { 824 int value = atoi(string_value); 825 java_mirror->bool_field_put(fd.offset(), value); 826 } else if (strcmp(field_signature, "J") == 0) { 827 jlong value; 828 if (sscanf(string_value, JLONG_FORMAT, &value) != 1) { 829 fprintf(stderr, "Error parsing long: %s\n", string_value); 830 return; 831 } 832 java_mirror->long_field_put(fd.offset(), value); 833 } else if (strcmp(field_signature, "F") == 0) { 834 float value = atof(string_value); 835 java_mirror->float_field_put(fd.offset(), value); 836 } else if (strcmp(field_signature, "D") == 0) { 837 double value = atof(string_value); 838 java_mirror->double_field_put(fd.offset(), value); 839 } else if (strcmp(field_signature, "Ljava/lang/String;") == 0) { 840 Handle value = java_lang_String::create_from_str(string_value, CHECK); 841 java_mirror->obj_field_put(fd.offset(), value()); 842 } else if (field_signature[0] == 'L') { 843 KlassHandle k = resolve_klass(string_value, CHECK); 844 oop value = InstanceKlass::cast(k())->allocate_instance(CHECK); 845 java_mirror->obj_field_put(fd.offset(), value); 846 } else { 847 report_error("unhandled staticfield"); 848 } 849 } 850 } 851 852 #if INCLUDE_JVMTI 853 void process_JvmtiExport(TRAPS) { 854 const char* field = parse_string(); 855 bool value = parse_int("JvmtiExport flag") != 0; 856 if (strcmp(field, "can_access_local_variables") == 0) { 857 JvmtiExport::set_can_access_local_variables(value); 858 } else if (strcmp(field, "can_hotswap_or_post_breakpoint") == 0) { 859 JvmtiExport::set_can_hotswap_or_post_breakpoint(value); 860 } else if (strcmp(field, "can_post_on_exceptions") == 0) { 861 JvmtiExport::set_can_post_on_exceptions(value); 862 } else { 863 report_error("Unrecognized JvmtiExport directive"); 864 } | 782 } 783 value = kelem->multi_allocate(rank, dims, CHECK); 784 } else { 785 if (strcmp(field_signature, "[B") == 0) { 786 value = oopFactory::new_byteArray(length, CHECK); 787 } else if (strcmp(field_signature, "[Z") == 0) { 788 value = oopFactory::new_boolArray(length, CHECK); 789 } else if (strcmp(field_signature, "[C") == 0) { 790 value = oopFactory::new_charArray(length, CHECK); 791 } else if (strcmp(field_signature, "[S") == 0) { 792 value = oopFactory::new_shortArray(length, CHECK); 793 } else if (strcmp(field_signature, "[F") == 0) { 794 value = oopFactory::new_singleArray(length, CHECK); 795 } else if (strcmp(field_signature, "[D") == 0) { 796 value = oopFactory::new_doubleArray(length, CHECK); 797 } else if (strcmp(field_signature, "[I") == 0) { 798 value = oopFactory::new_intArray(length, CHECK); 799 } else if (strcmp(field_signature, "[J") == 0) { 800 value = oopFactory::new_longArray(length, CHECK); 801 } else if (field_signature[0] == '[' && field_signature[1] == 'L') { 802 Klass* kelem = resolve_klass(field_signature + 1, CHECK); 803 value = oopFactory::new_objArray(kelem, length, CHECK); 804 } else { 805 report_error("unhandled array staticfield"); 806 } 807 } 808 java_mirror->obj_field_put(fd.offset(), value); 809 } else { 810 const char* string_value = parse_escaped_string(); 811 if (strcmp(field_signature, "I") == 0) { 812 int value = atoi(string_value); 813 java_mirror->int_field_put(fd.offset(), value); 814 } else if (strcmp(field_signature, "B") == 0) { 815 int value = atoi(string_value); 816 java_mirror->byte_field_put(fd.offset(), value); 817 } else if (strcmp(field_signature, "C") == 0) { 818 int value = atoi(string_value); 819 java_mirror->char_field_put(fd.offset(), value); 820 } else if (strcmp(field_signature, "S") == 0) { 821 int value = atoi(string_value); 822 java_mirror->short_field_put(fd.offset(), value); 823 } else if (strcmp(field_signature, "Z") == 0) { 824 int value = atoi(string_value); 825 java_mirror->bool_field_put(fd.offset(), value); 826 } else if (strcmp(field_signature, "J") == 0) { 827 jlong value; 828 if (sscanf(string_value, JLONG_FORMAT, &value) != 1) { 829 fprintf(stderr, "Error parsing long: %s\n", string_value); 830 return; 831 } 832 java_mirror->long_field_put(fd.offset(), value); 833 } else if (strcmp(field_signature, "F") == 0) { 834 float value = atof(string_value); 835 java_mirror->float_field_put(fd.offset(), value); 836 } else if (strcmp(field_signature, "D") == 0) { 837 double value = atof(string_value); 838 java_mirror->double_field_put(fd.offset(), value); 839 } else if (strcmp(field_signature, "Ljava/lang/String;") == 0) { 840 Handle value = java_lang_String::create_from_str(string_value, CHECK); 841 java_mirror->obj_field_put(fd.offset(), value()); 842 } else if (field_signature[0] == 'L') { 843 Klass* k = resolve_klass(string_value, CHECK); 844 oop value = InstanceKlass::cast(k)->allocate_instance(CHECK); 845 java_mirror->obj_field_put(fd.offset(), value); 846 } else { 847 report_error("unhandled staticfield"); 848 } 849 } 850 } 851 852 #if INCLUDE_JVMTI 853 void process_JvmtiExport(TRAPS) { 854 const char* field = parse_string(); 855 bool value = parse_int("JvmtiExport flag") != 0; 856 if (strcmp(field, "can_access_local_variables") == 0) { 857 JvmtiExport::set_can_access_local_variables(value); 858 } else if (strcmp(field, "can_hotswap_or_post_breakpoint") == 0) { 859 JvmtiExport::set_can_hotswap_or_post_breakpoint(value); 860 } else if (strcmp(field, "can_post_on_exceptions") == 0) { 861 JvmtiExport::set_can_post_on_exceptions(value); 862 } else { 863 report_error("Unrecognized JvmtiExport directive"); 864 } |