/* * Class: org_haggle_DataObject * Method: getAttribute * Signature: (Ljava/lang/String;Ljava/lang/String;)Lorg/haggle/Attribute; */ JNIEXPORT jobject JNICALL Java_org_haggle_DataObject_getAttribute__Ljava_lang_String_2Ljava_lang_String_2(JNIEnv *env, jobject obj, jstring name, jstring value) { haggle_attr_t *attr; const char *namestr, *valuestr; namestr = (*env)->GetStringUTFChars(env, name, 0); if (!namestr) return NULL; valuestr = (*env)->GetStringUTFChars(env, value, 0); if (!valuestr) { (*env)->ReleaseStringUTFChars(env, name, namestr); return NULL; } attr = haggle_dataobject_get_attribute_by_name_value((haggle_dobj_t *)get_native_handle(env, JCLASS_DATAOBJECT, obj), namestr, valuestr); (*env)->ReleaseStringUTFChars(env, name, namestr); (*env)->ReleaseStringUTFChars(env, value, valuestr); if (!attr) return NULL; return java_object_new(env, JCLASS_ATTRIBUTE, haggle_attribute_copy(attr)); }
void java_context_run(java_context_t* j) { do { register u1 opcode = PC8; LOGF("[%d] (%2X) %s", PC, (int) opcode, j_opcodes[opcode].name); PB = PC; PC += 1; j_opcodes[opcode].handler (j); } while(j->flags == JAVACTX_FLAG_CONTINUE); if(unlikely(j->flags == JAVACTX_FLAG_EXCEPTION)) { register long i; for(i = 0; i < j->frame.method->code->code.exception_table_length; i++) { int spc = j->frame.method->code->code.exception_table[i].start_pc; int epc = j->frame.method->code->code.exception_table[i].end_pc; const char* exname = (const char*) j->assembly->java_this.jc_cp[j->assembly->java_this.jc_cp[j->frame.method->code->code.exception_table[i].catch_type].class_info.name_index].utf8_info.bytes; if(j->frame.regs.pb >= spc && j->frame.regs.pb <= epc) { if((strcmp(j->exception.name, exname) == 0) || (__check_exception(j->exception.name, exname) == J_OK)) { java_object_t* exobj = NULL; java_object_new(&exobj, j->exception.name); JPUSH(ptr, (void*) exobj); PC = PB = j->frame.method->code->code.exception_table[i].handler_pc; j->exception.name = NULL; j->exception.message = NULL; j->exception.owner = NULL; j->flags = JAVACTX_FLAG_CONTINUE; return java_context_run(j); } } } rethrow(j, j->parent); return; } #if HAVE_GC_H //GC_gcollect(); #endif j->flags = JAVACTX_FLAG_SUCCESS; }