7 #include <unordered_set> 11 #include <hilti/ast/declarations/function.h> 12 #include <hilti/ast/declarations/property.h> 13 #include <hilti/ast/node.h> 14 #include <hilti/base/uniquer.h> 15 #include <hilti/compiler/unit.h> 17 #include <spicy/ast/types/unit-items/field.h> 18 #include <spicy/ast/types/unit.h> 19 #include <spicy/compiler/detail/codegen/grammar-builder.h> 20 #include <spicy/compiler/detail/codegen/parser-builder.h> 32 CodeGen(std::shared_ptr<hilti::Context> context) : _context(std::move(context)), _gb(
this), _pb(
this) {}
37 const auto& context()
const {
return _context; }
38 const auto& options()
const {
return _context->options(); }
40 hilti::Type compileUnit(
const type::Unit& unit,
41 bool declare_only =
true);
43 std::optional<hilti::declaration::Function> compileHook(
45 std::optional<std::reference_wrapper<const type::unit::item::Field>> field,
bool foreach,
bool debug,
46 std::vector<type::function::Parameter> params, std::optional<hilti::Statement> body,
47 std::optional<Expression> ,
const hilti::Meta& meta);
54 NodeRef preserveNode(Expression x);
55 NodeRef preserveNode(Statement x);
57 auto uniquer() {
return &_uniquer; }
59 const auto& moduleProperties()
const {
return _properties; }
62 void addDeclaration(Declaration d) {
63 _decls_added.insert(d.id());
64 _new_decls.push_back(std::move(d));
67 bool haveAddedDeclaration(
const ID&
id) {
return _decls_added.find(
id) != _decls_added.end(); }
71 std::shared_ptr<hilti::Context> _context;
75 std::vector<hilti::declaration::Property> _properties;
79 std::vector<Declaration> _new_decls;
80 std::unordered_set<ID> _decls_added;
Definition: parser-builder.h:151
Definition: grammar-builder.h:25
Definition: property.h:16
Definition: node_ref.h:44
bool compileModule(hilti::Node *root, bool init, hilti::Unit *u)
Definition: codegen.cc:371