| 2332 | } |
| 2333 | |
| 2334 | pointer SchemeFFI::get_function_args(scheme* _sc, pointer args) |
| 2335 | { |
| 2336 | using namespace llvm; |
| 2337 | |
| 2338 | //Module* M = EXTLLVM::I()->M; |
| 2339 | //llvm::Function* func = M->getFunction(std::string(string_value(pair_car(args)))); |
| 2340 | llvm::Function* func = extemp::EXTLLVM::I()->getFunction(std::string(string_value(pair_car(args)))); |
| 2341 | if(func == 0) |
| 2342 | { |
| 2343 | return _sc->F; |
| 2344 | } |
| 2345 | |
| 2346 | std::string typestr; |
| 2347 | llvm::raw_string_ostream ss(typestr); |
| 2348 | func->getReturnType()->print(ss); |
| 2349 | |
| 2350 | const char* tmp_name = ss.str().c_str(); |
| 2351 | |
| 2352 | if(func->getReturnType()->isStructTy()) { |
| 2353 | rsplit(" = type ",(char*)tmp_name,tmp_str_a,tmp_str_b); |
| 2354 | tmp_name = tmp_str_a; |
| 2355 | } |
| 2356 | |
| 2357 | pointer str = mk_string(_sc, tmp_name); //_sc, ss.str().c_str()); //func->getReturnType()->getDescription().c_str()); |
| 2358 | pointer p = cons(_sc, str, _sc->NIL); |
| 2359 | |
| 2360 | Function::ArgumentListType::iterator funcargs = func->getArgumentList().begin(); |
| 2361 | while(funcargs != func->getArgumentList().end()) |
| 2362 | { |
| 2363 | Argument* a = funcargs; |
| 2364 | _sc->imp_env->insert(p); |
| 2365 | std::string typestr2; |
| 2366 | llvm::raw_string_ostream ss2(typestr2); |
| 2367 | a->getType()->print(ss2); |
| 2368 | |
| 2369 | tmp_name = ss2.str().c_str(); |
| 2370 | |
| 2371 | if(a->getType()->isStructTy()) { |
| 2372 | rsplit(" = type ",(char*)tmp_name,tmp_str_a,tmp_str_b); |
| 2373 | //printf("tmp:%s a:%s b:%s\n",(char*)tmp_name,tmp_str_a,tmp_str_b); |
| 2374 | tmp_name = tmp_str_a; |
| 2375 | } |
| 2376 | |
| 2377 | pointer str = mk_string(_sc, tmp_name); //_sc, ss2.str().c_str()); //a->getType()->getDescription().c_str()); |
| 2378 | _sc->imp_env->erase(p); |
| 2379 | p = cons(_sc, str, p); |
| 2380 | funcargs++; |
| 2381 | } |
| 2382 | return reverse(_sc, p); |
| 2383 | } |
| 2384 | |
| 2385 | pointer SchemeFFI::remove_global_var(scheme* _sc, pointer args) |
| 2386 | { |
nothing calls this directly
no test coverage detected