12 #include <hilti/rt/filesystem.h> 14 #include <hilti/ast/id.h> 15 #include <hilti/ast/module.h> 16 #include <hilti/base/logger.h> 17 #include <hilti/base/result.h> 18 #include <hilti/base/util.h> 19 #include <hilti/compiler/context.h> 20 #include <hilti/compiler/detail/cxx/unit.h> 21 #include <hilti/compiler/jit.h> 33 using MetaData = detail::cxx::linker::MetaData;
55 auto id()
const {
return _id; }
61 auto path()
const {
return _path; }
121 std::optional<ID> scope = {},
122 std::vector<hilti::rt::filesystem::path> search_dirs = {});
144 Node& imported(
const ID&
id)
const;
151 std::set<context::ModuleIndex> allImported(
bool code_only =
false)
const;
161 if (
auto x = _lookupModule(
id) )
162 return x->requires_compilation;
174 return _cxx_unit->linkerMetaData();
187 std::shared_ptr<Context>
context()
const {
return _context; }
205 const hilti::rt::filesystem::path& path =
"");
217 static Result<Unit> fromSource(
const std::shared_ptr<Context>& context,
const hilti::rt::filesystem::path& path);
237 static Result<Unit> fromCache(
const std::shared_ptr<Context>& context,
const hilti::rt::filesystem::path& path);
247 const hilti::rt::filesystem::path& path =
"");
259 static Result<Unit> link(
const std::shared_ptr<Context>& context,
const std::vector<linker::MetaData>& mds);
277 static std::pair<bool, std::optional<linker::MetaData>> readLinkerMetaData(
278 std::istream& input,
const hilti::rt::filesystem::path& path =
"<input stream>");
285 Unit(std::shared_ptr<Context> context,
ID id, hilti::rt::filesystem::path path,
bool have_hilti_ast)
286 : _context(std::move(context)), _id(std::move(
id)), _path(std::move(path)), _have_hilti_ast(have_hilti_ast) {}
289 std::vector<std::pair<ID, NodeRef>> _currentModules()
const;
294 std::optional<context::CachedModule> _lookupModule(
const ID&
id)
const;
300 bool _validateASTs(std::vector<std::pair<ID, NodeRef>>& modules,
301 const std::function<
bool(
const ID&,
NodeRef&)>& run_hooks_callback);
304 bool _validateAST(
const ID&
id,
NodeRef module,
const std::function<
bool(
const ID&,
NodeRef&)>& run_hooks_callback);
307 bool _validateASTs(
const ID&
id, std::vector<Node>& nodes,
308 const std::function<
bool(
const ID&, std::vector<Node>&)>& run_hooks_callback);
310 void _determineCompilationRequirements(
const Node& module);
316 void _dumpAST(
const Node& module, std::ostream& stream,
const std::string& prefix,
int round = 0);
318 void _dumpASTs(std::ostream& stream,
const std::string& prefix,
int round = 0);
320 void _saveIterationASTs(
const std::string& prefix,
int round = 0);
322 void _resetNodes(
const ID&
id,
Node* root);
326 const hilti::rt::filesystem::path& path);
328 std::shared_ptr<Context> _context;
330 hilti::rt::filesystem::path _path;
331 bool _have_hilti_ast;
333 std::set<ID> _modules;
334 std::optional<detail::cxx::Unit> _cxx_unit;
const Options & options() const
Definition: unit.h:190
bool isCompiledHILTI() const
Definition: unit.h:184
NodeRef module()
Definition: unit.h:46
auto id() const
Definition: unit.h:55
Result< linker::MetaData > linkerMetaData() const
Definition: unit.h:172
auto path() const
Definition: unit.h:61
std::shared_ptr< Context > context() const
Definition: unit.h:187
Result< bool > requiresCompilation(const ID &id)
Definition: unit.h:160
Definition: node_ref.h:44