std::vector<T> values;
std::vector<LinearLabelRef> labels;
};
-struct SwitchArguments : public SwitchArgs<SwitchStmt::ValueType> {};
-struct SwitchCaseArguments : public SwitchArgs<SwitchCaseStmt::ValueType> {};
-struct SwitchRankArguments : public SwitchArgs<SwitchRankStmt::ValueType> {};
-struct SwitchTypeArguments : public SwitchArgs<SwitchTypeStmt::ValueType> {};
+using SwitchArguments = SwitchArgs<SwitchStmt::ValueType>;
+using SwitchCaseArguments = SwitchArgs<SwitchCaseStmt::ValueType>;
+using SwitchRankArguments = SwitchArgs<SwitchRankStmt::ValueType>;
+using SwitchTypeArguments = SwitchArgs<SwitchTypeStmt::ValueType>;
template<typename T> bool IsDefault(const typename T::ValueType &valueType) {
return std::holds_alternative<typename T::Default>(valueType);
};
// implementation of a (moveable) maybe type
-template<typename T> // T must be std::optional<...>
+template<typename T>
struct MaybeMixin {
MaybeMixin(T &&x) : o{std::move(x)} {}
using MaybeTrait = std::true_type;
}
inline ApplyExprStmt *GetApplyExpr(Statement *stmt) {
- return std::visit(
- common::visitors{
- [](ApplyExprStmt &s) { return &s; },
- [](auto &) -> ApplyExprStmt * { return nullptr; },
- },
- stmt->u);
+ return std::get_if<ApplyExprStmt>(&stmt->u);
}
Addressable_impl *GetAddressable(Statement *stmt);
SUM_TYPE_COPY_MIXIN(Value)
template<typename A> Value(A *a) : SumTypeCopyMixin{a} {}
Value(const Nothing &n) : SumTypeCopyMixin{n} {}
- Value(Nothing &&n) : SumTypeCopyMixin{std::move(n)} {}
Value() : SumTypeCopyMixin{NOTHING} {}
};
inline bool IsNothing(Value value) {
- return std::visit(
- common::visitors{
- [](Nothing &) { return true; },
- [](auto *) { return false; },
- },
- value.u);
+ return std::holds_alternative<Nothing>(value.u);
}
}