13 #include <hilti/rt/filesystem.h> 15 #include <hilti/ast/id.h> 16 #include <hilti/ast/module.h> 17 #include <hilti/base/logger.h> 18 #include <hilti/base/result.h> 19 #include <hilti/base/util.h> 20 #include <hilti/compiler/context.h> 21 #include <hilti/compiler/detail/cxx/unit.h> 22 #include <hilti/compiler/jit.h> 37 using MetaData = detail::cxx::linker::MetaData;
71 const auto&
id()
const {
return _index.id; }
74 const auto&
path()
const {
return _index.path; }
82 const auto&
extension()
const {
return _extension; }
92 void setExtension(
const hilti::rt::filesystem::path& ext) { _extension = ext; }
94 enum ASTState { Modified, NotModified };
122 bool validateASTPre(
const Plugin& plugin);
130 bool validateASTPost(
const Plugin& plugin);
187 bool addDependency(std::shared_ptr<Unit> unit);
196 return _cxx_unit->linkerMetaData();
213 bool requiresCompilation();
235 std::shared_ptr<Context>
context()
const {
return _context.lock(); }
254 const hilti::rt::filesystem::path& path,
255 std::optional<hilti::rt::filesystem::path> ast_extension = {});
270 static std::shared_ptr<Unit> fromModule(
const std::shared_ptr<Context>& context,
hilti::Module module,
271 hilti::rt::filesystem::path extension);
289 const hilti::rt::filesystem::path& parse_extension,
290 const hilti::rt::filesystem::path& ast_extension,
291 std::optional<ID> scope,
292 std::vector<hilti::rt::filesystem::path> search_dirs);
304 const hilti::rt::filesystem::path& extension);
315 const hilti::rt::filesystem::path& path);
326 const hilti::rt::filesystem::path& path =
"");
339 const std::vector<linker::MetaData>& mds);
357 static std::pair<bool, std::optional<linker::MetaData>> readLinkerMetaData(
358 std::istream& input,
const hilti::rt::filesystem::path& path =
"<input stream>");
363 Unit(std::shared_ptr<Context> context,
ID id, hilti::rt::filesystem::path path,
364 hilti::rt::filesystem::path extension,
Node&& module)
365 : _index(
id, util::normalizePath(path)),
366 _extension(extension),
367 _module(std::move(module)),
368 _context(std::move(context)) {}
370 Unit(std::shared_ptr<Context> context,
ID id, hilti::rt::filesystem::path path,
371 hilti::rt::filesystem::path extension, std::optional<detail::cxx::Unit> cxx_unit = {})
372 : _index(
id, util::normalizePath(path)),
373 _extension(extension),
374 _context(std::move(context)),
375 _cxx_unit(std::move(cxx_unit)) {}
383 bool _collectErrors();
386 void _destroyModule();
390 const hilti::rt::filesystem::path& path);
393 hilti::rt::filesystem::path _extension;
394 std::optional<Node> _module;
395 std::vector<std::weak_ptr<Unit>> _dependencies;
396 std::weak_ptr<Context> _context;
397 std::optional<detail::cxx::Unit> _cxx_unit;
398 bool _resolved =
false;
399 bool _requires_compilation =
false;
Definition: context.h:106
void setExtension(const hilti::rt::filesystem::path &ext)
Definition: unit.h:92
const Options & options() const
Definition: unit.h:238
bool isCompiledHILTI() const
Definition: unit.h:206
bool isResolved()
Definition: unit.h:224
const auto & id() const
Definition: unit.h:71
Node & module()
Definition: unit.h:59
void setRequiresCompilation()
Definition: unit.h:219
NodeRef moduleRef() const
Definition: unit.h:53
const auto & path() const
Definition: unit.h:74
Result< linker::MetaData > linkerMetaData() const
Definition: unit.h:194
const auto & dependencies()
Definition: unit.h:176
const auto & cacheIndex()
Definition: unit.h:68
std::shared_ptr< Context > context() const
Definition: unit.h:235
Definition: node-ref.h:44
void clearDependencies()
Definition: unit.h:179
const auto & extension() const
Definition: unit.h:82
void setResolved(bool resolved)
Definition: unit.h:232