//*,{ // "type":"function", // "name":"setConfig(callback,[filename])", // "text":"读取或设置配置文件,配置文件是一个 Json 格式的文本文件,可以是 utf-8 获取 ansi 编码。", // "param":[ // { // "type":"function", // "name":"callback(cfg)", // "text":"setConfig 函数如果成功,会触发这个回调函数,cfg 是一个对象,它的属性就是配置内容,对这个对象的任何更改最后都会作为 Json 格式保存到配置文件。" // }, // { // "type":"string", // "name":"[filename]", // "text":"配置文件名,缺省是和脚本同路径同名的一个后缀为“.json”的文本文件,如果指定了文件名,则读取和保存对应的文件。" // } // ], // "return":{ // "type":"boolean", // "text":"如果成功打开了配置文件,函数返回 true,否则返回 undefined。" // } //}//* Handle<Value> setConfig(const Arguments& args){ HandleScope stack; while(true){ if(args.Length()<1) break; if(!args[0]->IsFunction()) break; cs::String file; if(args.Length()>1) GetString(args[1],file); cs::Config cfg(file); cs::Json* json = cfg.Lock(); if(!json) break; json->ToString(file,false); Handle<Object> glb = GetGlobal(); Handle<Object> JSON = glb->Get(NEW_STR(JSON))->ToObject(); Handle<Function> parse = Handle<Function>::Cast(JSON->Get(NEW_STR(parse))); Handle<Function> stringify = Handle<Function>::Cast(JSON->Get(NEW_STR(stringify))); Handle<Function> callback = Handle<Function>::Cast(args[0]); Handle<Value> argv[3]; argv[0] = NEW_WSTR(file.Handle()); Handle<Value> v = parse->Call(JSON,1,argv); if(v.IsEmpty()||!v->IsObject()) v = Object::New(); argv[0] = v; CallFunc(glb,callback,1,argv); v = stringify->Call(JSON,1,argv); GetString(v,file); json->Parse(file); return True(); } return Undefined(); }
int Scene::Tick(int* currFunction, int* currTask) { if(IsDone()) return (int)SUCCES; if(stack.empty()) return (int)FAILURE; // Go to stack and execute last entry if not null-pointer. If null-pointer, remove and take next. If stack is empty, return false. while(functions[stack.back().x][stack.back().y] == UNDEFINED) { // Find entry which is not undefined stack.pop_back(); if(stack.empty()) return FAILURE; // No more commmands. We already checked if we solved the task, so we return FAILURE } *currFunction = stack.back().x; *currTask = stack.back().y; // Execute function int returnValue = CallFunc(functions[stack.back().x][stack.back().y]); // (x, y+1) into stack. stack.back().y++; // If return is not -1, put (return, 0) into stack; if(returnValue != -1) stack.push_back((Pos){returnValue, 0}); return (int)NOT_DONE; }
static uae_u32 copyfrombuff (TrapContext *ctx, uaecptr from, uaecptr to, uae_u32 len, uaecptr func) { m68k_areg (regs, 0) = to; m68k_areg (regs, 1) = from; m68k_dreg (regs, 0) = len; return CallFunc (ctx, func); }
static uae_u32 packetfilter (TrapContext *ctx, uaecptr hook, uaecptr ios2, uaecptr data) { uae_u32 a2, v; a2 = m68k_areg (regs, 2); m68k_areg (regs, 0) = hook; m68k_areg (regs, 2) = ios2; m68k_areg (regs, 1) = data; v = CallFunc (ctx, get_long (hook + 8)); m68k_areg (regs, 2) = a2; return v; }
s64 SysCalls::DoSyscall(u32 code) { if(code < 0x400) { if(sc_table[code]) { (*sc_table[code])(); return SC_ARGS_1; } //TODO: remove this switch(code) { //process case 2: return lv2ProcessWaitForChild(CPU); case 4: return lv2ProcessGetStatus(CPU); case 5: return lv2ProcessDetachChild(CPU); case 12: return lv2ProcessGetNumberOfObject(CPU); case 13: return lv2ProcessGetId(CPU); case 18: return lv2ProcessGetPpid(CPU); case 19: return lv2ProcessKill(CPU); case 23: return lv2ProcessWaitForChild2(CPU); case 25: return lv2ProcessGetSdkVersion(CPU); //timer case 141: case 142: Sleep(SC_ARGS_1 / (1000 * 1000)); return 0; //tty case 988: ConLog.Warning("SysCall 988! r3: 0x%llx, r4: 0x%llx, pc: 0x%llx", CPU.GPR[3], CPU.GPR[4], CPU.PC); return 0; case 999: dump_enable = !dump_enable; ConLog.Warning("Dump %s", dump_enable ? "enabled" : "disabled"); return 0; } ConLog.Error("Unknown syscall: %d - %08x", code, code); return 0; } if(CallFunc(code)) return SC_ARGS_1; //ConLog.Error("Unknown function 0x%08x", code); //return 0; //TODO: remove this return DoFunc(code); }
llvm::Value *CodeGen::CallMulWithOverflow(llvm::Value *left, llvm::Value *right, llvm::Value *&overflow_bit) { PELOTON_ASSERT(left->getType() == right->getType()); llvm::Function *mul_func = llvm::Intrinsic::getDeclaration( &GetModule(), llvm::Intrinsic::smul_with_overflow, left->getType()); // Perform the multiplication llvm::Value *mul_result = CallFunc(mul_func, {left, right}); // Pull out the overflow bit from the resulting aggregate/struct overflow_bit = GetBuilder().CreateExtractValue(mul_result, 1); // Pull out the actual result of the subtraction return GetBuilder().CreateExtractValue(mul_result, 0); }
llvm::Value *CodeGen::CallSubWithOverflow(llvm::Value *left, llvm::Value *right, llvm::Value *&overflow_bit) { PELOTON_ASSERT(left->getType() == right->getType()); // Get the intrinsic that does the addition with overflow checking llvm::Function *sub_func = llvm::Intrinsic::getDeclaration( &GetModule(), llvm::Intrinsic::ssub_with_overflow, left->getType()); // Perform the subtraction llvm::Value *sub_result = CallFunc(sub_func, {left, right}); // Pull out the overflow bit from the resulting aggregate/struct overflow_bit = GetBuilder().CreateExtractValue(sub_result, 1); // Pull out the actual result of the subtraction return GetBuilder().CreateExtractValue(sub_result, 0); }
void SysCalls::DoSyscall(u32 code) { if(code < 1024) { (*sc_table[code])(); return; } if(CallFunc(code)) { return; } //ConLog.Error("Unknown function 0x%08x", code); //return 0; //TODO: remove this declCPU(); RESULT(DoFunc(code)); }
llvm::Value *CodeGen::CallPrintf(const std::string &format, const std::vector<llvm::Value *> &args) { auto *printf_fn = LookupBuiltin("printf"); if (printf_fn == nullptr) { printf_fn = RegisterBuiltin( "printf", llvm::TypeBuilder<int(char *, ...), false>::get(GetContext()), reinterpret_cast<void *>(printf)); } auto &ir_builder = code_context_.GetBuilder(); auto *format_str = ir_builder.CreateGEP(ConstString(format), {Const32(0), Const32(0)}); // Collect all the arguments into a vector std::vector<llvm::Value *> printf_args{format_str}; printf_args.insert(printf_args.end(), args.begin(), args.end()); // Call the function return CallFunc(printf_fn, printf_args); }
uae_u32 trap_call_func(TrapContext *ctx, uaecptr func) { uae_u32 v; if (trap_is_indirect_null(ctx)) { uae_u8 *p = ctx->host_trap_data + RTAREA_TRAP_DATA_EXTRA; for (int i = 0; i < 16; i++) { if (ctx->calllib_reg_inuse[i]) { put_long_host(p, ctx->calllib_regs[i]); ctx->calllib_reg_inuse[i] = 0; } else { put_long_host(p, ctx->saved_regs.regs[i]); } p += 4; } v = call_hardware_trap_back(ctx, TRAPCMD_CALL_FUNC, func, ctx->amiga_trap_data + RTAREA_TRAP_DATA_EXTRA, 0, 0); } else { uae_u32 storedregs[16]; bool storedregsused[16]; for (int i = 0; i < 16; i++) { storedregsused[i] = false; if (ctx->calllib_reg_inuse[i]) { if ((i & 7) >= 2) { storedregsused[i] = true; storedregs[i] = regs.regs[i]; } regs.regs[i] = ctx->calllib_regs[i]; } ctx->calllib_reg_inuse[i] = 0; } v = CallFunc(ctx, func); for (int i = 0; i < 16; i++) { if (storedregsused[i]) { regs.regs[i] = storedregs[i]; } } } return v; }
void Thread::run() //called automatically when we start the thread { emit CallFunc(SArg1); //must be directly connected to thread for progress bar to work! ( }
void Switch::spawnBombInRoom() { Value nil; // run the script where we call our c++ function CallFunc(luaState, "spawn_bombs", nil); }
int main() { std::cout << CallFunc(&Foo::pfnFoo, 100U, 0.5) << std::endl; std::cout << CallFunc<UINT, UINT, double>(&Foo::pfnFoo, 100, 0.5f) << std::endl; }
llvm::Value *CodeGen::Sqrt(llvm::Value *val) { llvm::Function *sqrt_func = llvm::Intrinsic::getDeclaration( &GetModule(), llvm::Intrinsic::sqrt, val->getType()); return CallFunc(sqrt_func, {val}); }