本文整理汇总了C++中CodeGen::prepare方法的典型用法代码示例。如果您正苦于以下问题:C++ CodeGen::prepare方法的具体用法?C++ CodeGen::prepare怎么用?C++ CodeGen::prepare使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CodeGen
的用法示例。
在下文中一共展示了CodeGen::prepare方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: import
void CG_GGVar::import(const String& lib,bool reload)
{
CG_GGVar &tb0(CG_GGVar::current());
if (!reload && !tb0[lib].is_nil())
{
return;
}
int idx = -1;
static bst_set<String> loading;
if(!loading.insert(lib).second)
{
return;
}
try
{
DataPtrT<CallableModule> pmodule(new CallableModule(lib));
CodeGen cgen;
cgen.module = lib;
String libfile="";
arr_1t<String> libpaths=string_split(System::GetEnv("EWSL_LIBPATH","ewsl_lib"),";");
bool is_folder=false;
for(size_t i=0;i<libpaths.size();++i)
{
String path=libpaths[i];
if(path=="") continue;
arr_1t<FileItem> files=FSLocal::current().FindFilesEx(path,lib+".*");
if(files.empty()) continue;
is_folder=files[0].flags.get(FileItem::IS_FOLDER);
libfile=System::AdjustPath(path,true)+files[0].filename;
break;
}
if(libfile=="")
{
libfile="ewsl_lib/"+lib + ".ewsl";
}
if(!is_folder)
{
if (cgen.prepare(libfile, Executor::INDIRECT_FILE))
{
Executor lexer;
lexer.push(cgen.get());
if (lexer.callx(0, 0))
{
for (auto x = cgen.cg_exports.begin(); x != cgen.cg_exports.end(); ++x)
{
pmodule->value[*x] = tb0[lib + "." + (*x)];
}
tb0[lib].kptr(pmodule);
loading.erase(lib);
return;
}
}
}
else
{
String modulepath=System::AdjustPath(libfile,true);
if (cgen.prepare(modulepath+"main.ewsl", Executor::INDIRECT_FILE))
{
Executor lexer;
lexer.push(cgen.get());
if (lexer.callx(0, 0))
{
for (auto x = cgen.cg_exports.begin(); x != cgen.cg_exports.end(); ++x)
{
pmodule->value[*x] = tb0[lib + "." + (*x)];
}
tb0[lib].kptr(pmodule);
loading.erase(lib);
return;
}
}
}
}
//.........这里部分代码省略.........