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(
const std::shared_ptr<hilti::Context>& context) : _context(context), _gb(
this), _pb(
this) {}
37 auto context()
const {
return _context.lock(); }
38 const auto& options()
const {
return context()->options(); }
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 auto uniquer() {
return &_uniquer; }
56 const auto& moduleProperties()
const {
return _properties; }
60 _decls_added.insert(d.id());
61 _new_decls.push_back(std::move(d));
64 bool haveAddedDeclaration(
const ID&
id) {
return _decls_added.find(
id) != _decls_added.end(); }
68 std::weak_ptr<hilti::Context> _context;
72 std::vector<hilti::declaration::Property> _properties;
76 std::vector<Declaration> _new_decls;
77 std::unordered_set<ID> _decls_added;
Definition: declaration.h:53
Definition: parser-builder.h:163
Definition: grammar-builder.h:25
Definition: property.h:15
bool compileModule(hilti::Node *root, hilti::Unit *u)
Definition: codegen.cc:419