9 #include <spicy/ast/types/unit.h> 10 #include <spicy/compiler/detail/codegen/production.h> 20 using Cases = std::vector<std::pair<std::vector<Expression>,
Production>>;
22 Switch(
const std::string&
symbol, Expression expr, Cases cases, std::optional<Production> default_,
25 _expression(std::move(expr)),
26 _cases(std::move(cases)),
27 _default(std::move(default_)),
28 _attributes(std::move(attributes)) {}
30 const Expression& expression()
const {
return _expression; }
31 const Cases& cases()
const {
return _cases; }
32 const std::optional<Production>& default_()
const {
return _default; }
33 const AttributeSet& attributes()
const {
return _attributes; }
36 std::vector<std::vector<Production>> rhss()
const;
37 std::optional<spicy::Type> type()
const {
return {}; }
38 bool nullable()
const {
return production::nullable(rhss()); }
44 bool atomic()
const {
return false; }
45 bool supportsSynchronize()
const {
return hasSize(); }
46 std::string render()
const;
49 Expression _expression;
51 std::optional<Production> _default;
Definition: production.h:24
Definition: production.h:120
const std::string & symbol() const
Definition: production.h:196
bool hasSize() const
Definition: production.h:185
Definition: production.h:170
Definition: attribute.h:159
Definition: location.h:17
ProductionBase(std::string symbol, Location l=location::None)
Definition: production.h:181