8 #include <hilti/ast/declaration.h> 9 #include <hilti/ast/declarations/property.h> 10 #include <hilti/ast/id.h> 11 #include <hilti/ast/node.h> 12 #include <hilti/ast/statement.h> 13 #include <hilti/ast/statements/block.h> 14 #include <hilti/ast/statements/expression.h> 15 #include <hilti/base/util.h> 27 Module(
ID id, std::vector<Declaration> decls, std::vector<Statement> stmts,
const Meta& m =
Meta())
30 const auto& id()
const {
return child<ID>(0); }
31 const auto& statements()
const {
return child<statement::Block>(1); }
32 const auto& declarations()
const {
33 if ( _cache.declarations.empty() )
34 _cache.declarations = childsOfType<Declaration>();
36 return _cache.declarations;
39 const auto& preserved()
const {
return _preserved; }
40 auto& preserved() {
return _preserved; }
42 bool isEmpty()
const {
44 return childs().size() <= 2 && statements().statements().empty();
118 void clearCache() { _cache.declarations.clear(); }
121 std::vector<Node> _preserved;
123 mutable struct { std::vector<Declaration> declarations; } _cache;
auto & childs() const
Definition: node.h:445
Definition: expression.h:14
void add(Expression e)
Definition: module.h:102
std::vector< declaration::Property > moduleProperties(const ID &id) const
Definition: module.cc:37
void addChild(Node n)
Definition: node.h:434
void clear()
Definition: module.cc:9
auto properties() const
Definition: module.h:116
void add(Statement s)
Definition: module.h:90
void add(Declaration n)
Definition: module.h:78
std::map< std::string, node::detail::PropertyValue > Properties
Definition: node.h:83
Definition: node_ref.h:44
NodeRef preserve(Node n)
Definition: module.cc:22
Result< declaration::Property > moduleProperty(const ID &id) const
Definition: module.cc:28