MCPcopy Create free account
hub / github.com/digego/extempore / get_function_args

Method get_function_args

src/SchemeFFI.cpp:2334–2383  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

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 {

Callers

nothing calls this directly

Calls 11

string_valueFunction · 0.85
pair_carFunction · 0.85
rsplitFunction · 0.85
mk_stringFunction · 0.85
reverseFunction · 0.85
getFunctionMethod · 0.80
beginMethod · 0.80
endMethod · 0.80
getTypeMethod · 0.80
eraseMethod · 0.80
printMethod · 0.45

Tested by

no test coverage detected