void CodeGenContext::GenerateDisassmTables() { std::map<std::string, std::map<llvm::APInt,std::string,myAPIntCompare> >::iterator tableIter; for (tableIter=disassemblyTable.begin();tableIter!=disassemblyTable.end();++tableIter) { llvm::APInt tableSize=tableIter->second.rbegin()->first; llvm::APInt tableSize32=tableSize.zextOrTrunc(32); // Create a global variable to indicate the max size of the table llvm::ConstantInt* const_int32_1 = getConstantInt(tableSize32+1); llvm::GlobalVariable* gvar_int32_DIS_max = makeGlobal(getIntType(32),true,llvm::GlobalValue::ExternalLinkage,const_int32_1,getSymbolPrefix()+"DIS_max_"+tableIter->first); // Create a global array to hold the table llvm::PointerType* PointerTy_5 = llvm::PointerType::get(getIntType(8), 0); llvm::ArrayType* ArrayTy_4 = llvm::ArrayType::get(PointerTy_5, tableSize.getLimitedValue()+1); llvm::ConstantPointerNull* const_ptr_13 = llvm::ConstantPointerNull::get(PointerTy_5); std::vector<llvm::Constant*> const_array_9_elems; std::map<llvm::APInt,std::string,myAPIntCompare>::iterator slot=tableIter->second.begin(); llvm::APInt trackingSlot(tableSize.getBitWidth(),"0",16); while (slot!=tableIter->second.end()) { if (CompareEquals(slot->first,trackingSlot)) { llvm::ArrayType* ArrayTy_0 = llvm::ArrayType::get(getIntType(8), slot->second.length()-1); llvm::Constant* const_array_9 = getString(slot->second); llvm::GlobalVariable* gvar_array__str = makeGlobal(ArrayTy_0,true,llvm::GlobalValue::PrivateLinkage,const_array_9,getSymbolPrefix()+".str"+trackingSlot.toString(16,false)); gvar_array__str->setAlignment(1); std::vector<llvm::Constant*> const_ptr_12_indices; llvm::ConstantInt* const_int64_13 = getConstantZero(64); const_ptr_12_indices.push_back(const_int64_13); const_ptr_12_indices.push_back(const_int64_13); llvm::Constant* const_ptr_12 = llvm::ConstantExpr::getGetElementPtr(nullptr,gvar_array__str, const_ptr_12_indices); const_array_9_elems.push_back(const_ptr_12); ++slot; } else { const_array_9_elems.push_back(const_ptr_13); } trackingSlot++; } llvm::Constant* const_array_9 = llvm::ConstantArray::get(ArrayTy_4, const_array_9_elems); llvm::GlobalVariable* gvar_array_table = makeGlobal(ArrayTy_4,true,llvm::GlobalValue::ExternalLinkage,const_array_9, getSymbolPrefix()+"DIS_"+tableIter->first); } }
void TEditor::doSearchReplace() { int i; do { i = cmCancel; if( search(findStr, editorFlags) == False ) { if( (editorFlags & (efReplaceAll | efDoReplace)) != (efReplaceAll | efDoReplace) ) editorDialog( edSearchFailed ); } else if( (editorFlags & efDoReplace) != 0 ) { i = cmYes; if( (editorFlags & efPromptOnReplace) != 0 ) { TPoint c = makeGlobal( cursor ); i = editorDialog( edReplacePrompt, &c ); } if( i == cmYes ) { lock(); insertText( replaceStr, strlen(replaceStr), False); trackCursor(False); unlock(); } } } while( i != cmCancel && (editorFlags & efReplaceAll) != 0 ); }
HIDE void deserializeSEXP(SEXP o) { _dbg(rjprintf("attempt to deserialize %p (clCL=%p, oCL=%p)\n", o, clClassLoader, oClassLoader)); SEXP s = EXTPTR_PROT(o); if (TYPEOF(s) == RAWSXP && EXTPTR_PTR(o) == NULL) { JNIEnv *env = getJNIEnv(); if (env && clClassLoader && oClassLoader) { jbyteArray ser = newByteArray(env, RAW(s), LENGTH(s)); if (ser) { jmethodID mid = (*env)->GetMethodID(env, clClassLoader, "toObject", "([B)Ljava/lang/Object;"); if (mid) { jobject res = (*env)->CallObjectMethod(env, oClassLoader, mid, ser); if (res) { jobject go = makeGlobal(env, res); _mp(MEM_PROF_OUT("R %08x RNEW %08x\n", (int) go, (int) res)) if (go) { _dbg(rjprintf(" - succeeded: %p\n", go)); /* set the deserialized object */ EXTPTR_PTR(o) = (SEXP) go; /* Note: currently we don't remove the serialized content, because it was created explicitly using .jcache to allow repeated saving. Once this is handled by a hook, we shall remove it. However, to assure compatibility TAG is always NULL for now, so we do clear the cache if TAG is non-null for future use. */ if (EXTPTR_TAG(o) != R_NilValue) { /* remove the serialized raw vector */ SETCDR(o, R_NilValue); /* Note: this is abuse of the API since it uses the fact that PROT is stored in CDR */ } } } } releaseObject(env, ser); } }
/* jobject to SEXP encoding - 0.2 and earlier use INTSXP */ SEXP j2SEXP(JNIEnv *env, jobject o, int releaseLocal) { if (!env) error("Invalid Java environment in j2SEXP"); if (o) { jobject go = makeGlobal(env, o); _mp(MEM_PROF_OUT("R %08x RNEW %08x\n", (int) go, (int) o)) if (!go) error("Failed to create a global reference in Java."); _dbg(rjprintf(" j2SEXP: %lx -> %lx (release=%d)\n", (long)o, (long)go, releaseLocal)); if (releaseLocal) releaseObject(env, o); o=go; } { SEXP xp = R_MakeExternalPtr(o, R_NilValue, R_NilValue); #ifdef RJ_DEBUG { JNIEnv *env=getJNIEnv(); jstring s=callToString(env, o); const char *c="???"; if (s) c=(*env)->GetStringUTFChars(env, s, 0); _dbg(rjprintf("New Java object [%s] reference %lx (SEXP@%lx)\n", c, (long)o, (long)xp)); if (s) { (*env)->ReleaseStringUTFChars(env, s, c); releaseObject(env, s); } } #endif R_RegisterCFinalizerEx(xp, JRefObjectFinalizer, TRUE); return xp; } }
jclass getGlobalJavaClazz( JNIEnv* env, const char *name ){ return (jclass)makeGlobal(env, env->FindClass(name) ); }