static bool pathExists(const std::string& path) { #if LLVMREV < 217625 bool exists; llvm_error_code code = llvm::sys::fs::exists(path, exists); assert(LLVM_SYS_FS_EXISTS_CODE_OKAY(code)); #else bool exists = llvm::sys::fs::exists(path); #endif return exists; }
static Box* importSub(const std::string* name, Box* parent_module) { BoxedList* path_list; if (parent_module == NULL) { path_list = getSysPath(); if (path_list == NULL || path_list->cls != list_cls) { raiseExcHelper(RuntimeError, "sys.path must be a list of directory names"); } } else { path_list = static_cast<BoxedList*>(parent_module->getattr("__path__", NULL)); if (path_list == NULL || path_list->cls != list_cls) { raiseExcHelper(ImportError, "No module named %s", name->c_str()); } } llvm::SmallString<128> joined_path; for (int i = 0; i < path_list->size; i++) { Box* _p = path_list->elts->elts[i]; if (_p->cls != str_cls) continue; BoxedString* p = static_cast<BoxedString*>(_p); joined_path.clear(); llvm::sys::path::append(joined_path, p->s, *name + ".py"); std::string fn(joined_path.str()); if (VERBOSITY() >= 2) printf("Searching for %s at %s...\n", name->c_str(), fn.c_str()); bool exists; llvm::error_code code = llvm::sys::fs::exists(joined_path.str(), exists); assert(LLVM_SYS_FS_EXISTS_CODE_OKAY(code)); if (!exists) continue; if (VERBOSITY() >= 1) printf("Importing %s from %s\n", name->c_str(), fn.c_str()); BoxedModule* module = createAndRunModule(*name, fn); return module; } if (*name == "test") { return importTestExtension(); } raiseExcHelper(ImportError, "No module named %s", name->c_str()); }