当前位置: 首页>>代码示例>>C++>>正文


C++ CodeGen::prepare方法代码示例

本文整理汇总了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;
				}
			}	
		
		}

	}
//.........这里部分代码省略.........
开发者ID:xuanya4202,项目名称:ew_base,代码行数:101,代码来源:modules.cpp


注:本文中的CodeGen::prepare方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。