10 #include <spicy/ast/types/unit.h> 11 #include <spicy/compiler/detail/codegen/production.h> 24 Unit(
const std::string&
symbol,
type::Unit type, std::vector<Expression> args, std::vector<Production> fields,
26 :
ProductionBase(symbol, l), _type(std::move(type)), _args(std::move(args)), _fields(std::move(fields)) {}
28 const type::Unit& unitType()
const {
return _type; }
29 const auto& arguments()
const {
return _args; }
30 const auto& fields()
const {
return _fields; }
33 std::vector<std::vector<Production>> rhss()
const {
return {_fields}; };
34 std::optional<spicy::Type> type()
const {
return spicy::Type(_type); }
35 bool nullable()
const {
return production::nullable(rhss()); }
36 bool eodOk()
const {
return nullable(); }
37 bool atomic()
const {
return false; }
38 std::string render()
const {
39 return hilti::util::join(hilti::util::transform(_fields, [](
const auto& p) {
return p.symbol(); }),
" ");
44 std::vector<Expression> _args;
45 std::vector<Production> _fields;
Definition: production.h:24
const std::string & symbol() const
Definition: production.h:191
Definition: production.h:170
std::string join(const T &l, const std::string &delim="")
Definition: util.h:181
Definition: location.h:17
ProductionBase(std::string symbol, Location l=location::None)
Definition: production.h:181